Eu tenho uma coluna no python pandas DataFrame que possui valores booleanos True / False, mas para cálculos adicionais eu preciso de representação 1/0. Existe uma maneira rápida de fazer isso?
Eu tenho uma coluna no python pandas DataFrame que possui valores booleanos True / False, mas para cálculos adicionais eu preciso de representação 1/0. Existe uma maneira rápida de fazer isso?
Respostas:
Uma maneira sucinta de converter uma única coluna de valores booleanos em uma coluna de números inteiros 1 ou 0:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
. O uso astype(int)
falhará. Outra abordagem, que se converte True
em 1.0 e False
0.0 (flutuantes), preservando os valores de NaN, é:df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
e obter o mesmo resultado?
Apenas multiplique seu 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
True
está 1
em Python e da mesma forma False
é 0
* :
>>> True == 1
True
>>> False == 0
True
Você deve poder executar quaisquer operações que desejar, tratando-as como se fossem números, pois são números:
>>> issubclass(bool, int)
True
>>> True * 5
5
Portanto, para responder à sua pergunta, não é necessário trabalho - você já tem o que está procurando.
* Nota que eu uso é como uma palavra em inglês, não a palavra is
- chave Python - True
não será o mesmo objeto que qualquer aleatório 1
.
np.sin(True).dtype
é float16 para mim.
df.my_column.mean()
muito bem (como você sugere), mas quando tento: df.groupby("some_other_column").agg({"my_column":"mean"})
recebo DataError: No numeric types to aggregate
, então parece que eles NÃO são sempre os mesmos. Apenas para sua informação.
bool
colunas perfeitamente.
TypeError: numpy boolean subtract, the
-` operator, está obsoleto, use a função bitwise_xor, ^
operator ou a logic_xor .
bool
colunas como faz para int
colunas
Você também pode fazer isso diretamente no 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
Você pode usar uma transformação para seu quadro de dados:
df = pd.DataFrame(my_data condition)
df = df*1
Use Series.view
para converter booleano em números inteiros:
df["somecolumn"] = df["somecolumn"].view('i1')