我需要从CSV文件中读取数据,然后写入0个重复的新CSV文件中

时间:2019-04-25 19:54:55

标签: python python-3.x csv duplicates

我有一个包含一些数据的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]])

3 个答案:

答案 0 :(得分:0)

set

通过使用set而不是列表将消除重复。

for row in set(rows):
  ...

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

答案 1 :(得分:0)

您可以使用一组键元组(在您的情况下为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 :(得分:0)

您可以将其导入熊猫,删除重复的副本,然后导出新的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')