合并Pandas DataFrame时出现object与int32列类型不匹配报错如何解决
报错核心原因是合并操作的两个关联键数据类型不匹配:左表df_FOMC_dates使用的关联键FOMC_date为日期/字符串类型,右表df_melt_test_percent使用的关联键DayNumber为整数类型,两类数据无法直接关联,因此触发报错。
原代码的逻辑偏差在于没有先通过日期匹配拿到FOMC日期对应的交易日序号,直接尝试跨类型关联,修正后的代码如下:
# 给交易数据按日期排序,生成连续交易日序号,同时提取日期列用于匹配 df_melt_test_percent = df_melt_test_percent.sort_index().assign( DayNumber=lambda x: range(len(x)), # 若交易日期本身就是单独的列而非索引,替换为对应列名即可 trade_date=lambda x: x.index ) # 先通过日期匹配,拿到每个FOMC日期对应的交易日序号 tmp = pd.merge( df_FOMC_dates, df_melt_test_percent[['trade_date', 'DayNumber']], left_on='FOMC_date', right_on='trade_date' ).drop(columns=['trade_date']) # 生成每个FOMC日期前后3天的偏移量 tmp['delta'] = tmp.apply(lambda _: range(-3, 4), axis=1) tmp = tmp.explode('delta') tmp['DayNumber'] += tmp['delta'] # 关联回原交易数据表得到最终结果 result = pd.merge(tmp, df_melt_test_percent, on='DayNumber')
额外注意事项
- 匹配前建议先统一两个表的日期格式为pandas datetime类型,避免字符串格式差异导致匹配失败:
df_FOMC_dates['FOMC_date'] = pd.to_datetime(df_FOMC_dates['FOMC_date']) df_melt_test_percent['trade_date'] = pd.to_datetime(df_melt_test_percent['trade_date'])
- 若
df_melt_test_percent的日期存储在普通列而非索引中,只需将trade_date=lambda x: x.index替换为对应的日期列名即可。
内容的提问来源于stack exchange,提问作者jd_h2003
相关产品推荐
相关产品推荐

