¿Cómo puedo asignar Verdadero/Falso a 1/0 en un DataFrame de Pandas?

Resuelto Simon Righley asked hace 11 años • 13 respuestas

Tengo una columna en Python pandasDataFrame que tiene valores booleanos True/ False, pero para más cálculos necesito 1/ 0representación. ¿Existe una forma rápida pandasde numpyhacer eso?

Simon Righley avatar Jun 30 '13 00:06 Simon Righley
Aceptado

Una forma sucinta de convertir una sola columna de valores booleanos en una columna de números enteros 1 o 0:

df["somecolumn"] = df["somecolumn"].astype(int)
User avatar Dec 08 '2014 16:12 User

Simplemente multiplica tu marco de datos por 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
shubhamgoel27 avatar Jun 05 '2016 21:06 shubhamgoel27

Esta pregunta menciona específicamente una sola columna, por lo que la respuesta actualmente aceptada funciona. Sin embargo, no se generaliza a varias columnas. Para aquellos interesados ​​en una solución general, utilice lo siguiente:

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

Esto funciona para un DataFrame que contiene columnas de muchos tipos diferentes, independientemente de cuántas sean booleanas.

Mike Trotta avatar Dec 21 '2020 15:12 Mike Trotta

Trueestá 1en Python y también Falsees 0* :

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

Debería poder realizar cualquier operación que desee con ellos simplemente tratándolos como si fueran números, ya que son números :

>>> issubclass(bool, int)
True
>>> True * 5
5

Entonces, para responder a tu pregunta, no es necesario realizar ningún trabajo: ya tienes lo que buscas.

* Nota que uso is como palabra en inglés, no como palabra clave de Python is; Trueno será el mismo objeto que cualquier random 1.

Gareth Latty avatar Jun 29 '2013 17:06 Gareth Latty

También puedes hacer esto directamente en Frames.

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
Jeff avatar Jun 29 '2013 18:06 Jeff