问题 Python Reindex生产Nan


这是我正在使用的代码:

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

10706
2018-01-30 22:34


起源

该 文档 清楚这种行为:Conform Series to new index with optional filling logic, placing NA/NaN in locations having no value in the previous index 如果你只是想覆盖索引值,那么就做 test3.index = ['f','g','z'] - EdChum
@EdChum那么我将如何用与以前相同的值填充新索引? - Adam Warner


答案:


文档 清楚这种行为:

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

如果你只想覆盖索引值,那么:

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

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

10
2018-01-30 22:37



我理解这一点。我的问题是我有一个更大的Dataframe称为“数据”,当我做ts = pd.Series(data = data ['Nasdaq Composite'],index = data ['Date'])我得到一个Nan的列我在哪里期待价值。所以我试图在不放置数据集的情况下创建可重现的结果。 - Adam Warner
再次与重建索引相同,如果您想基于现有数据创建新系列,那么您需要展平系列: ts = pd.Series(data = data['Nasdaq Composite'].values, index = data['Date']) 将工作 - EdChum
非常感谢我对python非常新,所以“.values”业务为我做了。 - Adam Warner
什么 .values 是返回一个np数组,这只是一个值数组, data['Nasdaq Composite'] 是一个 Series 所以 Series ctor将尝试重用索引,这就是您的代码失败的原因 - EdChum