Pandas merge按Date字段合并不生效、左表df1无变化是什么原因?
Pandas merge操作合并不生效的常见原因
- 未对merge返回结果赋值
Pandas的merge方法不属于inplace操作,执行df1.merge(df2, on='Date')时只会返回合并后的新DataFrame,不会修改原有df1的内容。需要显式赋值才能更新原变量:df1 = df1.merge(df2, on='Date') - Date列存在隐式值差异
即便两个表的Date列都为datetime格式,也可能存在肉眼不可见的差异导致匹配失败:- 时区不一致:例如一个是带时区的
datetime64[ns, UTC]类型,另一个是无时区的datetime64[ns]类型 - 时间精度差异:例如一个列精确到秒,另一个列带有毫秒/微秒尾数,打印时被隐藏不会显示
可通过pd.testing.assert_series_equal(df1['Date'], df2['Date'])校验两个日期列是否完全相等。
- 时区不一致:例如一个是带时区的
- 合并后列名添加了默认后缀
如果两个表除了Date列之外还有其他重名列,合并时Pandas会自动给重名列添加_x(左表)、_y(右表)后缀,原右表的列名不会直接出现,容易误以为没有新增列。可通过suffixes参数自定义后缀避免混淆:df1.merge(df2, on='Date', suffixes=('_left', '_right')) - 合并模式导致无匹配内容被丢弃
merge默认使用how='inner'内连接模式,如果两个表的Date列没有完全匹配的取值,合并结果会为空;如果使用how='left'左连接,右表无匹配项时合并结果就和原左表完全一致,不会新增右表的列内容。
内容的提问来源于stack exchange,提问作者keizee
相关产品推荐
相关产品推荐

