260 votes

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

J'ai une colonne en python pandas DataFrame qui a des booléens True / False mais pour d'autres calculs, j'ai besoin de 1 / 0 représentation. Y a-t-il un moyen rapide pandas / numpy manière de le faire ?

490voto

User Points 6184

Un moyen succinct de convertir une seule colonne de valeurs booléennes en une colonne d'entiers 1 ou 0 :

df["somecolumn"] = df["somecolumn"].astype(int)

91voto

shubhamgoel27 Points 625

Multipliez simplement 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

48voto

Lattyware Points 37257

True es 1 en Python, et de même False es 0 * :

>>> True == 1
True
>>> False == 0
True

Vous devriez être en mesure d'effectuer toutes les opérations que vous voulez sur eux en les traitant simplement comme s'ils étaient des nombres, puisqu'ils sont numéros :

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

* Notez que j'utilise es comme un mot anglais, et non le mot-clé Python is - True ne sera pas le même objet qu'un autre aléatoire 1 .

38voto

Mike Trotta Points 326

Cette question mentionne spécifiquement une seule colonne, donc la réponse actuellement acceptée fonctionne. Cependant, elle ne s'applique pas à plusieurs colonnes. Pour ceux qui souhaitent une solution générale, utilisez ce qui suit :

df.replace({False: 0, True: 1}, inplace=True)

Cela fonctionne pour un DataFrame qui contient des colonnes de nombreux types différents, indépendamment du nombre de booléens.

23voto

Jeff Points 27612

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X