首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我需要从CSV文件中读取,然后写入到一个新的CSV文件中,其中0个重复项

我需要从CSV文件中读取,然后写入到一个新的CSV文件中,其中0个重复项
EN

Stack Overflow用户
提问于 2019-04-26 03:54:55
回答 3查看 66关注 0票数 1

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

我已经解决了写作部分,但我还不能解决重复的部分。到目前为止,我已经尝试了嵌套循环,但没有成功。

这是可行的,但有重复的

代码语言:javascript
代码运行次数: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]])

哪里出了问题

代码语言:javascript
代码运行次数:0
运行
复制
   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]])
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-26 04:01:57

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

代码语言:javascript
代码运行次数:0
运行
复制
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]])
票数 0
EN

Stack Overflow用户

发布于 2019-04-26 03:59:47

set

通过使用set而不是列表,可以消除重复项。

代码语言:javascript
代码运行次数:0
运行
复制
for row in set(rows):
  ...

在本例中,它可能是一个列表列表,所以如果您希望每行数据都是唯一的,那么使用set(row)可能也是您感兴趣的。

票数 0
EN

Stack Overflow用户

发布于 2019-04-26 04:18:08

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

代码语言:javascript
代码运行次数:0
运行
复制
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)列或任何您想要的列进行索引:

代码语言:javascript
代码运行次数:0
运行
复制
df = pd.read_csv('my_csv.csv', index_col=0)

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

代码语言:javascript
代码运行次数:0
运行
复制
df.to_csv('my_csv_fixed.csv', sep='\t')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55856754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档