2014-06-27 59 views
-4

我想知道如何刪除基於任何列中的冗餘的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 

正如你可以看到這裏,我想刪除其中任何一列被重複的行。此外,我的數據已經排序,所以我認爲只需比較兩個連續的行就足夠了。

+3

所以,你一定要記住上一行與當前行比較。哪裏有問題 ?你的代碼在哪裏? – furas

+1

你在顯示哪一行被刪除時不一致。例如,刪除第一列中帶有'5'的第二行,但刪除第三個列中帶有'10'的第一行。這是什麼?如果這是排序,在哪個字段? – dawg

+0

一般來說,對數據進行排序不會讓您比較連續的行,因爲這樣做只會保證主要排序列中的重複值將會在一起。如果你想避免所有列中的重複項,你必須進行多重排序和重複刪除通行證,或者跟蹤每列中到目前爲止所看到的所有唯一值,以便一次完成。我認爲你應該修改你的問題並重新打開它 - 這是一個有趣的問題。 – martineau

回答

0

試試吧。這裏是執行相同操作的邏輯:

  1. 根據新行將數據拆分爲list1
  2. 遍歷這個list1又在list1分割每個元素基礎上的空間,從而創建一個名爲list2
  3. 然後比較list2[i][j]list2[i+1][j]列表中的另一列表
1

簡單的例子 - 我檢查所有以前行,以確保。 BTW

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


使用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 

結果我刪除[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 
+0

你可以消除'repeat'標誌,而是使用['for'/'else'複合語句](https://docs.python.org/2/reference/compound_stmts.html#the-for-statement)來將非重複的數據行附加到新的csv文件。 – martineau

+0

@martineau您能否展示您的解決方案? – furas

+0

我只是建議如何優化你的主循環,但我不能發佈它,因爲問題是關閉的。 '在csv [1:]中爲x:\ n \ tfor y在new_csv中:\ n \ t \ tfor a,b在zip(x,y)中:\ n \ t \ t \ tif a == b:\ n \噸\噸\噸\ tbreak \ n \噸\ telse:\ n \噸\噸\ tnew_csv.append(x)的\ N'。 – martineau