HOWTO · Pandas
Estrai mese e anno separatamente dalla colonna Datetime in Pandas
Estrai i valori numerici di anno e mese da una colonna datetime di Pandas con l'accessor .dt, oppure formattali come stringhe con strftime().
In questa pagina
Usa un accessore datetime di una Series per aggiungere colonne separate per l’anno e il mese: dates.dt.year e dates.dt.month. Queste proprietà restituiscono componenti numeriche. Se la colonna di origine contiene stringhe di date, convertila una sola volta con pandas.to_datetime prima di usare .dt. Scegli strftime() quando vuoi ottenere testo, per esempio un mese formattato come 01.
Estrarre mese e anno con Series.dt.year e Series.dt.month
L’accessore .dt espone le proprietà datetime di una Series Pandas. In particolare, pandas.Series.dt.year e pandas.Series.dt.month restituiscono rispettivamente l’anno e il mese come valori numerici; sono proprietà, quindi non aggiungere parentesi. La documentazione di riferimento per l’anno di Series descrive la proprietà dell’anno.
Quando i valori sono stringhe, converti la colonna di input con pandas.to_datetime. L’esempio seguente parte da stringhe di date ISO, converte la colonna e assegna i due componenti estratti. Quindi stampa il DataFrame risultante con i valori numerici di anno e mese.
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
Se una colonna ha già un tipo datetime, salta la riga di conversione e applica direttamente le due proprietà. La conversione dipende dal fatto che i valori rappresentino date in un formato interpretabile da Pandas; prima di estrarre i componenti, normalizza le stringhe in formati diversi oppure analizzale esplicitamente. La proprietà del mese restituisce un numero: gennaio è rappresentato da 1, un valore utile per ordinamenti e confronti numerici.
Formattare anno e mese con strftime()
Usa strftime() quando il codice a valle richiede stringhe formattate invece di componenti numeriche. Con l’accessore .dt di Series, %Y formatta l’anno con quattro cifre e %m il mese con due. Per la data 2020-01-02, questi formati corrispondono alle stringhe 2020 e 01.
Questa variante usa la stessa conversione dei dati di input e aggiunge colonne di testo. La stringa del mese mantiene lo zero iniziale, utile per etichette o chiavi anno-mese. Poiché questi valori sono stringhe, convertili in numeri se ti servono per calcoli successivi o per un ordinamento numerico.
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 le proprietà numeriche .dt.year e .dt.month quando ti servono valori per calcoli aritmetici o confronti numerici. Usa strftime() quando conta il formato di presentazione o serve un mese a larghezza fissa, come 01. Entrambi gli approcci operano su valori di tipo datetime.
Estrarre mese e anno con DatetimeIndex.year e DatetimeIndex.month
Puoi anche racchiudere una Series datetime in pandas.DatetimeIndex e leggere gli attributi year e month. La documentazione di riferimento per DatetimeIndex descrive questo tipo di indice. Come l’accessore di Series, questi attributi restituiscono componenti numeriche, che possono essere assegnate alle colonne di un DataFrame in un solo passaggio.
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 quando un oggetto indice si adatta al resto del tuo flusso di lavoro; per una normale colonna Series, le proprietà .dt sono di solito la soluzione più diretta. I due approcci restituiscono valori numerici per anno e mese, mentre strftime() restituisce stringhe. In tutti i casi, assicurati prima che i dati di origine siano di tipo datetime. Questi esempi usano stringhe contenenti solo la data; se i timestamp includono fusi orari, considera quale fuso orario intendi usare, perché l’anno e il mese di calendario dipendono dalla data locale del timestamp.