¿Cómo resolver el error AttributeError: el objeto ‘Series’ no tiene el atributo ‘strftime’?

Este error ocurre cuando intenta llamar a la función de formateador de cadenas strftime() en una serie pandas. Para corregir el error, use el descriptor de acceso Series dt y solo luego llame al método strftime. Aquí hay un ejemplo:

your_df['your_column'].dt.strftime('%d/%m/%y')

Reproduciendo el error

Comencemos definiendo un Pandas DataFrame muy simple para mostrar cómo reproducir la excepción de error de atributo:

import pandas as pd  stamps = pd.date_range(start="1/1/2023", periods = 4, freq = 'B' ) revenue = [10544, 19445, 12343, 13450]  sales  = pd.DataFrame (dict (stamps = stamps, revenue = revenue)) sales .head()

Veamos nuestro conjunto de datos:

sellos de ingresos0

1

2

3

2023-01-02 10544
2023-01-03 19445
2023-01-04 12343
2023-01-05 13450

Cada columna en el DataFrame es una serie pandas.

type(sales['stamps'])

Esto devolverá:

pandas.core.series.Series

Ahora, me gustaría usar el formateador de cadenas strftime() para cambiar el formato de fecha y hora de los valores en mi columna de sellos:

sales['stamps'].strftime('%d/%m/%y')

Esto devuelve una excepción de error de atributo:

AttributeError: 'Series' object has no attribute 'strftime'

Aquí hay una captura de pantalla de Jupyter Lab, obtendrá un mensaje de error similar en su Jupyter Notebook, PyCharm, VS COde, Spyder u otros entornos de desarrollo de Python que pueda estar usando:

Resolviendo la excepción sin atributo strftime

Antes de resolver el problema, comprendamos la causa raíz de la excepción. El rol de Strftime() es convertir objetos de fecha y hora en objetos de cadena. Por lo tanto, cuando intentamos invocar la función en una serie, obtenemos un error de atributo. Afortunadamente, resolver este error es muy simple: los objetos de la serie pandas tienen un accesor dt (fecha y hora), que permite invocar funciones relacionadas con la fecha. La forma en que usa la función dt es la siguiente:

sales['stamps'].dt.strftime('%d/%m/%y')

Esto devuelve la siguiente serie de objetos: tenga en cuenta el formato de los datos como (dd/mm/yyyy):

0    02/01/23 1    03/01/23 2    04/01/23 3    05/01/23 Name: stamps, dtype: object

Seguir el aprendizaje

¿Cómo convertir objetos flotantes en cadenas en Python y pandas?