繁体   English   中英

合并python或numpy中的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM