Pandas:查找新添加的数据

问题描述

我有两个数据转储,旧转储和新转储。

垃圾是这样的:-

enter image description here

New Dump 是更改的数据或新添加的数据。 我的目标是找到新添加的数据。

新转储示例如下:-

enter image description here

对于实际实现,我从数据库查询旧转储,新转储是每周收到的任何新添加或更新的文件

我正在使用下面的代码来查找新添加内容,但是有些地方不对,因为当我去查找重复 ID 时,即使存在重复项,它也会给出空白数据框。 下面是我的代码:-

cols_to_show=["id","fname","lname","title","yearjoined"]
    prev_batch=pd.read_csv("sample1.csv",encoding='cp1252',sep='\t',error_bad_lines=False,warn_bad_lines=True) #olddump
    current_batch=pd.read_csv("sample2",warn_bad_lines=True) #newdump
    
    prev_batch['version']='v0.0'
    current_batch['version']='v1.0'
    full_set = pd.concat([prev_batch,current_batch],ignore_index=True)
    changes = full_set.drop_duplicates(subset=cols_to_show,keep='last')
    dupe=changes[changes.duplicated('id',keep=False)] #gives empty dataframe

    change_new = dupe_lawyers[(dupe["version"] == 'v1.0')]

    change_old = dupe_lawyers[(dupe["version"] == 'v0.0')]
    changes['duplicate']=changes["id"].isin(dupe["id"])
    new_added = full_set.drop_duplicates(subset=cols_to_show,keep='first')
    
    new_added['duplicate']=new_added["id"].isin(dupe["id"])
    
    
    added_new = new_added[(new_lawyers["duplicate"] == False)&(new_added["version"] == "v1.0")]

我不明白为什么 dupe 给我空数据框

解决方法

我不确定,如果您只是在寻找您提供的代码的答案,但另一种方法可能是使用 pandas compare API 来获取数据帧之间的差异。我在下面展示了一个取自他们的 website 的示例。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "col1": ["a","a","b","a"],"col2": [1.0,2.0,3.0,np.nan,5.0],"col3": [1.0,4.0,5.0]
    },columns=["col1","col2","col3"],)

df2 = df.copy()
df2.loc[0,'col1'] = 'c'
df2.loc[2,'col3'] = 4.0
df2

diff_df = df.compare(df2)

在此之后,您可以使用 xs api 获得差异并获得数据帧的差异。

diff_df.xs('other',level=1,axis=1)

对于这种情况将如下:

enter image description here