2013-04-24 31 views
16

Tôi đang làm việc thông qua "Python For Data Analysis" và tôi không hiểu một chức năng cụ thể nào. Thêm hai đối tượng loạt gấu trúc sẽ tự động căn chỉnh dữ liệu được lập chỉ mục nhưng nếu một đối tượng không chứa chỉ mục đó thì nó sẽ được trả về là NaN. Ví dụ từ cuốn sách:Thêm hai đối tượng pandas.series

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

Kết quả:

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 

Khi tôi thêm chúng lại với nhau tôi có được điều này ...

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

Vậy tại sao giá trị Utah NaN và không 500? Có vẻ như 500 + NaN = 500. Đưa cái gì? Tôi đang thiếu một cái gì đó, xin vui lòng giải thích.

Cập nhật:

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

Đã giải quyết: toán tử '+' thực hiện một liên kết của cả hai. Tôi cần phương thức .add() để thay thế. – joelotz

Trả lời

21

Pandas không cho rằng 500 + NaN = 500, nhưng nó rất dễ dàng để yêu cầu nó để làm điều đó: a.add(b, fill_value=0) cách tiếp cận

+2

Vì bạn đã đề cập đến cuốn sách, Bạn có thể tham khảo phần "Căn chỉnh số học và dữ liệu" trên trang 128 mà nói về điều này. – bdiamante

+1

Ahhhh ... '+' trả về số union của cả hai !! Tôi cần phương thức add(). Brilliant, cảm ơn @dbiamante @DanAllen! – joelotz

1

Giá trị mặc định là giả định rằng bất kỳ tính toán liên quan đến NaN cho kết quả NaN. Bất cứ điều gì cộng với NaN là NaN, bất cứ điều gì chia cho NaN là NaN, vv Nếu bạn muốn điền vào NaN với một số giá trị, bạn phải làm điều đó một cách rõ ràng (như Dan Allan cho thấy trong câu trả lời của mình).

Các vấn đề liên quan