【发布时间】:2020-12-06 22:38:42
【问题描述】:
我正在尝试使用 pandas 复制 SQL 连接,但连接键中的 Null 值出现问题。 例如数据框:
df_1 = pd.DataFrame({'K1':[1,2,3, 2],
'K2':['a', 'b', 'c', np.nan],
'K3':'x y z y'.split()})
df_2 = pd.DataFrame({'Z1':[1, 2, 2, 3],
'Z2':['a', np.nan, np.nan, 'c'],
'Z3':'x y y z'.split(), 'I':[10, 40, 50, 20]})
可以使用:
df_join = pd.merge(df_1, df_2, left_on=['K1', 'K2', 'K3'], right_on=['Z1', 'Z2', 'Z3'], how='inner')
哪个输出:
我认为这在“技术上”是正确的,因为 K2 和 Z2 中都存在空值,但是在 SQL 中,这些空值不被识别为匹配项。因此,对于 K1 = 2,“I”列应该是 NaN。
在我的情况下,我使用列“I”值来进行另一次计算,因此我添加了修复它:
df_join.loc[df_join['K2'].isna(), 'I'] = np.nan
df_join.drop_duplicates()
但感觉不对。有没有办法在合并操作中直接复制 SQL 行为或更清晰的方式?
【问题讨论】: