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

Pandas Series赋值同对象其他索引值时出现NaN的原因

问题原因

出现赋值后得到NaN的核心原因是Pandas的索引对齐机制:所有Series、DataFrame之间的赋值、运算操作,Pandas默认按索引标签匹配数据,而非按元素的物理位置顺序匹配。

两种操作场景的差异:

  • 对切片做数值计算、赋值标量时:x[['a','b']]/2的计算结果保留原切片的索引['a','b'],和赋值目标的索引完全一致,可正常赋值;标量无索引,会直接广播到所有目标位置,不存在匹配问题。
  • 用同Series其他切片赋值时:x[['c','d']]返回的Series索引为['c','d'],而赋值目标位置的索引是['a','b'],两边索引无重叠匹配项,Pandas无法找到对应赋值内容,就会在目标位置填充NaN。

按位置赋值的正确写法

如果需要忽略索引、按元素位置顺序赋值,可以选以下两种常用方案:

  1. 取右侧切片的.values属性(即底层NumPy数组),绕开索引对齐逻辑:
import pandas as pd
x = pd.Series([1.1, 2.2, 3.4, 5.6], ['a', 'b', 'c', 'd'])
x[['a', 'b']] = x[['c', 'd']].values
print(x)

运行结果:

a    3.4
b    5.6
c    3.4
d    5.6
dtype: float64
  1. 用.iloc做纯位置索引切片,全程不依赖标签匹配:
import pandas as pd
x = pd.Series([1.1, 2.2, 3.4, 5.6], ['a', 'b', 'c', 'd'])
# 位置0、1对应标签a、b,位置2、3对应标签c、d
x.iloc[:2] = x.iloc[2:]
print(x)

运行结果和上述方案一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:33:26