Eu tenho trabalhado com dados importados de um CSV. O Pandas mudou algumas colunas para flutuar, agora os números nessas colunas são exibidos como pontos flutuantes! No entanto, preciso que eles sejam exibidos como números inteiros ou sem vírgula. Existe uma maneira de convertê-los em números inteiros ou não exibir a vírgula?
230
df.col = df.col.astype(int)
df = df.astype(int)
Respostas:
Para modificar a saída flutuante, faça o seguinte:
fonte
df.a = df.a.astype(float)
? Isso faz uma cópia (não sabe como ocopy
parâmetroastype()
é usado)? Enfim, para atualizar o tipo "in place"?DF.({'200': {'#': 354, '%': 0.9971830985915493}, '302': {'#': 1, '%': 0.0028169014084507044}})
Observe que o # é convertido em flutuante e são linhas, não colunas. porque cada um é umSeries
que pode armazenar apenas um único tipo uniforme?dtype
? Se fordtype
, então você precisa para criar as colunas dedtype
object
modo que permite mista, caso contrário, o meu conselho seria para uso apenas flutuar e quando as comparações que fazem usonp.isclose
Use a
pandas.DataFrame.astype(<type>)
função para manipular tipos de coluna.EDITAR:
Para lidar com valores ausentes:
fonte
Considerando o seguinte quadro de dados:
Usando uma lista de nomes de colunas, altere o tipo para várias colunas com
applymap()
:Ou para uma única coluna com
apply()
:fonte
ValueError: ('cannot convert float NaN to integer', u'occurred at index <column_name>')
df['C'] = df['C'].dropna().apply(np.int64)
Esta é uma solução rápida, caso você deseje converter mais colunas do seu
pandas.DataFrame
float para inteiro, considerando também o caso em que você pode ter valores de NaN.Eu tentei com
else x)
eelse None)
, mas o resultado ainda está tendo o número flutuante, então useielse ""
.fonte
""
a todos os valores emcol
Ao expandir o uso mencionado do
pandas.DataFrame.astype(<type>)
método por @Ryan G , pode-se usar oerrors=ignore
argumento para converter apenas as colunas que não produzem um erro, o que simplifica notavelmente a sintaxe. Obviamente, deve-se ter cuidado ao ignorar erros, mas para esta tarefa é muito útil.Dos documentos do pandas.DataFrame.astype :
fonte
fonte
Para converter todas as colunas flutuantes em int
fonte
Aqui está uma função simples que fará o downcast flutuar no menor número inteiro possível que não perca nenhuma informação. Por exemplo,
100.0 pode ser convertido de float para inteiro, mas 99.9 não (sem perder informações para arredondamento ou truncamento)
Além disso, a 1.0 pode ser baixada até o fim
int8
sem perder informações, mas o menor número inteiro para 100_000.0 éint32
Exemplos de código:
fonte
As colunas que precisam ser convertidas para int podem ser mencionadas em um dicionário também como abaixo
fonte
fonte
astype(int)
já foi mencionado várias vezes. Esta resposta não adiciona nada de novo.