我有一个包含一些数据的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]])
答案 0 :(得分:0)
通过使用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')