HOWTO · Pandas
Comment extraire le mois et l'année séparément de la colonne Datetime dans Pandas
Extrayez les valeurs numériques d'année et de mois d'une colonne datetime Pandas avec l'accesseur .dt, ou formatez-les sous forme de chaînes avec strftime().
Sur cette page
Utilisez l’accesseur datetime d’une Series pour ajouter des colonnes distinctes pour l’année et le mois : dates.dt.year et dates.dt.month. Ces propriétés renvoient des composants numériques. Si la colonne source contient des chaînes représentant des dates, convertissez-les une seule fois avec pandas.to_datetime avant d’utiliser .dt. Choisissez strftime() si le résultat doit être du texte, par exemple un mois au format 01.
Extraire le mois et l’année avec Series.dt.year et Series.dt.month
L’accesseur .dt expose les propriétés datetime d’une Series Pandas. En particulier, pandas.Series.dt.year et pandas.Series.dt.month renvoient l’année et le mois sous forme de valeurs numériques ; ce sont des propriétés, il ne faut donc pas ajouter de parenthèses. La référence de l’année pour Series décrit la propriété year.
Convertissez la colonne d’entrée avec pandas.to_datetime lorsque ses valeurs sont des chaînes. L’exemple ci-dessous part de chaînes de dates au format ISO, convertit la colonne et affecte les deux composants extraits. Il convertit les chaînes de dates, affecte les valeurs numériques de l’année et du mois, puis affiche le DataFrame obtenu.
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 une colonne est déjà de type datetime, ignorez la ligne de conversion et appliquez directement les deux propriétés. L’analyse dépend de valeurs représentant des dates dans un format interprétable par Pandas ; normalisez les chaînes sources d’un autre format ou analysez-les explicitement avant d’en extraire les composants. La propriété du mois renvoie une valeur numérique : janvier est donc représenté par 1, ce qui est pratique pour le tri ou les comparaisons numériques.
Formater l’année et le mois avec strftime()
Utilisez strftime() si le code en aval a besoin de chaînes formatées plutôt que de composants numériques. Avec l’accesseur .dt d’une Series, %Y produit une année sur quatre chiffres et %m un mois sur deux chiffres. Pour la date 2020-01-02, ces formats correspondent aux chaînes 2020 et 01.
Cette version utilise la même conversion de l’entrée et ajoute des colonnes textuelles. La chaîne du mois conserve le zéro initial, ce qui est utile pour des libellés ou des clés année-mois. Comme ces valeurs sont des chaînes, convertissez-les en nombres si des calculs ultérieurs ou un tri numérique sont nécessaires.
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
Utilisez les propriétés numériques .dt.year et .dt.month lorsque vous avez besoin de valeurs pour des calculs arithmétiques ou des comparaisons numériques. Utilisez strftime() lorsque le format de présentation compte ou qu’un mois de largeur fixe, comme 01, est nécessaire. Les deux approches s’appliquent à des valeurs de type datetime.
Extraire le mois et l’année avec DatetimeIndex.year et DatetimeIndex.month
Vous pouvez aussi envelopper une Series datetime dans pandas.DatetimeIndex, puis lire ses attributs year et month. La référence de DatetimeIndex décrit ce type d’index. Comme l’accesseur de Series, ces attributs fournissent des composants numériques, qui peuvent être affectés aux colonnes d’un DataFrame en une seule étape.
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
Utilisez DatetimeIndex si un objet index s’intègre à votre flux de travail ; pour une colonne Series ordinaire, les propriétés .dt sont généralement l’expression la plus directe. Les deux approches produisent des valeurs numériques pour l’année et le mois, tandis que strftime() produit des chaînes. Dans chaque cas, assurez-vous d’abord que la source est de type datetime. Ces exemples utilisent des chaînes contenant uniquement des dates ; si les horodatages comportent des fuseaux horaires, tenez compte du fuseau voulu, car l’année et le mois calendaires dépendent de la date locale de l’horodatage dans ce fuseau.