web-dev-qa-db-fra.com

Comment mapper True / False à 1/0 dans un Pandas DataFrame?

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).

87
Simon Righley

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.

43
Gareth Latty

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)

187
User

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
54
shubhamgoel27

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