Tengo una columna en DataFrame de python pandas que tiene valores booleanos de Verdadero / Falso, pero para más cálculos necesito una representación de 1/0. ¿Hay una manera rápida de hacer pandas / números?
EDITAR: Las respuestas a continuación no parecen ser válidas en el caso de numpy que, dada una matriz con enteros y valores de Verdadero / Falso, devuelve dtype=object
en dicha matriz. Para continuar con los cálculos adicionales en numpy, tuve que establecer explícitamente np_values = np.array(df.values, dtype = np.float64)
.
True
es 1
en Python, y también False
es 0
* :
>>> True == 1 True >>> False == 0 True
Debería poder realizar cualquier operación que desee en 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 su pregunta, no es necesario trabajar, ya tiene lo que está buscando.
* Nota que uso es como una palabra en inglés, no la palabra clave de Python is
– True
no será el mismo objeto que cualquier 1
azar.
Solo para responder de manera muy explícita a la pregunta de cómo convertir una sola columna de valores booleanos en una columna de enteros 1 o 0:
df.somecolumn = df.somecolumn.astype(int)
Solo multiplica tu Dataframe 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
También puedes hacer esto directamente en marcos.
In [104]: df = DataFrame(dict(A = True, B = False),index=range(3)) In [105]: df Out[105]: AB 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]: AB 0 1 0 1 1 0 2 1 0 In [108]: df.astype(int).dtypes Out[108]: A int64 B int64 dtype: object