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

基于ID与日期双键合并Pandas DataFrame出现匹配异常求助

问题诊断与解决:Pandas按ID+日期合并返回空DataFrame

这种情况90%以上是合并键的数据类型不匹配导致的——看起来值完全一样,但底层数据类型不同,Pandas就认不出它们是匹配项。咱们一步步排查解决:

1. 先排查核心列的数据类型

首先运行下面的代码,确认两个DataFrame中ID和date列的类型:

# 查看df_pw6的列类型
print("df_pw6 列类型:")
print(df_pw6.dtypes)

print("\ndf_ex 列类型:")
print(df_ex.dtypes)

你大概率会看到以下两种不一致的情况:

  • 日期列:一个是object(字符串)类型,另一个是datetime64[ns]类型
  • ID列:一个是int(整数)类型,另一个是object(字符串)类型

另外提一句,你手动验证时写的df_ex.iloc[2,0]== df_pw6.iloc[1,1]是笔误(前者是2018-01-08,后者是2018-01-05,不可能相等),正确的匹配应该是df_ex.iloc[2,0] == df_pw6.iloc[2,1]和df_ex.iloc[2,1] == df_pw6.iloc[2,0]——但即使值看起来一致,类型不匹配的话,Pandas的merge还是会判定为不相等。

2. 针对性解决方法

情况A:日期列类型不一致

把两个DataFrame的date列统一转换为datetime类型:

df_pw6['date'] = pd.to_datetime(df_pw6['date'])
df_ex['date'] = pd.to_datetime(df_ex['date'])

情况B:ID列类型不一致

把两个DataFrame的ID列统一为相同类型(比如都转成整数):

df_pw6['ID'] = df_pw6['ID'].astype(int)
df_ex['ID'] = df_ex['ID'].astype(int)

如果ID里存在非数字内容,也可以统一转成字符串:

df_pw6['ID'] = df_pw6['ID'].astype(str)
df_ex['ID'] = df_ex['ID'].astype(str)

3. 重新执行合并

类型统一后,再运行你的合并代码:

# 内连接(只保留匹配项)
df19 = pd.merge(df_pw6, df_ex, on=['date', 'ID'])

# 左连接(保留df_pw6所有行)
df19_left = pd.merge(df_pw6, df_ex, how='left', on=['date', 'ID'])

这时候应该就能得到预期的匹配结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:21:21