Como mudar o tipo de dados das colunas em Pandas

  1. to_numeric Método para converter colunas em valores numéricos em Pandas
  2. astype() Método para converter um tipo em qualquer outro tipo de dado
  3. 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 panda 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