回答:
ブール値の単一の列を整数1または0の列に変換する簡単な方法:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
。使用astype(int)
すると失敗します。変換別のアプローチ、True
1.0およびFalse
NaNの値を維持しながら、0.0(フロート)には、行うことです:df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
しても同じ結果が得られませんか?
データフレームに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
True
ある1
Pythonで、同様False
です0
*。
>>> True == 1
True
>>> False == 0
True
あなたは、彼らのように、彼らは、数字であるかのようにちょうどそれらを処理することにより、あなたがそれらにしたい任意の操作を実行できるようにする必要があります番号:
>>> issubclass(bool, int)
True
>>> True * 5
5
だからあなたの質問に答えるために、仕事は必要ありません-あなたはあなたが探しているものをすでに持っています。
*注Iの使用である英語の単語ではなく、Pythonのキーワードとしてis
- True
任意のランダムと同じオブジェクトではありません1
。
np.sin(True).dtype
てください:はfloat16です。
df.my_column.mean()
(ほのめかして)うまく呼び出すことができますが、試してみると、がdf.groupby("some_other_column").agg({"my_column":"mean"})
得られるためDataError: No numeric types to aggregate
、常に同じではないようです。参考までに。
bool
列を問題なく集計できます。
TypeError: numpy boolean subtract, the
-`演算子、非推奨です。代わりにbitwise_xor、^
演算子、またはlogical_xor関数を使用してください。`@Userの回答を使用すると、これが修正されます。
bool
、それはの場合と同様に、列int
の列
フレームで直接行うこともできます
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
データフレームに変換を使用できます。
df = pd.DataFrame(my_data condition)
df = df*1
Series.view
ブールを整数に変換するために使用します:
df["somecolumn"] = df["somecolumn"].view('i1')