我有一个制表符分隔表,它有多列(1500)和几行(10)。
基本上我如何让我的程序看到列而不是行?我需要根据其中的内容来计算和组织列。
一个例子是计算列中没有' - '的条目数。
我认为itertools.groupby可能是我正在寻找的但我不知道语法或者它是否是正确的东西。
我已经学习编程/ python两周了,所以我不知道该怎么做。谢谢你能给我的任何帮助。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果您熟悉R(即使您不熟悉),我建议使用pandas库。它为python带来了R中的DataFrame结构,它允许您按行或列(以及许多其他内容)轻松地操作表。
答案 2 :(得分: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
。您可以相应地调整您的行动目标。
假设每行都有你想要的列数,并包含每行的数据。
答案 3 :(得分:0)
如果文件不是太大(听起来不是这样),那么最简单的方法就是将整个内容读入表中,然后从那里开始。 E.g:
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)
(假设您有一个固定数量的列,并且所有行都具有该列数。)
答案 4 :(得分:0)
您肯定希望使用上下文管理器(with
)打开文件。然后,您想要遍历文件的行(即“行”)。你摆脱了一些空白字符,看看是否留下了什么。然后在这些位置拆分行,在那里出现一个特定的分隔符,它为你提供了这一行中的“字段”:
with open(filename) as f:
for line in f:
line = line.strip()
if line:
tokens = line.split(delimiter)
这是一个强大的概念。只需将其与您的分析/评估代码合并即可。
答案 5 :(得分: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
然后我可以对每个列执行操作,只需将每个列作为包含原始制表符分隔表的每列中的条目的列表。