HOWTO · Pandas
Cómo extraer mes y año por separado de la columna Fecha y hora en Pandas
Extraiga valores numéricos de año y mes de una columna datetime de Pandas con el accesor .dt, o formatéelos como cadenas con strftime().
En esta página
Usa un accesor de fecha y hora de una Series para añadir columnas separadas de año y mes: dates.dt.year y dates.dt.month. Estas propiedades devuelven componentes numéricos. Si la columna de origen contiene cadenas de fecha, conviértelas una sola vez con pandas.to_datetime antes de usar .dt. Elige strftime() si necesitas que el resultado sea texto, por ejemplo, un mes con formato 01.
Extraer el mes y el año con Series.dt.year y Series.dt.month
El accesor .dt permite acceder a las propiedades de fecha y hora de una Series de Pandas. En concreto, pandas.Series.dt.year y pandas.Series.dt.month devuelven el año y el mes como valores numéricos; son propiedades, así que no les añadas paréntesis. La referencia de year para Series documenta la propiedad del año.
Convierte la columna de entrada con pandas.to_datetime si sus valores son cadenas. El ejemplo siguiente parte de cadenas de fecha ISO, convierte la columna y asigna los dos componentes extraídos. Después imprime el DataFrame resultante con los valores numéricos del año y del mes.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
df["year"] = df["joined"].dt.year
df["month"] = df["joined"].dt.month
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 1
2 2020-02-05 2020 2
Si una columna ya tiene un tipo de dato de fecha y hora, omite la línea de conversión y aplica directamente las dos propiedades. El análisis depende de que los valores representen fechas en un formato que Pandas pueda interpretar; normaliza las cadenas de origen o analízalas explícitamente si tienen otro formato antes de extraer sus componentes. La propiedad del mes devuelve un valor numérico: enero se representa como 1, lo que resulta útil para ordenar o hacer comparaciones numéricas.
Dar formato al año y al mes con strftime()
Usa strftime() cuando el código posterior necesite cadenas con formato en lugar de componentes numéricos. Con el accesor .dt de Series, %Y da formato al año con cuatro dígitos y %m al mes con dos. Para la fecha 2020-01-02, esos formatos corresponden a las cadenas 2020 y 01.
Esta versión usa la misma conversión de entrada y añade columnas de texto. La cadena del mes conserva el cero inicial, algo útil para etiquetas o claves de año y mes. Como estos valores son cadenas, conviértelos a números si después necesitas hacer cálculos u ordenarlos numéricamente.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
df["year"] = df["joined"].dt.strftime("%Y")
df["month"] = df["joined"].dt.strftime("%m")
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 01
2 2020-02-05 2020 02
Usa las propiedades numéricas .dt.year y .dt.month cuando necesites valores para realizar operaciones aritméticas o comparaciones numéricas. Usa strftime() si importa el formato de presentación o necesitas un mes de ancho fijo, como 01. Ambos métodos requieren valores con tipo de dato de fecha y hora.
Extraer el mes y el año con DatetimeIndex.year y DatetimeIndex.month
También puedes convertir una Series de fechas en pandas.DatetimeIndex y consultar sus atributos year y month. La referencia de DatetimeIndex describe este tipo de índice. Estos atributos proporcionan componentes numéricos, igual que el accesor de Series, y permiten asignarlos a columnas del DataFrame en un solo paso.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
dates = pd.DatetimeIndex(df["joined"])
df["year"] = dates.year
df["month"] = dates.month
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 1
2 2020-02-05 2020 2
Usa DatetimeIndex cuando un objeto de índice encaje con el resto de tu flujo de trabajo; para una columna Series normal, las propiedades .dt suelen ser la opción más directa. Los dos métodos devuelven valores numéricos para el año y el mes, mientras que strftime() devuelve cadenas. En todos los casos, asegúrate primero de que el origen tenga tipo de dato de fecha y hora. Estos ejemplos usan cadenas que solo contienen fechas; si las marcas de tiempo incluyen zonas horarias, ten en cuenta cuál es la zona horaria deseada, porque el año y el mes del calendario dependen de la fecha local de la marca de tiempo.