【问题标题】:I need to read from a CSV file, and write to a new CSV file with 0 duplicates我需要从 CSV 文件中读取,并写入一个包含 0 个重复项的新 CSV 文件
【发布时间】:2019-09-15 07:50:53
【问题描述】:

我有一个包含一些数据的 CSV 文件,我需要写入新的 CSV,但我不能有重复的条目。

我已经解决了写作部分,但我无法解决重复部分。到目前为止,我已经尝试过嵌套循环,但成功率为 0。

这可行,但有重复

with open('somefile.csv', 'w') as csvfile:
        filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        filewriter.writerow(['Data', 'MoreData', 'EvenMoreData'])

        for row in rows:
    # parsing each column of a row  
            filewriter.writerow([row[3], row[4], row[2]])

一切都出错了

   for row in rows:
    # parsing each column of a row  
            for copy in rows:
                if row[3] != copy[3] and row[2] != copy[2]:
                    filewriter.writerow([copy[3], copy[4], copy[2]])

【问题讨论】:

标签: python python-3.x csv duplicates


【解决方案1】:

您可以使用一组键元组(在您的情况下为row[2]row[3])来跟踪您已经看到的键:

seen = set()
for row in rows:
    if (row[2], row[3]) not in seen:
        seen.add((row[2], row[3]))
        filewriter.writerow([row[3], row[4], row[2]])

【讨论】:

    【解决方案2】:

    set

    使用set 代替列表将消除重复。

    for row in set(rows):
      ...
    

    在这种情况下,它可能是一个列表列表,因此如果您希望每行有唯一数据,使用 set(row) 也可能符合您的兴趣。

    【讨论】:

      【解决方案3】:

      您可以将其导入 pandas,删除重复项,然后导出一个新的 csv:

      import pandas pd
      
      df = pd.read_csv('my_csv.csv')
      df.drop_duplicates(keep=False, inplace=True)
      df.to_csv('my_csv_fixed.csv')
      
      

      上面会添加一个索引列。如果你不想要它,索引第一 (0) 列,或者任何你想要的:

      df = pd.read_csv('my_csv.csv', index_col=0)
      

      此外,如果您更喜欢制表符作为分隔符,请使用 sep 关键字参数导出:

      df.to_csv('my_csv_fixed.csv', sep='\t')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-05
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        相关资源
        最近更新 更多