Pandas는 정수 0과 1을 부울로 변환합니다.
Nov 23 2020
dtype 인 0과 1의 핫 인코딩 된 열을 포함하는 데이터 프레임이 있습니다 int32
.
a b h1 h2 h3
xy za 0 0 1
ab cd 1 0 0
pq rs 0 1 0
열 h1, h2 및 h3을 부울로 변환하고 싶습니다. 그래서 여기에 제가 한 일이 있습니다.
df[df.columns[2:]].astype(bool)
그러나 이것은 h1-h3의 모든 값을 TRUE
.
나는 또한 시도했다
df[df.columns[2:]].map({0:False, 1:True})
그러나 그것도 작동하지 않습니다. (AttributeError : 'DataFrame'객체에 'map'속성이 없습니다.)
데이터 프레임의 특정 열을 int32
0과 1에서 부울 ( True
/ False
) 로 변환하는 가장 좋은 방법은 무엇입니까 ?
답변
2 jezrael Nov 23 2020 at 19:42
를 사용하여 처음 2 개 이후 위치별로 모든 열을 선택 DataFrame.iloc하고 부울로 변환 한 다음 다시 할당 할 수 있습니다.
df.iloc[:, 2:] = df.iloc[:, 2:].astype(bool)
print (df)
a b h1 h2 h3
0 xy za False False True
1 ab cd True False False
2 pq rs False True False
또는 먼저 열 이름을 변환하기위한 사전을 만듭니다 2
.
df = df.astype(dict.fromkeys(df.columns[2:], bool))
print (df)
a b h1 h2 h3
0 xy za False False True
1 ab cd True False False
2 pq rs False True False
3 RuthgerRighart Nov 23 2020 at 20:07
실제로 가장 Pythonic이 아닌 다른 옵션이 있습니다. 그럼에도 불구하고 내가 제공 할 것입니다. 문자열 (예 : 'Cat'대 'Dog')을 한 번에 부울 (False, True)로 변환하려는 경우 유용 할 수 있습니다.
df = pd.DataFrame({'a':['xy','ab','pq'], 'b':['za','cd','rs'], 'h1':[0,1,0], 'h2':[0,0,1], 'h3':[1,0,0]})
df = df.replace({0:False, 1:True})
데이터 유형 확인 :
df.dtypes
a object
b object
h1 bool
h2 bool
h3 bool
dtype: object
1 Arpan Nov 23 2020 at 19:59
두 번째 시도에 아주 가까웠습니다. 이 시도
df[df.columns[2:]].applymap(bool)