2016-09-16 5 views
0

Nan이 일반적으로 사용되는 정수 비교를 기반으로 더미 변수를 생성하려고합니다. A> 비교는 Nan 값이있는 경우 오류를 발생 시키지만 비교 결과를 Nan으로 반환합니다. 나는 fillna()를 사용하여 Nan을 값으로 대체 할 수 있다는 것을 알고 있으며, false 일 것이라는 것을 알고 있지만, 이것을하기에 더 우아한 방법이 있기를 바랍니다. less보다 작게 사용하거나 양수 나 음수가 될 수있는 변수를 사용하면 fillna()에서 값을 변경해야합니다. 그러면 오류를 만들 수있는 또 하나의 기회입니다. 어떤 방법으로도 30 < Nan = Nan입니까? python pandas 정수 비교에서 Nan 무시하기

이 명확하게하기 위해,이 원하는 : var에 null의 경우는 30 +, 0, 그렇지 않은 경우

df['var_dummy'] = df[df['var'] >= 30].astype('int') 

가 1 널을 반환합니다. 현재 ValueError : 중복 축에서 다시 인덱스 할 수 없습니다.

+3

왜'30 EdChum

+0

또한 부울 배열에 NaN을 사용할 수 없습니다. 따라서 필터링하고 원하는 작업을 수행하더라도 플로트 배열을 갖게됩니다. – ayhan

+0

죄송합니다. 명확하지 않았습니다. x> 30, y = 1과 같은 평가 문이 필요합니다. Nan> 30이라고 평가되는 즉시 오류가 발생합니다. – Drevent

답변

3

은 여기 방법 : 그 중 하나가 NaN 인 경우

s1 = pd.Series([1, 3, 4, 2, np.nan, 5, np.nan, 7]) 
s2 = pd.Series([2, 1, 5, 5, np.nan, np.nan, 2, np.nan]) 

(s1 < s2).mask(s1.isnull() | s2.isnull(), np.nan) 
Out: 
0 1.0 
1 0.0 
2 1.0 
3 1.0 
4 NaN 
5 NaN 
6 NaN 
7 NaN 
dtype: float64 

이 마스크 부울 배열이 (s1 < s2)에서 돌아왔다. 이 경우 NaN을 반환합니다. 하지만 NaN을 부울 배열로 가질 수 없으므로 float로 형 변환됩니다.