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

Pandas向DataFrame列赋值时出现NaN异常问题求助

Pandas赋值列出现NaN的原因与解决办法

核心原因:索引对齐机制

这是Pandas的索引对齐特性导致的问题:

  • 当你创建空DataFrame时,它没有任何索引信息。第一次给某列赋值时,Pandas会自动把源数据的索引同步到新DataFrame中。
  • 第二次赋值另一列时,如果源数据的索引和新DataFrame的索引无法完全匹配(比如你筛选后的源数据保留了原DataFrame的非连续索引),Pandas会按照索引去匹配行,找不到对应索引的位置就填充NaN。调换赋值顺序时,第一次赋值的列会同步自己的索引,第二次的列因为索引不匹配就变成NaN,所以出现相反的结果。
  • 你说重置索引没用?大概率是重置时没加drop=True,旧索引变成了普通列,新的索引还是没和空DataFrame对齐。

解决方法

方法1:一次性构造新DataFrame(最推荐)

直接把需要的列一次性传入pd.DataFrame,避免分步赋值的索引问题:

# filtered_df是你筛选后的目标DataFrame
new_df = pd.DataFrame({
    'contractions': filtered_df['contractions'],
    'followup': filtered_df['followup']
})

方法2:先创建带匹配索引的空DataFrame

先基于筛选后的数据索引初始化空DataFrame,再依次赋值:

new_df = pd.DataFrame(index=filtered_df.index)
new_df['contractions'] = filtered_df['contractions']
new_df['followup'] = filtered_df['followup']

方法3:绕开索引对齐,直接赋值底层数据

用.values或.to_numpy()获取数据的底层数组,跳过Pandas的索引对齐逻辑:

new_df = pd.DataFrame()
new_df['contractions'] = filtered_df['contractions'].values
new_df['followup'] = filtered_df['followup'].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:13