2013-04-24 59 views
16

我正在通过“Python for Data Analysis”工作,但我不明白某个特定的功能。添加两个pandas系列对象将自动对齐索引数据,但如果一个对象不包含该索引,则它将返回为NaN。例如从书:添加两个pandas.series对象

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

结果:

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 

当我把它们加起来我得到这个...

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

那么为什么犹他NaN值,而不是500?看来500 + NaN = 500。是什么赋予了?我错过了一些东西,请解释一下。

更新:

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

解决:'+'操作符执行两者的联合。我需要.add()方法。 – joelotz 2013-04-24 22:20:54

回答

21

熊猫不认为500 + NAN = 500,但它很容易要求它做到这一点:a.add(b, fill_value=0)

+2

既然你提到过这本书,你可以参考第128页上的“算术和数据对齐”部分,其中讨论了这一点。 – bdiamante 2013-04-24 21:49:24

+1

Ahhhh ...'+'返回联合的两个!我需要add()方法。辉煌,感谢@dbiamante @丹艾伦! – joelotz 2013-04-24 22:19:13

1

默认的方法是假设任何涉及NaN的计算给出了NaN。任何加NaN的都是NaN,NaN划分的任何东西都是NaN等。如果你想用NaN填充NaN,你必须明确地这样做(就像Dan Allan在答案中所表明的那样)。