2013-04-24 27 views
16

Sto lavorando attraverso "Python per l'analisi dei dati" e non capisco una particolare funzionalità. L'aggiunta di due oggetti serie pandas allineerà automaticamente i dati indicizzati, ma se un oggetto non contiene quell'indice viene restituito come NaN. Per esempio dal libro:Aggiunta di due oggetti pandas.series

a = Series([35000,71000,16000,5000],index=['Ohio','Texas','Oregon','Utah']) 
    b = Series([NaN,71000,16000,35000],index=['California', 'Texas', 'Oregon', 'Ohio']) 

Risultato:

In [63]: a 
    Out[63]: Ohio   35000 
      Texas   71000 
      Oregon  16000 
      Utah   5000 
    In [64]: b 
    Out[64]: California  NaN 
      Texas   71000 
      Oregon  16000 
      Ohio   35000 

Quando li aggiungo insieme ottengo questo ...

In [65]: a+b 
    Out[65]: California  NaN 
      Ohio   70000 
      Oregon   32000 
      Texas   142000 
      Utah    NaN 

Allora, perché è il valore Utah NaN e non 500? Sembra che 500 + NaN = 500. Cosa dà? Mi manca qualcosa, per favore spiega.

Aggiornamento:

In [92]: # fill NaN with zero 
      b = b.fillna(0) 
      b 
    Out[92]: California  0 
      Texas   71000 
      Oregon  16000 
      Ohio   35000 

    In [93]: a 
    Out[93]: Ohio  35000 
      Texas  71000 
      Oregon 16000 
      Utah  5000 

    In [94]: # a is still good 
      a+b 
    Out[94]: California  NaN 
      Ohio   70000 
      Oregon   32000 
      Texas   142000 
      Utah    NaN 
+0

Risolto: l'operatore '+' esegue un'unione dei due. Avevo bisogno invece del metodo .add(). – joelotz

risposta

21

Panda non presuppone che 500 + NaN = 500, ma è facile chiedere a farlo: a.add(b, fill_value=0) approccio

+2

Dato che hai menzionato il libro, puoi fare riferimento alla sezione "Aritmetica e allineamento dei dati" a pagina 128 che parla di questo. – bdiamante

+1

Ahhhh ... '+' restituisce l'unione dei due !! Ho bisogno del metodo add(). Brillante, grazie @dbiamante @DanAllen! – joelotz

1

Il default è di assumere che qualsiasi il calcolo che coinvolge NaN dà a NaN il risultato. Qualsiasi cosa più NaN è NaN, qualsiasi cosa divisa per NaN è NaN, ecc. Se vuoi riempire il NaN con qualche valore, devi farlo esplicitamente (come ha mostrato Dan Allan nella sua risposta).