0

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

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

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

例如:在前两行中,我们看到2了,在第三行中,我们看到了 number 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,因为第 1 列中的值 3 相同

总而言之,我假设我可以创建一个列表

a=list()

将值附加到该列表

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

并使用 numpy 来总结

numpy.sum(a)

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

4

3 回答 3

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
于 2013-07-02T10:09:02.833 回答
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
于 2013-07-02T10:23:09.133 回答
0

您可以按功能使用 python 分组 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))
于 2013-07-02T10:14:49.653 回答