【问题标题】:How to remove duplicate/repeated rows in csv with python?如何使用python删除csv中的重复/重复行?
【发布时间】:2021-08-09 16:48:33
【问题描述】:

我正在使用 python 抓取网页并将数据获取到看起来像这样的 .csv 文件。如果我附加到文件中,我可能会有一些重复/重复的数据。为了避免这种情况,我可以使用什么?我不确定熊猫 - 如果我应该在熊猫中打开文件然后删除重复项。我尝试了自己的其他方法,但无法提出解决方案。我正在考虑使用熊猫作为最后的选择

Date,Time,Status,School,GPA,GRE,GMAT,Round,Location,Post-MBA Career,via,on,Details,Note

2021-05-18,13:59:00,Accepted from Waitlist,Yale SOM,3.8,No data provided,740,Round 2 ,NYC,Non Profit / Social Impact,phone,2021-05-18,GPA: 3.8 GMAT: 740 Round: Round 2 | NYC,Interviewed and was waitlisted in R2. Just received the call this afternoon. Good luck everyone!

2021-05-18,13:51:00,Accepted from Waitlist,Yale SOM,3.8,323,No data provided,Round 2 ,Austin,Marketing,phone,2021-05-18,GPA: 3.8 GRE: 323 Round: Round 2 | Austin,Keep your head up! It all works out how it is supposed to.

【问题讨论】:

  • 重复的行是否对应完全相同的行?这些重复项在文件中是否连续?
  • 是的,不,他们分散了
  • 如果您打算稍后在数据上使用 pandas,那么 pandas 和 drop_duplicates 可能是您的最佳选择。如果你不这样做,并且如果文件可以放入内存,那么使用一组行应该可以完成这项工作。

标签: python pandas csv duplicates file-handling


【解决方案1】:

如果你想用熊猫来做

# 1. Read CSV
df = pd.read_csv("data.csv")

# 2(a). For complete row duplicate
pd.drop_duplicates(inplace=True)
             
# 2(b). For partials
pd.drop_duplicates(subset=['Date', 'Time', <other_fields>], inplace=True)

# 3. Save then
pd.to_csv("data.csv", index=False)

【讨论】:

  • 谢谢,当您的意思是完整的行重复时,意味着它会检查每个条目的重复值对吗?和部分 - 它检查所有的“n”字段?
  • 是的,对于完整的,它应该是一个精确的行(所有字段),对于部分它只会检查 n 个字段,例如 subsets=['Date', 'Time'],它会删除所有重复的行,只有日期和时间相同(即 4具有相同日期和时间的行减少到 1)
【解决方案2】:

也许一次读取一行,将它们存储在一个集合中(因此没有重复),然后将它们写回?

lines = set()
file = 'foo.txt'
with open (file) as fd:
    for line in fd:
        lines.add(line)
with open(file, 'w') as fd:
    fd.write(''.join(lines))

【讨论】:

  • 该文件有大约 60,000 个条目。你认为这可行吗?
  • 应该没问题 - 只有一种方法可以找到;)
  • 这很有道理,但我有一个问题 - 你如何回信?比如如何添加更多数据?
  • 你能举个例子吗?只需向lines 添加额外的元素,只需确保它们以\n 结尾
猜你喜欢
  • 2020-05-11
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多