[英]merging records in python or numpy
我有一个csv文件,其中第一列包含标识符,第二列包含相关数据。 标识符被复制任意次数,因此文件看起来像这样。
data1,123
data1,345
data1,432
data2,654
data2,431
data3,947
data3,673
我想合并记录,为每个标识符生成一条记录并获取。
data1,123,345,432
data2,654,431
data3,947,673
有没有一种有效的方法在python或numpy中执行此操作? 由于重复键,字典似乎没有了。 目前,我在列表列表中有行,然后循环并使用列表中索引0处的先前值测试身份,但这非常笨拙。 谢谢你的帮助。
如果第一列中给定值的所有实例都是连续的,则这是itertools.groupby
的完美用例。 它将使用这样的东西:
from itertools import groupby
from csv import reader
from operator import itemgetter
with open(filename) as f:
for k, g in groupby(reader(f), key=itemgetter(0)):
record = ','.join(k, *g)
# do something with record, e.g. write to a file
(你可能要做','.join(k, *list(g))
或类似的东西,我现在无法测试它)
如果值是列表,则可以使用字典。 collections
模块中的defaultdict
对此非常有用。
这是你如何使用defaultdict来做你需要的,
import csv
from collections import defaultdict
records = defaultdict(list)
for key, value in csv.reader(open(filename)):
records[key].append(int(value))
for key in records:
print key, records[key]
结果,
data1 [123, 345, 432]
data3 [947, 673]
data2 [654, 431]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.