ブール値のTrue/False値を持つpython pandas DataFrameの列がありますが、さらに計算するには1/0表現が必要です。それを行う簡単なパンダ/ numpyの方法はありますか?
編集:整数とTrue/False値の両方を持つ配列が与えられると、そのような配列でdtype=object
を返すnumpyの場合、以下の答えは成り立たないようです。 numpyでさらに計算を進めるには、np_values = np.array(df.values, dtype = np.float64)
を明示的に設定する必要がありました。
True
はPythonの1
であり、同様にFalse
は0
です*:
>>> True == 1
True
>>> False == 0
True
are numbersのように、それらを数字であるかのように扱うだけで、必要な操作を実行できるはずです。
>>> issubclass(bool, int)
True
>>> True * 5
5
あなたの質問に答えるために、仕事は必要ありません-あなたはすでにあなたが探しているものを持っています。
*注:私はisを英語の単語として使用し、Pythonキーワードis
-True
はランダム1
。
ブール値の単一の列を整数1または0の列に変換する方法の質問に非常に明確に答えるだけです。
df.somecolumn = df.somecolumn.astype(int)
データフレームに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
フレームで直接これを行うこともできます
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