Python 重新索引导致产生NaN值

36

我正在使用以下代码:

import pandas as pd

test3 = pd.Series([1,2,3], index = ['a','b','c'])
test3 = test3.reindex(index = ['f','g','z'])

原本一切顺利,test3的索引为'a' 'b' 'c',对应的值为1、2、3。但是当我重新建立test3的索引时,我发现我的值1、2、3丢失了。为什么会这样?期望的输出应该是:

f 1
g 2
z 3

1
文档对此行为非常清晰:使用可选的填充逻辑将Series调整为新索引,将NA / NaN放置在先前索引中没有值的位置。如果您只想覆盖索引值,则可以执行 test3.index = ['f','g','z'] - EdChum
2
@EdChum,那么我该如何将新索引填充为与以前相同的值? - Adam Warner
1个回答

30

文档明确说明了这种行为:

使用可选的填充逻辑将Series调整到新索引,将NA / NaN放置在先前索引中没有值的位置

如果您只想覆盖索引值,请执行以下操作:

In [32]:
test3.index  = ['f','g','z']

test3
Out[32]:
f    1
g    2
z    3
dtype: int64

我理解这个问题。我的问题是,我有一个更大的名为“data”的数据框,当我执行ts = pd.Series(data = data['Nasdaq Composite'], index = data['Date'])时,我得到了一列NaN,而不是我期望的值。因此,我尝试创建一个可重现的结果,而不放置数据集。 - Adam Warner
3
如果你想基于现有数据创建一个新的Series,那么重新索引和展开Series是一样的操作:ts = pd.Series(data = data['Nasdaq Composite'].values, index = data['Date']) 可以实现。 - EdChum
非常感谢,我对Python非常非常新手,所以“.values”这个操作对我很有帮助。 - Adam Warner
1
.values 的作用是返回一个 np 数组,这只是一个值的数组,data['Nasdaq Composite'] 是一个 Series,所以 Series 构造函数会尝试重用索引,这就是为什么你的代码失败了。 - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接