2016-01-30 10 views
8

Oto kod, który pracuję z:Python reindex Producing Nan

import pandas as pd

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

Więc pierwotnie wszystko jest w porządku i test3 ma współczynnik 'a' 'B' 'c' i wartości 1,2,3. Ale kiedy dostałem test reindexa 3, dostaję, że moje wartości 1 2 3 są tracone. Dlaczego? Sygnał wyjściowy będzie:

f 1 
g 2 
z 3 
+0

[docs] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.reindex.html#pandas.Series.reindex) są jasne w odniesieniu do tego zachowania: 'Conform Series to nowy indeks z opcjonalną logiką wypełniania, umieszczenie NA/NaN w lokalizacjach bez wartości w poprzednim indeksie' jeśli chcesz tylko nadpisać wartości indeksu, wykonaj 'test3.index = ['f', 'g', 'z'] ' – EdChum

+0

@EdChum, więc jak mam postąpić, wypełniając nowy indeks tymi samymi wartościami, co poprzednio? –

Odpowiedz

6

docs są jasne na ten problem:

zgodne seryjnej nowego indeksu z opcjonalnym logiki napełniania, umieszczając Na/NaN w miejscach, które nie mają wartości w poprzednim indeks

jeśli po prostu chcesz nadpisać wartości indeksu wtedy zrobić:

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

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

Rozumiem to. Mój problem polega na tym, że mam większą ramkę danych zwaną "danymi" i kiedy robię ts = pd.Series (dane = dane ["Nasdaq Composite"], index = data ['Date']) otrzymuję kolumnę Nan, gdzie ja oczekiwałbym wartości. Próbowałem więc stworzyć powtarzalny wynik bez umieszczania zbioru danych. –

+0

Ponownie jest to to samo, co ponowne indeksowanie, jeśli chcesz utworzyć nową serię w oparciu o istniejące dane, musisz spłaszczyć serie: 'ts = pd.Series (dane = dane [" Nasdaq Composite "] wartości, index = data ['Date']) 'zadziała – EdChum

+0

dziękuję bardzo, jestem bardzo bardzo nowy w python, więc firma" .values ​​"zrobiła to za mnie. –