2014-10-06 36 views
9

Próbuję wygenerować nową kolumnę w pandach DataFrame, która równa się wartościom w innej pandach DataFrame. Kiedy próbuję utworzyć nową kolumnę, otrzymuję NaNs dla nowych wartości kolumn.NaN wartości, gdy nowa kolumna została dodana do pandy DataFrame

Najpierw używam wywołanie API, aby uzyskać pewne dane, a „mydata” DataFrame jest jedna kolumna danych indeksowanych przez terminach

mydata = Quandl.get(["YAHOO/INDEX_MXX.4"], 
        trim_start="2001-04-01", trim_end="2014-03-31", 
        collapse="monthly") 

Następny DataFrame dostaję od CSV z następującego kodu, a zawiera wiele kolumn danych z taką samą liczbą wierszy jak „MyData”

DWDATA = pandas.DataFrame.from_csv("filename", 
            header=0, 
            sep=',', 
            index_col=0, 
            parse_dates=True, 
            infer_datetime_format=True) 

I spróbuj wygenerować nową kolumnę tak:

DWDATA['MXX'] = mydata.iloc[:,0] 

Znów otrzymuję wartości NaN. Czy ktoś może mi pomóc zrozumieć, dlaczego to robi i jak rozwiązać? Z tego, co przeczytałem, wynika, że ​​coś może być nie tak z indeksami. Indeksy są datami w każdym DataFrame, ale "mydata" ma daty końca miesiąca, a "DWDATA" ma daty początku miesiąca.

+5

Jeśli indeks nie pokrywają się (jak opisujesz), wtedy naprawdę otrzymasz NaN. Będziesz musiał zmienić indeks jednego z nich, lub jeśli masz pewność, że liczba wierszy jest dokładnie równa, po prostu umieść wartości (bez indeksu) w nowej kolumnie ('mydata.iloc [:, 0] .values') – joris

+0

Dodawanie ".values" działało! Dzięki @joris i zapamiętam ten fragment o indeksach, które muszą być równe w przyszłości! – gtnbz2nite

Odpowiedz

12

Ponieważ indeksy nie są dokładnie równe, zostaną wygenerowane wartości NaN. Jeden lub oba indeksy muszą zostać zmienione, aby pasowały. Przykład:

mydata = mydata.set_index(DWDATA.index) 

Powyższy zmieni indeks „Mydata” DataFrame dopasować indeks DataFrame określenia "DWDATA.

Ponieważ liczba wierszy są dokładnie takie same dla obu DataFrames, można też po prostu przekazać wartości „MyData” do nowej kolumny „DWDATA”:

DWDATA['MXX'] = mydata.iloc[:,0].values