给定制表符分隔文件,如何计算每列中元素的总数?我的文件大小约为6GB。
column count min max sum mean
80 29573061 2 40 855179253 28.92
81 28861459 2 40 802912711 27.82
82 40 778234605 27.63
83 27479902 2 40 27.44
84 26800815 40 729443846 27.22
85 26127825 2 701704155 26.86
输出:
`column` has 6 items in it
`count` has 5 items in it
and so on
答案 0 :(得分:2)
如下:
import csv
from collections import Counter
counts = Counter()
with open("count.tsv", "rb") as fp:
reader = csv.DictReader(fp, delimiter="\t")
for row in reader:
counts += Counter(k for k,v in row.items() if v.strip())
给出了
>>> counts
Counter({'column': 6, 'mean': 6, 'count': 5, 'max': 5, 'sum': 5, 'min': 4})
尽管如@Cartroo所述,您可能需要根据您想要考虑的空值来更改空白标准。
答案 1 :(得分:0)
假设您的意思是计算非空白文本的出现次数,如下所示:
import collections
titles = None
counts = collections.defaultdict(int)
with open("file.txt") as fd:
for line in fd:
items = line.split("\t")
if titles is None:
if items:
titles = [i.strip() for i in items]
continue
for i in xrange(min(len(titles), len(items))):
if items[i].strip():
counts[titles[i]] += 1
for column, count in counts.iteritems():
print "Column %s has %d items" % (column, count)
请注意,此代码不依赖于具有比标题行更多元素的行,尽管它确实处理较短的行。我确信有更简洁的方法使用列表推导等,但我认为更冗长的风格可能更清晰。
如果你的意思是对值本身或类似的求和,你需要用items
列表做一些更聪明的事情。仅作为示例,找到“计数”列的总和:
total_count = 0
with open("file.txt") as fd:
for line in fd
items = line.split("\t")
try:
total_count += int(items[1])
except ValueError:
pass
我不太确定你要做什么,但希望这些例子可以让你了解如何以简单的方式进行这种处理。
答案 2 :(得分:0)
我会做这样的事情:
对于列数,您可以使用其他列表。例如,count是我们的列表,count [0]将是列“column”的元素数,count [1]将是“count”列的元素数等。
答案 3 :(得分:0)
Map reduce库是为这种大数据处理而制作的。使用它是个好主意。 https://developers.google.com/appengine/docs/python/dataprocessing/overview#Downloading_the_Mapreduce_Library