2017-04-20 5 views
1

나는 boolean (1과 -1)과 nans를 포함하는 pandas 데이터 프레임을 가지고 있습니다. "높음", "낮음"및 "nans"라는 단어로 채우고 싶습니다. 나는 시도했다 :팬더 : 3 상태 부울 인덱스 교체 (문자열 교체 포함)

2) 사용하여,

1) 부울 색인

df[df==1] = 'High' 

하지만 다음 조건에 갔을 때 한 후 혼합 유형의 오류가 발생했습니다 '어디에'

df.where(df==1,'High') 

그러나 실제로 이것은 반대 결과를 제공합니다 ('High'를 df <> 1).

어떻게해야합니까?

답변

0

사용 replace 또는 더블 numpy.where :

d = {1:'High', -1:'Low'} 
df = df.replace(d) 

또 다른 해결책 :

df = pd.DataFrame(np.where(df == 1, 'High', 
        np.where(df == -1, 'Low', np.nan)), index=df.index, columns=df.columns) 
print (df) 

샘플 :

df = pd.DataFrame({'A':[1,-1,np.nan], 
        'B':[np.nan,1,1], 
        'C':[1,-1,1]}) 

print (df) 
    A B C 
0 1.0 NaN 1 
1 -1.0 1.0 -1 
2 NaN 1.0 1 

d = {1:'High', -1:'Low'} 
df = df.replace(d) 
print (df) 
     A  B  C 
0 High NaN High 
1 Low High Low 
2 NaN High High 

df = pd.DataFrame(np.where(df == 1, 'High', 
        np.where(df == -1, 'Low', np.nan)), index=df.index, columns=df.columns) 
print (df) 
     A  B  C 
0 High nan High 
1 Low High Low 
2 nan High High