比较csv文件中的两行 - Python

时间:2013-07-02 10:03:44

标签: python linux csv numpy

我正在尝试比较csv中的两行。 例如:

abc, 2, foo, bar, baz
abc, 2, bar,baz, band
cab, 3, baz,bar, foo
cab, 3, baz,bar, foo

是否有csv模块或python中的任何模块检查列1是相同还是不同。

例如: 在前两行中,我们看到2,在第三行中,我们看到了数字3。有没有办法找到它

背后的想法是将column 1

中与特定值对应的值相加

所以,

abc, 2, 10,11,12
abc, 2, 7,8,9
cab, 3, 4,5,6
cab, 3, 1,2,3

我基本上想要总结值12+9因为它具有相同的列1。 和数字6 and 3,因为值3在第1列中相同

总结一下,我假设我可以用

创建一个列表
a=list()

将值附加到该列表

a.append(float(line[4]))

并使用numpy来总结

numpy.sum(a)

任何人都可以帮我找出一种pythonic方法来查找两个值是否相同。

3 个答案:

答案 0 :(得分:1)

这样的事情:

>>> from collections import Counter
>>> c = Counter()
with open('abc') as f:
    reader = csv.reader(f, delimiter = ',', skipinitialspace = True)
    for row in reader:
        c[row[1]] += int(row[-1])
...         
>>> c
Counter({'2': 21, '3': 9})

要查找列,请使用itertools.groupby

>>> with open('abc') as f:
    reader = csv.reader(f, delimiter = ',', skipinitialspace = True)
    for k,g in groupby(enumerate(reader), key = lambda x:x[1][1]):
        print k," was common on the rows :",",".join(str(x[0]) for x in g)
...         
2  was common on the rows : 0,1
3  was common on the rows : 2,3

答案 1 :(得分:1)

查看pandas库,您可以根据群组轻松汇总列。例如,如果你有一个像csv:

col1,col2,col3,col4,col5
abc,2,10,11,12
abc,2,7,8,9
cab,3,4,5,6
cab,3,1,2,3

您可以根据col2中的值进行分组和求和,只需几行代码:

import pandas as pd
df = pd.DataFrame.from_csv('test.csv')
df.groupby('col2').sum()

这给了你:

      col3  col4  col5
col2                  
2       17    19    21
3        5     7     9

答案 2 :(得分:0)

你可以按功能使用python group http://docs.python.org/2/library/itertools.html#itertools.groupby

from itertools import groupby
grouped = groupby(data, lambda x: x[1])

这将为您提供按第二列分组的数据。 然后您可以通过以下方式获得每个密钥的总和:

for key, values in grouped:
    columnSum = sum(map(lambda x: int(x[4]), values))