2016-11-26 3 views
1

윈도우 함수에 대한 자습서를보고 있지만 다음 코드가 NaN을 생성하는 이유를 이해하지 못합니다.팬더 롤링 NaN 제공

올바르게 이해하면 코드는 크기가 2 인 롤링 윈도우를 만듭니다. 첫 번째, 네 번째 및 다섯 번째 행에 NaN이있는 이유는 무엇입니까? 처음에는 NaN을 다른 숫자와 함께 추가하면 NaN이 생성 될 것이지만 두 번째 행이 NaN이 아닌 이유는 확실하지 않기 때문이라고 생각했습니다.

dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]}, 
        index=pd.date_range('20130101 09:00:00', periods=5, freq='s')) 


In [58]: dft.rolling(2).sum() 
Out[58]: 
         B 
2013-01-01 09:00:00 NaN 
2013-01-01 09:00:01 1.0 
2013-01-01 09:00:02 3.0 
2013-01-01 09:00:03 NaN 
2013-01-01 09:00:04 NaN 
+0

이 제거 할 수 있습니다 'Naft'는 데이터 프레임에서 가져온 것입니다. 'dft [dft ['B ']. notnull()]. ​​rolling (2) .sum()' – blacksite

답변

3

우선 데이터의 N-1 이전 행이 집계하는 n은 창 크기이다 기본적으로 rolling이 보인다는 것이다. 조건이 충족되지 않으면 윈도우에 대해 NaN을 반환합니다. 이것은 첫 번째 행에서 일어나는 일입니다. 네 번째와 다섯 번째 행에서는 합계의 값 중 하나가 NaN이기 때문입니다.

당신이 NaN을 반환하지 않도록하려는 경우, 당신은 1 대신 2 창에 유효한 관측 필요한 최소 수를 줄일 방법에 min_periods=1을 전달할 수 :

>>> dft.rolling(2, min_periods=1).sum() 
         B 
2013-01-01 09:00:00 0.0 
2013-01-01 09:00:01 1.0 
2013-01-01 09:00:02 3.0 
2013-01-01 09:00:03 2.0 
2013-01-01 09:00:04 4.0 
+0

그것이 n-1 (n 대신에)임을 알았어, 고마워! – Huey

0

실제로 NAN을 추가하면 NAN이 추가됩니다. 그래서 : 그것은 NAN입니다 어느 것도 원래의 제 1 및 제 2 요소의 합이기 때문에

input + rolled = sum 
    0  nan nan 
    1  0  1 
    2  1  3 
    nan  2 nan 
    4  nan nan 

는 두 번째 행이 NAN 수하는 아무 이유도 없다.

그것을 할 수있는 또 다른 방법은 다음과 같습니다 주목해야 할

dft.B + dft.B.shift()