我有一个包含一些数据的CSV文件,我需要写入新的CSV,但不能有重复的条目。
我已经解决了写作部分,但我还不能解决重复的部分。到目前为止,我已经尝试了嵌套循环,但没有成功。
这是可行的,但有重复的
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]])
发布于 2019-04-25 20:01:57
您可以使用一组键的元组(在本例中为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]])
发布于 2019-04-25 19:59:47
通过使用set
而不是列表,可以消除重复项。
for row in set(rows):
...
在本例中,它可能是一个列表列表,所以如果您希望每行数据都是唯一的,那么使用set(row)
可能也是您感兴趣的。
发布于 2019-04-25 20:18:08
您可以将其导入到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')
https://stackoverflow.com/questions/55856754
复制