从csv获取第一个数值,其中所有第一列在Python 2.7中共享相同的值

时间:2014-01-15 16:51:48

标签: python loops csv match

我有一个像下面这样的csv文件。我希望Python获取第一列中的单元格共享相同ID的第一个数值。然后我想将ID和值存储在另一个csv中。

编辑:实际数据在excel中,但已保存为csv。这就是excel中字段的样子。 CSV以逗号分隔,没有标题。

id          days
8215    \N
8215    \N
8215    700
8215    578
8215    1491
8215    1400
8215    486
18150   \N
18150   610
18150   730
18150   456
18150   548
18150   883
30610   \N
30610   792
30610   518

.
.

期望的结果:

8215    700
18150   610
30610   792
.
.

这是我到目前为止所拥有的。我希望它只打印'\ N'之后的第一个数值。不知何故,如果在第12列中有两行或多行'\ N',它仍会打印'\ N'。我还想像上面的例子一样保存ID。

import csv

with open('sg_cand.csv', 'rb') as csvfile:
    csvReader = csv.reader(csvfile)
    for row in csvReader:
        if row[11]  == '\N':
            print   csvReader.next()[11]

1 个答案:

答案 0 :(得分:1)

使用set跟踪您已记录的值为id的值:

import csv

with open('sg_cand.csv', 'rb') as csvfile:
    csvReader = csv.reader(csvfile)
    seen = set()
    for row in csvReader:
        if row[0] not in seen and row[11] != '\N':
            seen.add(row[0])
            print row[0], row[11]

这会打印任何不等于row[11]的{​​{1}}值,并且之前未见过其ID(此处假设为\N)。