问题描述
我有两个数据转储,旧转储和新转储。
旧垃圾是这样的:-
New Dump 是更改的数据或新添加的数据。 我的目标是找到新添加的数据。
新转储示例如下:-
对于实际实现,我从数据库中查询旧转储,新转储是每周收到的任何新添加或更新的文件
我正在使用下面的代码来查找新添加的内容,但是有些地方不对,因为当我去查找重复 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)
对于这种情况将如下: