【问题标题】:Python Remove duplicates from csv if value in column duplicated如果列中的值重复,Python 从 csv 中删除重复项
【发布时间】:2019-04-14 08:53:33
【问题描述】:

我正在尝试编写 csv 解析器,因此如果我在名称列中有相同的名称,我将删除第二个名称的行。例如:

['CSE_MAIN\\LC-CSEWS61', 'DEREGISTERED', '2018-04-18-192446'],
['CSE_MAIN\\IT-Laptop12', 'DEREGISTERED', '2018-03-28-144236'],
['CSE_MAIN\\LC-CSEWS61', 'DEREGISTERED', '2018-03-28-144236']]

我需要删除最后一行,因为它与第一行同名。

我写的是:

file2 = str(sys.argv[2])
print ("The first file is:" + file2)
reader2 = csv.reader (open(file2))
with open("result2.csv",'wb') as result2:
    wtr2= csv.writer( result2 )
    for r in reader2:
        wtr2.writerow( (r[0], r[6], r[9] ))
newreader2 = csv.reader (open("result2.csv"))
sortedlist2 = sorted(newreader2, key=lambda col: col[2] , reverse = True)
for i in range(len(sortedlist2)):
    for j in range(len(sortedlist2)-1):
        if (sortedlist2[i][0] == sortedlist2[j+1][0] and sortedlist2[i][1]!=sortedlist2[j+1][1]):
            if(sortedlist2[i][1]>sortedlist2[j+1][1]):
                del sortedlist2[i][0-2]
            else:
                del sortedlist2[j+1][0-2]

谢谢。

【问题讨论】:

  • 您正在删除列表条目 (del sortedlist2[i])。这样它还没有写入新文件。打印排序列表2。所以你看看里面有什么。

标签: python csv parsing


【解决方案1】:

试试熊猫:

import pandas as pd
df = pd.read_csv('path/name_file.csv')
df = df.drop_duplicates([0]) #0 this is columns which will compare.
df.to_csv('New_file.csv') #save to csv

此方法从第 1 列中删除所有重复项。

如果你需要简单的删除,你可以使用方法drop。

#You file after use pandas (print(df)):
            0                    1                 2
0   CSE_MAIN\LC-CSEWS61     DEREGISTERED    2018-04-18-192446
1   CSE_MAIN\IT-Laptop12    DEREGISTERED    2018-03-28-144236
2   CSE_MAIN\LC-CSEWS61     DEREGISTERED    2018-03-28-144236

例如你需要删除 2 行。

df.drop(2,axis=0, inplace=True) #axis=0 means row, if you switch 1 this is columns. 

输出:

              0                  1                 2
0   CSE_MAIN\LC-CSEWS61     DEREGISTERED    2018-04-18-192446
1   CSE_MAIN\IT-Laptop12    DEREGISTERED    2018-03-28-144236

【讨论】:

  • 感谢您的回复,但我的意思是只有当名称相同时我才会删除行。在我的示例中,熊猫应该迭代抛出名称,并且只有在存在重复名称时才会删除第二个
  • 嗯……就这样吧)
  • 哦)我认为您需要将 df.drop_duplicates([0]) 中的 1 更改为 0。我修好了它。再试一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2011-10-04
  • 1970-01-01
  • 2015-09-30
  • 2014-09-30
  • 1970-01-01
相关资源
最近更新 更多