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:
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?