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

向无NaN的pd.Series添加至pd.DataFrame后出现NaN问题求助

问题原因

核心原因是DataFrame与Series的索引标签不匹配。Pandas在添加列时,默认会按索引标签对齐数据,而非简单按行的位置顺序匹配。哪怕两者长度完全一致,只要索引标签无法一一对应,对应不上的行就会被填充为NaN。

举个典型的示例:

import pandas as pd

# 构造索引标签不匹配的DataFrame和Series
df = pd.DataFrame({'原列': [10, 20, 30]}, index=[2, 3, 4])
s = pd.Series([40, 50, 60], index=[0, 1, 2])

# 直接添加列会出现NaN
df['新增列'] = s
print(df)
# 输出结果:
#    原列   新增列
# 2  10  60.0
# 3  20   NaN
# 4  30   NaN
解决方法

以下几种方案可以确保无NaN添加新列:

方案1:忽略索引,按位置直接赋值

提取Series的底层值数组,绕过索引对齐逻辑,直接按行位置赋值:

df['新增列'] = s.values
# 或者用assign方法链式操作
df = df.assign(新增列=s.values)

方案2:重置两者的索引为默认整数序列

将DataFrame和Series的索引都重置为从0开始的连续整数,消除索引标签不匹配的问题:

# 重置索引,drop=True避免原索引被保留为新列
df = df.reset_index(drop=True)
s = s.reset_index(drop=True)
df['新增列'] = s

方案3:使用pd.concat按列合并(强制位置对齐)

通过pd.concat合并时,先重置两者索引再按列合并,确保行位置完全对应:

# 先给Series命名,避免合并后列名是默认的0
s = s.rename('新增列')
df = pd.concat([df.reset_index(drop=True), s.reset_index(drop=True)], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:00