You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas合并两个DataFrame如何避免出现整列NaN值?

左连接后右表字段全为NaN的解决方法

问题根因

出现该问题是两个表的Date字段匹配规则不一致导致的,常见原因如下:

  • 两个表Date字段数据类型不同,一个为datetime类型、另一个为字符串类型,pandas判定二者不相等
  • Date字段的文本格式不一致,例如一个为2019-01-01格式,另一个为2019/01/01、01-01-2019格式,或字段值存在隐藏的前后空格
  • traffic_df的Date字段携带了时分秒信息,和仅保留日期的co_dfDate无法匹配
  • 未提前过滤traffic_df的2019年数据,可能存在数据范围偏差

解决步骤

  1. 统一将两个表的Date字段转为datetime类型,自动兼容不同格式的日期文本
co_df['Date'] = pd.to_datetime(co_df['Date'])
traffic_df['Date'] = pd.to_datetime(traffic_df['Date'])
  1. 统一去除Date字段的时分秒部分,仅保留日期维度
co_df['Date'] = co_df['Date'].dt.date
traffic_df['Date'] = traffic_df['Date'].dt.date
# 也可统一转为指定格式的字符串,效果一致
# co_df['Date'] = co_df['Date'].dt.strftime('%Y-%m-%d')
# traffic_df['Date'] = traffic_df['Date'].dt.strftime('%Y-%m-%d')
  1. 提前过滤traffic_df仅保留2019年数据,减少无效数据干扰
traffic_df_2019 = traffic_df[traffic_df['Date'].dt.year == 2019].copy()
  1. 重新执行左连接操作
df = pd.merge(co_df, traffic_df_2019, how="left", on="Date")

验证方法

可以先执行以下代码验证匹配逻辑是否生效:

# 取co_df的第一个日期,判断是否存在于traffic_df的Date字段中
sample_date = co_df['Date'].iloc[0]
print(sample_date in traffic_df_2019['Date'].values)

如果输出为True说明匹配规则正常,执行左连接即可得到正确结果。


内容的提问来源于stack exchange,提问作者nsakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:39:04