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

为何用索引不同的Series为DataFrame列赋值会产生NaN?

Pandas赋值出现NaN的底层逻辑

先看你的代码场景:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(2, 1), index=["one", "two"])
print(df)
s = pd.Series(np.random.randn(2), index=["four", "five"])
df.loc[:, 0] = s
print(df)

运行后输出的DataFrame全是NaN:

0
one NaN
two NaN

而改用s.values就能成功赋值:

df.loc[:, 0] = s.values

直接赋值出现NaN的核心原因

这是Pandas的索引对齐机制导致的:

  • 当把Series赋值给DataFrame列时,Pandas默认会按索引标签匹配数据,而非位置顺序。
  • 你的DataFrame索引是["one", "two"],Series索引是["four", "five"],两者没有任何匹配的标签,DataFrame的每一行都找不到对应Series值,最终只能填充NaN。

用s.values能成功的原因

s.values会把Series转换成不带索引信息的NumPy数组,此时Pandas会忽略索引,直接按位置顺序将数组元素依次赋值给DataFrame的行,自然就能完成赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:13