首页 > 解决方案 > 如何使用 Python 从 2 个 excel 中获取额外和遗漏的数据

问题描述

我有 2 个 excel csv 文件,如下所示

df1 =  {'Transaction_Name':['SC-001_Homepage', 'SC-002_Homepage', 'SC-001_Signinlink'], 'Count': [1, 1, 2]}
df1 = pd.DataFrame(df1, columns=df1.keys())

df2 =  {'Transaction_Name':['SC-002_Homepage', 'SC-001_Signinlink', 'SC-002_Signinlink'], 'Count': [1, 2, 1]}
df2 = pd.DataFrame(df2, columns=df2.keys())

我想比较这两个数据,我可以通过使用下面来做到这一点......

  df_compare = df1.merge(df2, on='Transaction_Name', suffixes=('_df1','_df2'))
df_compare[['Count_df1','Count_df2']] = df_compare[['Count_df1','Count_df2']].astype(float).astype(int)
print (df_compare)

但在 df1 SC-001_Homepage 存在,但在 df2 中不存在。使用上面的代码,我没有得到 SC-001_Homepage 的结果。同样在 df2 SC-002_Signinlink 中,它在 df1 中不可用。结果中也缺少此值。有人可以帮我如何在结果中包含这些交易吗?

预期的结果应该是......

 Transaction_Name    Count_df1  Count_df2
0   SC-001_Homepage       1       0
1   SC-002_Homepage       1       1
2   SC-001_Signinlink     2       2
3   SC-002_Signinlink     0       1

标签: pythonpandas

解决方案


利用:

df1.merge(df2,on=['Transaction_Name'],how='outer',suffixes=('_df1','_df2')).fillna(0)

    Transaction_Name  Count_df1  Count_df2
0    SC-001_Homepage        1.0        0.0
1    SC-002_Homepage        1.0        1.0
2  SC-001_Signinlink        2.0        2.0
3  SC-002_Signinlink        0.0        1.0

如果要将浮点数转换为 int,请使用:

df_new[df_new.select_dtypes(['float']).columns]= df_new.select_dtypes(['float']).astype(int)

推荐阅读