Pandas DataFrame에서 True / False를 1/0에 어떻게 매핑 할 수 있습니까?


133

파이썬 팬더 DataFrame에 부울 True / False 값이있는 열이 있지만 추가 계산을 위해서는 1/0 표현이 필요합니다. 그렇게 할 수있는 빠른 팬더 / numpy 방법이 있습니까?


1
어떤 추가 계산이 필요합니까?
Jon Clements

@JonClements를 앵무새로 만들려면 왜 bool을 int로 변환하여 계산에 사용해야합니까? bool은 산술적으로 직접 작동합니다 (내부적으로 int이므로).
CS95

답변:


276

부울 값의 단일 열을 정수 1 또는 0의 열로 변환하는 간결한 방법 :

df["somecolumn"] = df["somecolumn"].astype(int)

4
코너 케이스는에 NaN 값이있는 경우입니다 somecolumn. astype(int)그러면 사용 이 실패합니다. NaN 값을 유지하면서 True1.0과 False0.0 (부동)으로 변환 하는 또 다른 방법 은 다음과 같습니다.df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
DustByte

@DustByte 잘 잡아라!
Homunculus Reticulli

@DustByte 사용 astype(float)하고 같은 결과를 얻을 수 없었 습니까?
AMC

65

Dataframe에 1을 곱하면됩니다 (int)

[1]: data = pd.DataFrame([[True, False, True], [False, False, True]])
[2]: print data
          0      1     2
     0   True  False  True
     1   False False  True

[3]: print data*1
         0  1  2
     0   1  0  1
     1   0  0  1

이 솔루션의 장점은 무엇입니까?
AMC

44

True이다 1파이썬에서, 마찬가지로 False입니다 0* :

>>> True == 1
True
>>> False == 0
True

당신은 그들이 그들이이 숫자 것처럼 단지 그들을 처리하여 당신이 그들에 원하는 작업을 수행 할 수있을 것 입니다 번호 :

>>> issubclass(bool, int)
True
>>> True * 5
5

따라서 귀하의 질문에 대답하기 위해 필요한 작업이 없습니다. 이미 찾고 계신 것이 있습니다.

* 참고 I의 사용 이다 영어 단어가 아닌 파이썬 키워드로 is- True어떤 임의 같은 대상이되지 않습니다 1.


1
부동 소수점 수학을 수행하는 경우 데이터 유형에주의 np.sin(True).dtype하십시오.
jorgeca 2016 년

9
부울 열이있는 데이터 프레임이 있고 (아시다시피) df.my_column.mean()잘 호출 할 수는 있지만 시도 할 때 : df.groupby("some_other_column").agg({"my_column":"mean"})나는 얻습니다 DataError: No numeric types to aggregate. 그래서 항상 같지는 않습니다 . 참고로
dwanderson

팬더 버전 24 (및 이전 버전)에서는 bool열을 잘 집계 할 수 있습니다 .
BallpointBen

1
numpy는 boolean 유형의 오류를 발생시키는 것처럼 보입니다 : TypeError: numpy boolean subtract, the -` operator, deprecated, bitwise_xor, ^operator 또는 logical_xor 함수를 대신 사용하십시오.
Amadou Kone

이 같은 아니라 또 다른 이유 : df.col1 + df.col2 + df.col3은 아니 작업을 수행 bool이의 경우와 같이 열 int
colorlace을

22

프레임에서 직접 할 수도 있습니다.

In [104]: df = DataFrame(dict(A = True, B = False),index=range(3))

In [105]: df
Out[105]: 
      A      B
0  True  False
1  True  False
2  True  False

In [106]: df.dtypes
Out[106]: 
A    bool
B    bool
dtype: object

In [107]: df.astype(int)
Out[107]: 
   A  B
0  1  0
1  1  0
2  1  0

In [108]: df.astype(int).dtypes
Out[108]: 
A    int64
B    int64
dtype: object


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.