2013-04-24 3 views
16

"파이썬 데이터 분석"을 진행하고 있으며 특정 기능을 이해하지 못했습니다. 두 개의 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

답변

21

팬더 500 + NaN의 500 = 가정하지 않지만, 그렇게하도록 요청하기 쉽습니다 : a.add(b, fill_value=0)

+2

책에 대해 언급 했으므로이 문제에 관해서는 128 페이지의 "산술 및 데이터 정렬"단원을 참조하십시오. – bdiamante

+1

Ahhhh ... '+'는 노조을 반환합니다! add() 메소드가 필요하다. Brilliant, 감사합니다 @dbiamante @ 다나 앨런! – joelotz

1

기본 접근 방식은 어떤 가정하는 것입니다 NaN을 포함하는 계산은 NaN을 결과로 제공합니다. NaN과 NaN은 모두 NaN으로 나눈 값이 NaN입니다. NaN을 값으로 채우려면 Dan Allan이 답변에서 보여준 것처럼 명시 적으로 수행해야합니다.