合并python或numpy中的记录

时间:2012-01-27 00:07:05

标签: python merge 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处的先前值测试身份,但这非常笨拙。谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

如果第一列中给定值的所有实例都是连续的,那么这是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))或类似的事情,我现在无法测试它)

答案 1 :(得分:3)

如果值是列表,则可以使用字典。 defaultdict模块中的collections对此非常有用。

答案 2 :(得分:1)

这是你可以使用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]