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'속성이 없습니다.)

데이터 프레임의 특정 열을 int320과 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)