如何根据csv文件中列的相似性删除行

时间:2014-06-27 01:34:20

标签: python csv

我试图弄清楚如何根据任何列中的冗余删除CSV文件中的行。

1  0.002  3
2  0.001  2
5  0.100  1
5  0.023  4
6  0.065  10
15 0.032  10
8  0.450  6 

输出文件如下所示

1  0.002  3
2  0.001  2
5  0.100  1
15 0.032  10
8  0.450  6

正如您在此处所见,我想删除任何列重复的行。此外,我的数据已经排序,所以我认为仅仅比较两个连续的行就足够了。

2 个答案:

答案 0 :(得分:1)

简单示例 - 我检查以前的所有行以确定。
使用csv模块读取和写入CSV文件

csv = [
    [1,  0.002,  3],
    [2,  0.001,  2],
    [5,  0.100,  1],
    [5,  0.023,  4],
    [6,  0.065,  10],
    [15, 0.032,  10],
    [8,  0.450,  6]
]

new_csv = csv[:1]

#print new_csv

for x in csv[1:]:
    #print 'x:', x
    repeated = False
    for y in new_csv:
        #print 'y:', y
        for a,b in zip(x,y):
            if a == b:
                repeated = True
                break            
        if repeated:
            break
    if not repeated:
        new_csv.append(x)

for x in new_csv:
    print x

结果:

[1, 0.002, 3]
[2, 0.001, 2]
[5, 0.1, 1]
[6, 0.065, 10]
[8, 0.45, 6]

顺便说一句:我删除了[15, 0.032, 10],因为[6, 0.065, 10]是列表中的第一个。


编辑相同但没有repeatedfor/elseany()

csv = [
    [1,  0.002,  3],
    [2,  0.001,  2],
    [5,  0.100,  1],
    [5,  0.023,  4],
    [6,  0.065,  10],
    [15, 0.032,  10],
    [8,  0.450,  6]
]

new_csv = csv[:1]

for x in csv[1:]:
    for y in new_csv:
        if any(a == b for a,b in zip(x,y)):
           break            
    else:
        new_csv.append(x)

for x in new_csv:
    print x

答案 1 :(得分:0)

试试自己。这是做同样的逻辑:

  1. 根据新行将数据拆分为list1
  2. 循环显示此list1并再次根据空格拆分list1中的每个元素,从而创建另一个名为list2的列表
  3. 然后比较list2[i][j]list2[i+1][j]列表