web-dev-qa-db-ja.com

Pandas DataFrameでTrue / Falseを1/0にマップするにはどうすればよいですか?

ブール値のTrue/False値を持つpython pandas DataFrameの列がありますが、さらに計算するには1/0表現が必要です。それを行う簡単なパンダ/ numpyの方法はありますか?

編集:整数とTrue/False値の両方を持つ配列が与えられると、そのような配列でdtype=objectを返すnumpyの場合、以下の答えは成り立たないようです。 numpyでさらに計算を進めるには、np_values = np.array(df.values, dtype = np.float64)を明示的に設定する必要がありました。

87
Simon Righley

TrueはPythonの1であり、同様にFalse0です*

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

are numbersのように、それらを数字であるかのように扱うだけで、必要な操作を実行できるはずです。

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

あなたの質問に答えるために、仕事は必要ありません-あなたはすでにあなたが探しているものを持っています。

*注:私はisを英語の単語として使用し、Pythonキーワードis-Trueはランダム1

43
Gareth Latty

ブール値の単一の列を整数1または0の列に変換する方法の質問に非常に明確に答えるだけです。

df.somecolumn = df.somecolumn.astype(int)

187
User

データフレームに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
54
shubhamgoel27

フレームで直接これを行うこともできます

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
21
Jeff