使用外部csv-fi计算Python中列的单词频率

2024-06-08 08:16:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题之前由user907629提出,Maria Zverina回答了这个问题,但她没有从外部csv文件导入数据。在

我的文件包含超过800000条记录,我想导入一个外部csv文件。在这个frequency count代码中应该做什么更改?在


Tags: 文件csv数据代码count记录frequencymaria
3条回答
  1. 使用open从外部读取文件,而不是StringIO
  2. 80万并不是很大,你不在乎记忆,所以你可以把它当作原始问题来读。但如果你认为你需要它来处理更大的文件,你必须一个接一个地读。在

检查新代码:

import csv
from collections import Counter


input_stream = open('external.csv')
reader = csv.reader(input_stream, delimiter='\t')

reader.next() #skip header
cities = [row[2] for row in reader]

for (k,v) in Counter(cities).iteritems():
    print "%s appears %d times" % (k, v)

您可以在不存储任何中介列表的情况下执行此操作:

import csv
from collections import Counter
from itertools import imap
from operator import  itemgetter

with open('yourcsv') as f:
    next(f) # skip the header
    cn = Counter(imap(itemgetter(2), csv.reader(f)))

    for t in cn.iteritems():
        print("{} appears {} times".format(*t))

没有理由在列表中存储数据,除非您计划使用该列表,itemgetter将只从每行中提取第三列值。您需要传递任何要计数的列,并将分隔符设置为任何分隔数据的列。在

如果您只需要执行一次,并且您使用的是UNIX机器,那么您也可以使用优秀的命令行工具。数词就简单到

cat "inputfile.txt" | sort | uniq -c

要在输出文件中存储这些值,请使用

^{pr2}$

有关命令行何时可以比hadoop集群更快(最多235x)和更简单的讨论,请参见http://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html。在

相关问题 更多 >