2

我有一个制表符分隔的表,它有多列(1500)和几行(10)。

基本上如何让我的程序查看列而不是行?我需要根据其中的内容来计算和组织列。

一个示例是计算非“-”列中有多少条目。

我认为 itertools.groupby 可能是我正在寻找的,但我不知道语法,或者它是否是正确的。

我已经学习编程/python 两个星期了,所以我不知道该怎么做。谢谢你能给我的任何帮助。

4

6 回答 6

2

你可能想看看csvreader doc

拥有 csv 关键字,您会在 Google 上找到大量您想做的事情。

比如这个

于 2012-05-25T16:40:21.547 回答
1

如果您熟悉 R(即使您不熟悉),我推荐pandas库。它为 python 带来了 R 中的 DataFrame 结构,它允许您轻松地按行或列操作表(以及许多其他内容)。

于 2012-05-25T17:59:38.250 回答
0
filename = 'data.txt'
col = 2 # note, this uses a zero-based index.

with open(filename) as f:
    for line in f:
        target = line.split()[col]
        print target

col这会在文件中找到列filename并将找到的字符串放入变量target中。您可以相应地调整您的行动以达到目标。

假设每行将包含您要查找的列数,并且每行都包含数据。

于 2012-05-25T16:40:28.930 回答
0

如果文件不是太大(听起来好像不是),那么最简单的方法可能是将整个文件读入一个表格,然后从那里开始。例如:

text = open('some_file.txt').read()
table = [line.split('\t') for line in text.split('\n') if line.strip()]

然后,您使用例如将给定列提取为列表:

col5 = [row[5] for row in table]

您可以使用以下方法将表格从行列表转换为列列表:

columns = [[row[c] for row in table] for c in range(NUM_COLUMNS)

(这假设您有固定数量的列,并且所有行都具有完全相同的列数。)

于 2012-05-25T16:41:46.977 回答
0

您肯定想用上下文管理器 ( with) 打开一个文件。然后,您想遍历文件的行(即“行”)。你去掉一些空白字符,看看有没有剩下的东西。然后在出现特定分隔符的位置拆分行,从而为您提供此行中的“字段”:

with open(filename) as f:
    for line in f:
        line = line.strip()
        if line:
            tokens = line.split(delimiter)

这是一个强大的概念。只需将其与您的分析/评估代码合并即可。

于 2012-05-25T16:45:24.203 回答
0

谢谢你们每一个人的帮助!我尝试了它们中的每一个,它们都按照描述进行,并且可能会被合并到我的代码中(如果我更擅长 python)。我发现最适合我对列所做的工作是:

table = []
for each_line in homefile:
##doesn't include first line
        arr1 = each_line.strip("\n").split('\t')
        table.append(arr1)
##created a list of lists(matrix); each row as one entry in table(list)
cols = zip(*table)
##this switches rows and columns

然后,我能够对每一列进行处理,同时将每一列视为一个列表,其中包含来自原始制表符分隔表的每一列的条目。

于 2012-05-29T15:21:29.577 回答