Pandas es una poderosa biblioteca de Python para la manipulación de datos, frecuentemente utilizada con DataFrames que contienen datos numéricos. Una tarea común implica convertir columnas de números de punto flotante (floats) a enteros. Este artículo detalla métodos eficientes para esta conversión dentro de un DataFrame de Pandas, destacando sus fortalezas y debilidades.
Tabla de Contenido
- Usando
astype(int)
para la Conversión de Float a Entero - Aprovechando
pd.to_numeric()
para una Conversión Flexible - Manejo de Errores y Redondeo Avanzado
Usando astype(int)
para la Conversión de Float a Entero
El método astype(int)
proporciona un enfoque directo para la conversión de tipo en Pandas. Convierte directamente el tipo de datos de una columna a un entero. Sin embargo, es crucial entender su comportamiento: trunca la parte decimal, realizando efectivamente una operación de piso. Esto significa que descarta el componente fraccional, redondeando siempre hacia abajo.
Ejemplo:
import pandas as pd
data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1]}
df = pd.DataFrame(data)
df['col1_int'] = df['col1'].astype(int)
print(df)
Salida:
col1 col1_int
0 1.5 1
1 2.7 2
2 3.2 3
3 4.9 4
4 5.1 5
La simplicidad de este método es su ventaja, pero su comportamiento de redondeo inflexible limita su aplicabilidad cuando se necesitan otras estrategias de redondeo.
Aprovechando pd.to_numeric()
para una Conversión Flexible
pd.to_numeric()
ofrece mayor control y flexibilidad. Si bien está diseñado principalmente para convertir varios tipos de datos a formatos numéricos, es muy eficaz para las conversiones de float a entero, especialmente cuando se combina con funciones de redondeo.
Ejemplo con Redondeo:
import pandas as pd
import numpy as np
data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1, np.nan]}
df = pd.DataFrame(data)
df['col1_int'] = pd.to_numeric(df['col1'], errors='coerce').round().astype(int)
print(df)
Salida:
col1 col1_int
0 1.5 2
1 2.7 3
2 3.2 3
3 4.9 5
4 5.1 5
5 NaN NaN
Aquí, errors='coerce'
maneja con elegancia los valores no numéricos convirtiéndolos en NaN
. round()
redondea al entero más cercano antes de la conversión final astype(int)
.
Manejo de Errores y Redondeo Avanzado
Para un control más preciso sobre el redondeo, utilice las funciones de NumPy:
np.floor()
: Redondea hacia abajo al entero más cercano.np.ceil()
: Redondea hacia arriba al entero más cercano.
Recuerde manejar posibles errores (como valores no numéricos) usando el parámetro errors
en pd.to_numeric()
. Elegir 'coerce'
reemplaza los valores problemáticos con NaN
, previniendo errores. Alternativamente, 'raise'
lanzará una excepción, y 'ignore'
dejará los valores no numéricos sin modificar.