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

基于共同列替换DataFrame列值返回NaN,求原因及修复方法

问题:DataFrame替换列值返回NaN的原因及修复方案

场景重现

现有两个DataFrame:

hec_df:

事故年份factorage
20071.513
20081.611
20091.715

hec_ldfs:

事故年份factor
20071.6
20081.64
20091.7

目标是将hec_df的factor列替换为hec_ldfs中对应年份的值,使用代码:

hec_df['factor'] = hec_df['factor'].map(hec_ldfs.set_index('accident year')['factor'])

运行后factor列全为NaN,需排查原因并修复。

原因分析

  1. 列名不匹配:代码中使用'accident year'作为索引列,但实际两个DataFrame的年份列名为'事故年份',导致hec_ldfs无法正确设置索引,后续匹配完全失效。
  2. map逻辑错误:你用hec_df的factor列值去匹配hec_ldfs的索引,但hec_ldfs的索引(若列名正确)是年份值而非factor值,两者无对应关系,自然返回NaN。

修复方案

方案1:修正map的使用逻辑(推荐)

基于事故年份列进行匹配,确保列名正确:

# 先将hec_ldfs以事故年份为索引提取factor列,再用hec_df的事故年份映射
hec_df['factor'] = hec_df['事故年份'].map(hec_ldfs.set_index('事故年份')['factor'])

方案2:用merge合并后替换

若需保留更多字段,merge是更直观的方式:

# 以事故年份为键合并两个DataFrame
merged_df = hec_df.merge(hec_ldfs, on='事故年份', suffixes=('_old', ''))
# 保留目标列,替换原factor
hec_df = merged_df[['事故年份', 'factor', 'age']]

额外检查:数据类型一致性

确保两个DataFrame的事故年份列数据类型一致(如均为int或str),可通过df.dtypes查看,若不一致用astype转换:

# 统一转换为int类型
hec_df['事故年份'] = hec_df['事故年份'].astype(int)
hec_ldfs['事故年份'] = hec_ldfs['事故年份'].astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:30:58