J'ai une colonne dans python pandas DataFrame qui a des valeurs booléennes True/False, mais les calculs supplémentaires nécessitent une représentation 1/0. Existe-t-il un rapide pandas/numpy moyen de faire ça?
EDIT: Les réponses ci-dessous ne semblent pas tenir pour numpy qui, étant donné un tableau contenant à la fois des entiers et des valeurs True/False, renvoie dtype=object
Sur ce tableau. Afin de procéder à des calculs supplémentaires dans numpy, je devais définir explicitement np_values = np.array(df.values, dtype = np.float64)
.
True
est 1
en Python, et de même False
est 0
*:
>>> True == 1
True
>>> False == 0
True
Vous devriez pouvoir effectuer toutes les opérations que vous souhaitez sur eux en les traitant simplement comme s'il s'agissait de nombres, tels qu'ils sont sont nombres:
>>> issubclass(bool, int)
True
>>> True * 5
5
Donc, pour répondre à votre question, aucun travail n'est nécessaire - vous avez déjà ce que vous cherchez.
* Notez que j'utilise is en tant que mot anglais, et non pas le Python is
- True
ne sera pas le même objet que toute aléatoire 1
.
Juste pour répondre très explicitement à la question de savoir comment convertir une seule colonne de valeurs booléennes en une colonne d’entiers 1 ou 0:
df.somecolumn = df.somecolumn.astype(int)
Il suffit de multiplier votre Dataframe par 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
Vous pouvez également le faire directement sur les cadres
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