CSV行和列计算

时间:2014-07-22 08:56:25

标签: python csv

我有一个CSV文件,如下所示:

2,2,2
3,3,3
4,4,4
6,6,6
.,.,.
.,.,.

3列,n

如果最后一列中的值相同,我想一次检查两行。

有人知道如何编程吗?

1 个答案:

答案 0 :(得分:0)

(我使用StringIO来模拟文件)

使用两个循环来比较任何两行:​​

data = '''2,2,2
3,3,3
6,6,6
0,0,3
4,4,4
0,0,6'''

from StringIO import StringIO

import csv

#f = open('filename.csv')
#csv_reader = csv.reader(f)

csv_reader = csv.reader(StringIO(data))

rows = list(csv_reader)

#print rows

for index_a, a in enumerate(rows[:-1]):
    for index_b, b in enumerate(rows[index_a+1:], index_a+1):
        if a[2] == b[2] :
            print "the same:", index_a, index_b, a, b

结果

the same: 1 3 ['3', '3', '3'] ['0', '0', '3']
the same: 2 5 ['6', '6', '6'] ['0', '0', '6']

编辑:使用pandas

data = '''2,2,2
3,3,3
6,6,6
0,0,3
4,4,4
0,0,6'''

from StringIO import StringIO

import pandas as pd

df = pd.DataFrame.from_csv(StringIO(data), index_col=None, header=None)

print '\n all rows \n'
print df

print '\n group by column 2 \n'

for name, gr in df.groupby(2):
    print '\n name: %s \n' % name
    print gr
    print 'indexes:', gr.index

结果:

 all rows 

   0  1  2
0  2  2  2
1  3  3  3
2  6  6  6
3  0  0  3
4  4  4  4
5  0  0  6

 group by column 2 


 name: 2 

   0  1  2
0  2  2  2
indexes: Int64Index([0], dtype='int64')

 name: 3 

   0  1  2
1  3  3  3
3  0  0  3
indexes: Int64Index([1, 3], dtype='int64')

 name: 4 

   0  1  2
4  4  4  4
indexes: Int64Index([4], dtype='int64')

 name: 6 

   0  1  2
2  6  6  6
5  0  0  6
indexes: Int64Index([2, 5], dtype='int64')