Como mudar o tipo de dados das colunas em Pandas
-
to_numeric
Método para converter colunas em valores numéricos em Pandas -
astype()
Método para converter um tipo em qualquer outro tipo de dado -
infer_objects()
Método para converter o tipo de dado das colunas para um tipo mais específico
Vamos introduzir o método para alterar o tipo de dados das colunas em Pandas DataFrame
, e opções como to_numaric
, as_type
e infer_objects
. Também discutiremos como utilizar a opção downcasting
com to_numaric
.
to_numeric
Método para converter colunas em valores numéricos em Pandas
to_numeric()
é a melhor maneira de converter uma ou mais colunas de um DataFrame
para valores numéricos. Ele também tentará transformar objetos não numéricos (como strings) em inteiros ou números de ponto flutuante, conforme o apropriado to_numeric()
input pode ser uma Series
ou uma coluna de um dataFrame
. Se alguns valores não puderem ser convertidos para um tipo numérico, to_numeric()
permite-nos forçar valores não-numéricos a serem NaN
.
Códigos de exemplo:
# python 3.x
import pandas as pd
s = pd.Series(["12", "12", "4.7", "asad", "3.0"])
print(s)
print("------------------------------")
print(pd.to_numeric(s, errors="coerce"))
Resultado:
0 12
1 12
2 4.7
3 asad
4 3.0
dtype: object
------------------------------
0 12.0
1 12.0
2 4.7
3 NaN
4 3.0
dtype: float64
to_numeric()
nos dará um int64
ou float64
dtype por padrão. Podemos utilizar uma opção para lançar tanto para integer
, signed
, unsigned
ou float
:
# python 3.x
import pandas as pd
s = pd.Series([-3, 1, -5])
print(s)
print(pd.to_numeric(s, downcast="integer"))
Resultado:
0 -3
1 1
2 -5
dtype: int64
0 -3
1 1
2 -5
dtype: int8
astype()
Método para converter um tipo em qualquer outro tipo de dado
O método astype()
nos permite ser explícitos sobre o tipo que queremos converter. Podemos converter um tipo de dado para outro passando o parâmetro dentro do método astype()
.
Códigos de exemplo:
# python 3.x
import pandas as pd
c = [["x", "1.23", "14.2"], ["y", "20", "0.11"], ["z", "3", "10"]]
df = pd.DataFrame(c, columns=["first", "second", "third"])
print(df)
df[["second", "third"]] = df[["second", "third"]].astype(float)
print("Converting..................")
print("............................")
print(df)
Resultado:
first second third
0 x 1.23 14.2
1 y 20 0.11
2 z 3 10
Converting..................
............................
first second third
0 x 1.23 14.20
1 y 20.00 0.11
2 z 3.00 10.00
infer_objects()
Método para converter o tipo de dado das colunas para um tipo mais específico
O infer_objects()
metodo introduzido a partir da Versão 0.21.0 do pandas para converter colunas de um dataFrame
para um tipo de dados mais específico (conversões suaves).
Códigos de exemplo:
# python 3.x
import pandas as pd
df = pd.DataFrame({"a": [3, 12, 5], "b": [3.0, 2.6, 1.1]}, dtype="object")
print(df.dtypes)
df = df.infer_objects()
print("Infering..................")
print("............................")
print(df.dtypes)
Resultado:
a object
b object
dtype: object
Infering..................
............................
a int64
b float64
dtype: object