Fechas en Pandas: datetime, índice y filtros

Clase 22 de 32Curso de Python para Ciencia de Datos

Contenido del curso

NumPy

Pandas

Resumen

Trabajar con datos temporales es una de las tareas más frecuentes en el análisis de datos, y Pandas ofrece herramientas poderosas para hacerlo de forma eficiente. Cuando las fechas llegan como cadenas de texto desde archivos CSV u otras fuentes, es indispensable convertirlas al tipo datetime para habilitar operaciones como filtrado por rangos, resampling y análisis de tendencias.

¿Por qué convertir columnas al tipo datetime?

Al cargar un dataset, es común que columnas como Invoice Date aparezcan con tipo de dato object o string [0:40]. Esto limita cualquier operación temporal. Para solucionarlo, se utiliza la función pd.to_datetime(), que transforma la columna completa al formato adecuado.

python df['Invoice Date'] = pd.to_datetime(df['Invoice Date'])

Después de ejecutar esta conversión, al consultar df.info() se confirma que la columna ahora tiene tipo datetime64 [1:22]. Este paso es fundamental antes de cualquier análisis temporal.

También es recomendable eliminar valores nulos en la columna de fechas utilizando dropna() con el parámetro subset para especificar la columna y el parámetro inplace=True para modificar el DataFrame directamente sin generar una copia [1:40].

python df.dropna(subset=['Invoice Date'], inplace=True)

¿Cómo establecer fechas como índice y extraer componentes?

Una práctica muy útil es asignar la columna de fechas como índice del DataFrame mediante set_index() [2:20]. Esto permite acceder a los datos por fecha de forma directa.

python df.set_index('Invoice Date', inplace=True)

Una vez que el índice es de tipo datetime, se pueden descomponer sus componentes en columnas independientes [3:00]:

  • df['año'] = df.index.year extrae el año.
  • df['mes'] = df.index.month extrae el mes.
  • df['dia'] = df.index.day extrae el día.
  • df['dia_semana'] = df.index.dayofweek devuelve un número del 0 al 6, donde 0 es lunes.
  • df['hora'] = df.index.hour extrae la hora.

El formato que se respeta en el índice es año-mes-día hora:minutos:segundos [2:50]. Es importante verificar siempre el resultado imprimiendo el DataFrame completo después de cada modificación para asegurar que todo esté correcto [4:20].

¿Qué hacer si se comete un error al crear una columna?

Si una columna se crea con un nombre incorrecto, la mejor estrategia es eliminarla con drop() y volver a crearla correctamente [4:50]. Al crear la nueva columna sin especificar posición, esta se agrega al final del DataFrame.

python df = df.drop(columns=['nombre_incorrecto'])

¿Cómo filtrar datos por fechas y crear rangos temporales?

Cuando el índice es de tipo datetime, el método loc permite filtrar directamente por año o por combinación de año y mes [5:50]:

python df_2011 = df.loc['2011'] df_dic_2011 = df.loc['2011-12']

También se pueden extraer rangos de fechas haciendo un slice dentro de loc [7:00]:

python df_rango = df.loc['2010-12-01':'2010-12-15']

Esto devuelve todas las filas comprendidas entre ambas fechas, incluyendo los extremos.

¿Cómo generar rangos de fechas desde cero?

Pandas incluye la función pd.date_range() para crear secuencias de fechas personalizadas [7:50]. Se especifica una fecha de inicio, una de fin y la frecuencia deseada.

python rango = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D') df_fechas = pd.DataFrame(rango, columns=['date'])

El parámetro freq='D' indica frecuencia diaria, generando cada día dentro del rango especificado [8:10]. Esta funcionalidad es muy útil para crear DataFrames temporales desde cero.

Dominar el tipo datetime en Pandas abre la puerta a análisis temporales robustos. Con los datos transformados y organizados, el siguiente paso natural es pensar en cómo visualizar esta información para comunicarla de forma efectiva al stakeholder. ¿Qué tipo de visualización consideras más adecuada para datos temporales? Comparte tu opinión en los comentarios.