¿Cómo puedo asignar Verdadero/Falso a 1/0 en un DataFrame de Pandas?
Tengo una columna en Python pandas
DataFrame que tiene valores booleanos True
/ False
, pero para más cálculos necesito 1
/ 0
representación. ¿Existe una forma rápida pandas
de numpy
hacer eso?
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)
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
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.
True
está 1
en Python y también False
es 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
; True
no será el mismo objeto que cualquier random 1
.
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