Cómo cambiar el tipo de datos de las columnas de Pandas

  1. el método to_numeric para convertir las columnas a valores numéricos en Pandas
  2. astype() método para convertir un tipo a cualquier otro tipo de datos
  3. infer_objects() método para convertir el tipo de datos de las columnas a un tipo más específico

Introduciremos el método para cambiar el tipo de datos de las columnas en el dataframe de Pandas, y opciones como to_numeric, as_type y infer_objects. También discutiremos cómo usar la opción downcasting con to_numeric.

el método to_numeric para convertir las columnas a valores numéricos en Pandas

to_numeric() es la mejor manera de convertir una o más columnas de un DataFrame a valores numéricos. También intentará cambiar objetos no numéricos (como cadenas) en números enteros o de punto flotante según sea apropiado. La entrada to_numeric() puede ser una Series o una columna de un DataFrame. Si algunos valores no pueden ser convertidos a un tipo numérico, to_numeric() nos permite forzar que los valores no numéricos sean NaN.

Códigos de ejemplo:

# 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'))

Producción:

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á un tipo int64 o float64 por defecto. Podemos usar una opción para asignar un integer, signed, unsigned o float:

# python 3.x
import pandas as pd
s = pd.Series([-3, 1, -5])
print(s)
print(pd.to_numeric(s, downcast='integer'))

Producción:

0   -3
1    1
2   -5
dtype: int64
0   -3
1    1
2   -5
dtype: int8

astype() método para convertir un tipo a cualquier otro tipo de datos

El método astype() nos permite ser explícitos sobre el dtype que queremos convertir. Podemos convertir un tipo de datos a otro pasando el parámetro dentro del método astype().

Consideremos el siguiente código:

# 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)

Producción:

  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 convertir el tipo de datos de las columnas a un tipo más específico

infer_objects() método introducido a partir de la versión 0.21.0 del pandas para convertir las columnas de un dataFrame a un tipo de datos más específico (conversiones suaves).

Considere el siguiente código:

# 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)

Producción:

a    object
b    object
dtype: object
Infering..................
............................
a      int64
b    float64
dtype: object

Artículo relacionado - Pandas Data Type

  • Pandas Convertir Cadena a Numérico Tipo