Ich habe eine Spalte in Python Pandas DataFrame, die boolesche True / False-Werte enthält, aber für weitere Berechnungen benötige ich eine 1/0 Darstellung. Gibt es eine schnelle Möglichkeit für Pandas / Numpy, das zu tun?
Ich habe eine Spalte in Python Pandas DataFrame, die boolesche True / False-Werte enthält, aber für weitere Berechnungen benötige ich eine 1/0 Darstellung. Gibt es eine schnelle Möglichkeit für Pandas / Numpy, das zu tun?
Antworten:
Eine prägnante Methode zum Konvertieren einer einzelnen Spalte mit Booleschen Werten in eine Spalte mit Ganzzahlen 1 oder 0:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
. Die Verwendung astype(int)
schlägt dann fehl. Ein anderer Ansatz, der unter Beibehaltung der NaN-Werte True
in 1.0 und False
0.0 (Floats) konvertiert wird , besteht darin, df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
das gleiche Ergebnis erzielen ?
Multiplizieren Sie einfach Ihren Datenrahmen mit 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
ist 1
in Python, und ebenso False
ist 0
* :
>>> True == 1
True
>>> False == 0
True
Sie sollten in der Lage sein, alle gewünschten Operationen an ihnen auszuführen, indem Sie sie einfach so behandeln, als wären sie Zahlen, da es sich um Zahlen handelt:
>>> issubclass(bool, int)
True
>>> True * 5
5
Um Ihre Frage zu beantworten, ist keine Arbeit erforderlich - Sie haben bereits das, wonach Sie suchen.
* Hinweis I Verwendung ist als englisches Wort, nicht das Python Schlüsselwort is
- True
wird das gleiche Objekt wie jeder zufällig nicht sein 1
.
np.sin(True).dtype
Seien Sie vorsichtig mit Datentypen, wenn Sie Gleitkomma- Berechnungen durchführen : ist float16 für mich.
df.my_column.mean()
(wie Sie andeuten), aber wenn ich versuche: df.groupby("some_other_column").agg({"my_column":"mean"})
Ich verstehe DataError: No numeric types to aggregate
, so scheint es, dass sie NICHT immer gleich sind. Nur zur Info.
bool
Spalten problemlos aggregieren .
TypeError: numpy boolean subtract, the
auslösen : -` Operator, ist veraltet, verwenden Sie ^
stattdessen die Funktion bitwise_xor , den Operator oder die Funktion static_xor.` Die Antwort von @ User behebt dies.
bool
Spalten wie für int
Spalten
Sie können dies auch direkt auf Frames tun
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
Sie können eine Transformation für Ihren Datenrahmen verwenden:
df = pd.DataFrame(my_data condition)
df = df*1
Verwendung Series.view
zum Konvertieren von Booleschen in Ganzzahlen:
df["somecolumn"] = df["somecolumn"].view('i1')