【问题标题】:Python3: Comparing two CSV Files to identify what's new in the newer File, ignoring content that was in the oldfilePython3:比较两个 CSV 文件以识别新文件中的新内容,忽略旧文件中的内容
【发布时间】:2020-12-08 10:32:28
【问题描述】:

我正在尝试将两个 csv 文件与 pandas 进行比较并确定更改。 我的目标是识别新文件中存在但旧文件中不存在的新条目,忽略旧文件中的所有内容并且在新文件中不再可用。

  1. 一个旧文件
NAME;DESCRIPTION;LINK;PRICE;IMAGE
Item4;something;https://example.com;10;https://example.com/image.jpg
Item3;something;https://example.com;10;https://example.com/image.jpg
Item2;something;https://example.com;10;https://example.com/image.jpg
Item1;something;https://example.com;10;https://example.com/image.jpg
  1. 更新的文件
NAME;DESCRIPTION;LINK;PRICE;IMAGE
Item5;something;https://example.com;10;https://example.com/image.jpg
Item4;something;https://example.com;10;https://example.com/image.jpg
Item3;something;https://example.com;10;https://example.com/image.jpg
Item2;something;https://example.com;10;https://example.com/image.jpg

到目前为止,我已经确定了两个文件之间的任何更改,但不幸的是,它还显示新文件中不再存在 waht

import pandas as pd

a = pd.read_csv('csv/new.items.csv')
b = pd.read_csv('csv/old.items.csv')
c = pd.concat([a,b], axis=0)

c.drop_duplicates(keep=False, inplace=True)
c.reset_index(drop=True, inplace=False)
c.to_csv(r'csv/pd.items.csv', index=False, header=True)

预期结果应该是一个新文件,其中仅包含旧文件中未找到的新条目

NAME;DESCRIPTION;LINK;PRICE;IMAGE
Item5;something;https://example.com;10;https://example.com/image.jpg

多年来没有使用 python,所以不要对我太苛刻:)

【问题讨论】:

    标签: python-3.x pandas csv


    【解决方案1】:

    试试这个

    c = b.merge(a, how = 'left', on = 'NAME', suffixes = ("", "_y"))
    
    you should be able to get the new ones using the below command
    
    c[c.DESCRIPTION_y.isnull()]
    

    【讨论】:

    • 感谢您的回答,不幸的是,由于我的 csv 上的 KeyError 问题,它无法正常工作,但它让我找到了另一个解决方案:)
    【解决方案2】:

    我最终通过以下方式解决了它

    import pandas as pd
    a = pd.read_csv('csv/new.items.csv')
    b = pd.read_csv('csv/old.items.csv')
    
    
    d = b.merge(a, how='inner', on=None, suffixes=("", "_y"))
    d.to_csv(r'csv/old.items.csv', index=False, header=True)
    
    b = pd.read_csv('csv/old.items.csv')
    c = pd.concat([a,b], axis=0)
    c.drop_duplicates(keep=False, inplace=True) # Set keep to False if you don't want any
    c.reset_index(drop=True, inplace=False)
    c.to_csv(r'csv/pd.items.csv', index=False, header=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2021-06-30
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多