2016-01-30 41 views
8

Đây là mã mà tôi đang làm việc với:Python reindex Sản xuất Nan

import pandas as pd

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

Vì vậy, ban đầu mọi thứ là tốt và Test3 có một chỉ số của 'a' 'b' 'c' và giá trị 1,2,3. Nhưng sau đó khi tôi nhận được reindex test3 tôi nhận được rằng giá trị của tôi 1 2 3 bị mất. Tại sao vậy? Kết quả mong muốn sẽ là:

f 1 
g 2 
z 3 
+0

[docs] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.reindex.html#pandas.Series.reindex) rõ ràng về hành vi này: 'Conform Series to chỉ số mới với logic điền tùy chọn, đặt NA/NaN ở các vị trí không có giá trị trong chỉ mục trước đó nếu bạn chỉ muốn ghi đè các giá trị chỉ mục sau đó thực hiện 'test3.index = ['f', 'g', 'z'] ' – EdChum

+0

@EdChum vì vậy làm thế nào tôi sẽ đi về điền vào các chỉ số mới với các giá trị tương tự như trước? –

Trả lời

6

các docs là rõ ràng về hành vi này:

Phù hợp Series để chỉ số mới với logic điền không bắt buộc, đặt NA/NaN tại các địa điểm không có giá trị trong trước index

nếu bạn chỉ muốn ghi đè lên các giá trị chỉ số sau đó làm:

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

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

Tôi hiểu điều này. Vấn đề của tôi là tôi có một Dataframe lớn hơn được gọi là "dữ liệu" và khi tôi làm ts = pd.Series (dữ liệu = dữ liệu ['Nasdaq Composite'], index = data ['Date']) tôi nhận được một cột của Nan nơi tôi sẽ mong đợi các giá trị. Vì vậy, tôi đã cố gắng để tạo ra một kết quả tái sản xuất mà không cần đưa lên các tập dữ liệu. –

+0

Một lần nữa cũng giống như reindexing, nếu bạn muốn tạo một Series mới dựa trên dữ liệu hiện có thì bạn cần phải làm phẳng chuỗi: 'ts = pd.Series (dữ liệu = dữ liệu ['Nasdaq Composite']. dữ liệu ['Ngày']) 'sẽ làm việc – EdChum

+0

cảm ơn rất nhiều Tôi rất rất mới để python để" .values ​​"kinh doanh đã làm nó cho tôi. –

Các vấn đề liên quan