Cómo cambiar el tipo de datos de las columnas de Pandas
-
El método
to_numeric
para convertir las columnas a valores numéricos en Pandas -
astype()
método para convertir un tipo a cualquier otro tipo de datos -
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 Pandas DataFrame
, 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