2014-10-06 15 views
9

Sto provando a generare una nuova colonna in un DataFrame di panda uguale ai valori di un altro DataFrame panda. Quando provo a creare la nuova colonna ottengo solo NaNs per i nuovi valori di colonna.Valori NaN quando la nuova colonna viene aggiunta ai panda DataFrame

Prima Utilizzo una chiamata API per ottenere alcuni dati, e il dataframe 'mydata' è una colonna di dati indicizzati da date

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

La prossima dataframe ottengo da CSV con il seguente codice, e contiene molte colonne di dati con lo stesso numero di righe come 'mydata'

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

allora provo per generare la nuova colonna simili:

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

Ancora una volta, ottengo solo i valori NaN. Qualcuno può aiutarmi a capire perché sta facendo questo e come risolverlo? Da quello che ho letto sembra che potrei avere qualcosa di sbagliato con i miei indici. Gli indici sono date in ciascun DataFrame, ma i 'mydata' hanno date di fine mese mentre 'DWDATA' ha date di inizio mese.

+5

Se l'indice non si sovrappone (come tu descrivi), allora avrai davvero dei NaN. Dovrai cambiare l'indice di uno di entrambi, o se sei sicuro che il numero di righe sia esattamente uguale, inserisci i valori (senza indice) nella nuova colonna ('mydata.iloc [:, 0] .values') – joris

+0

L'aggiunta di ".values" ha funzionato! Grazie a @joris e mi ricorderò di quello che gli indici devono essere uguali in futuro! – gtnbz2nite

risposta

12

Poiché gli indici non sono esattamente uguali, verranno generati NaN. Uno o entrambi gli indici devono essere modificati per corrispondere. Esempio:

mydata = mydata.set_index(DWDATA.index) 

È possibile che questo cambierà l'indice del dataframe 'mieidati' per indicare l'indice di dataframe del 'dwData'.

Poiché il numero di righe sono esattamente uguali per i due DataFrames, si può anche solo passare i valori di 'mydata' alla nuova colonna 'dwData':

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