0

csv の 2 つの行を比較しようとしています。例えば:

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

csv列1が同じか異なるかを確認するモジュールまたはPythonのモジュールはありますか。

例: 最初の 2 行には が表示2され、3 行目には数字が表示され3ます。それを見つける方法はありますか

その背後にある考え方は、特定の値に対応する値を合計することです。column 1

それで、

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

列1が同じであるため、本質的に値を合計したいと思い12+9ます。6 and 3値3は列1で同じであるため、数値

要約すると、リストを作成できると仮定しています

a=list()

そのリストに値を追加します

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

numpy を使用して合計します

numpy.sum(a)

2つの値が同じかどうかを見つけるためのpythonicな方法を見つけてください。

4

3 に答える 3

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 に答える
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 に答える
0

関数でpythonグループを使用できます http://docs.python.org/2/library/itertools.html#itertools.groupby

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

これにより、2 番目の列でグループ化されたデータが得られます。次に、次の方法で各キーの合計を取得できます。

for key, values in grouped:
    columnSum = sum(map(lambda x: int(x[4]), values))
于 2013-07-02T10:14:49.653 に答える