{"id":4900,"date":"2026-10-14T18:01:19","date_gmt":"2026-10-14T18:01:19","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-extraire-le-mois-d-une-date-dans-pandas-avec-exemples\/"},"modified":"2026-10-14T18:01:19","modified_gmt":"2026-10-14T18:01:19","slug":"comment-extraire-le-mois-d-une-date-dans-pandas-avec-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-extraire-le-mois-d-une-date-dans-pandas-avec-exemples","title":{"rendered":"Comment extraire le mois d&rsquo;une date dans Pandas (avec exemples)"},"content":{"rendered":"<p>L&rsquo;analyse des s\u00e9ries temporelles constitue l&rsquo;un des piliers fondamentaux de la science des donn\u00e9es moderne, irriguant aussi bien les sciences \u00e9conomiques que la mod\u00e9lisation climatique, le marketing quantitatif ou la logistique industrielle. Au sein de cet \u00e9cosyst\u00e8me analytique, la biblioth\u00e8que <a rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\/\">Pandas<\/a> pour le langage Python s&rsquo;est impos\u00e9e comme le standard incontournable pour la manipulation, la transformation et le nettoyage des donn\u00e9es tabulaires. N\u00e9anmoins, l&rsquo;efficacit\u00e9 d&rsquo;une \u00e9tude longitudinale repose tr\u00e8s souvent sur la capacit\u00e9 du praticien \u00e0 d\u00e9sagr\u00e9ger un horodatage complexe en dimensions temporelles \u00e9l\u00e9mentaires et directement interpr\u00e9tables.<\/p>\n<p>L&rsquo;extraction du mois \u00e0 partir d&rsquo;une variable de type date repr\u00e9sente, \u00e0 cet \u00e9gard, une op\u00e9ration \u00e9l\u00e9mentaire mais extraordinairement r\u00e9currente dans les processus d&rsquo;ing\u00e9nierie des variables (<em>feature engineering<\/em>). Qu&rsquo;il s&rsquo;agisse d&rsquo;\u00e9valuer la saisonnalit\u00e9 des ventes au d\u00e9tail, de mesurer l&rsquo;impact des cycles budg\u00e9taires d&rsquo;entreprises ou de construire des regroupements statistiques coh\u00e9rents, l&rsquo;isolation de la composante mensuelle conditionne la pertinence des mod\u00e9lisations subs\u00e9quentes. Malgr\u00e9 son apparente simplicit\u00e9 syntaxique, cette t\u00e2che confronte fr\u00e9quemment les analystes \u00e0 des probl\u00e9matiques sous-jacentes complexes : h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 des types primitifs, gestion des horodatages corrompus ou lacunaires, surco\u00fbts computationnels li\u00e9s \u00e0 des it\u00e9rations malavis\u00e9es et disparit\u00e9s de conventions de formatage.<\/p>\n<p>Cet article propose une exploration m\u00e9thodique, exhaustive et rigoureuse des paradigmes d&rsquo;extraction du mois sous Pandas. En articulant th\u00e9orie de la structure de donn\u00e9es et applications pratiques, nous examinerons successivement les fondements conceptuels des objets temporels, l&rsquo;utilisation de l&rsquo;index <code>pd.DatetimeIndex<\/code> et de l&rsquo;accesseur vectoris\u00e9 <code>Series.dt<\/code>, la gestion des formats num\u00e9riques ou textuels, la cohabitation avec les valeurs manquantes, ainsi que l&rsquo;impact critique de ces op\u00e9rations sur les performances \u00e0 grande \u00e9chelle. Cette synth\u00e8se s&rsquo;adresse aux ing\u00e9nieurs de donn\u00e9es, analystes et chercheurs d\u00e9sireux d&rsquo;asseoir leurs traitements temporels sur des bases algorithmiques optimales et reproductibles.<\/p>\n<h2>1. Introduction aux structures temporelles et extraction de composantes dans Pandas<\/h2>\n<h3>1.1 La place des s\u00e9ries chronologiques dans l&rsquo;analyse de donn\u00e9es<\/h3>\n<p>Dans le paradigme contemporain de l&rsquo;analyse exploratoire et pr\u00e9dictive, la variable temporelle occupe une fonction structurante. Contrairement \u00e0 des attributs cat\u00e9goriels statiques, les horodatages portent en eux une continuit\u00e9 vectorielle et un ordre intrins\u00e8que qui dictent la dynamique des syst\u00e8mes observ\u00e9s. Les mod\u00e8les \u00e9conom\u00e9triques, tels que les processus autor\u00e9gressifs int\u00e9gr\u00e9s \u00e0 moyenne mobile (ARIMA) ou les architectures d&rsquo;apprentissage profond d\u00e9di\u00e9es aux s\u00e9quences, d\u00e9pendent intimement de la d\u00e9composition des signaux temporels en tendances s\u00e9culaires, fluctuations cycliques et variations saisonni\u00e8res.<\/p>\n<p>Or, pour appr\u00e9hender ces composantes de mani\u00e8re fine, l&rsquo;observateur ne peut se contenter d&rsquo;un enregistrement brut combinant de mani\u00e8re monolithique l&rsquo;ann\u00e9e, le mois, le jour, l&rsquo;heure et les fractions de seconde. Une date compl\u00e8te synth\u00e9tise une multiplicit\u00e9 d&rsquo;\u00e9chelles de temps qui doivent \u00eatre d\u00e9sagr\u00e9g\u00e9es pour devenir exploitables. La dimension mensuelle s&rsquo;av\u00e8re particuli\u00e8rement strat\u00e9gique, car elle correspond \u00e0 l&rsquo;unit\u00e9 de r\u00e9f\u00e9rence administrative, financi\u00e8re et m\u00e9t\u00e9orologique par excellence. C&rsquo;est \u00e0 l&rsquo;\u00e9chelle du mois que se mesurent les cl\u00f4tures comptables, les variations de la consommation des m\u00e9nages et les oscillations saisonni\u00e8res moyennes, faisant de l&rsquo;extraction de cette granularit\u00e9 un pr\u00e9alable analytique indispensable.<\/p>\n<h3>1.2 Pr\u00e9sentation de la probl\u00e9matique d&rsquo;extraction mensuelle<\/h3>\n<p>La d\u00e9composition d&rsquo;un horodatage pour en extraire le mois soul\u00e8ve une s\u00e9rie de d\u00e9fis techniques souvent sous-estim\u00e9s lors des phases exploratoires. La principale difficult\u00e9 r\u00e9side dans la variabilit\u00e9 morphologique des donn\u00e9es brutes issues des syst\u00e8mes transactionnels ou des lacs de donn\u00e9es. Les dates peuvent \u00eatre stock\u00e9es sous forme de cha\u00eenes de caract\u00e8res arbitraires, d&rsquo;entiers num\u00e9riques repr\u00e9sentant des \u00e9poques POSIX, ou d&rsquo;objets hybrides d\u00e9pourvus d&rsquo;informations de fuseau horaire explicites. Dans une telle h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9, isoler le mois n\u00e9cessite d&rsquo;abord une conversion rigoureuse vers un format typ\u00e9 et structur\u00e9.<\/p>\n<p>De surcro\u00eet, la nature m\u00eame de la dimension mensuelle impose des choix de repr\u00e9sentation analytique. Le mois doit-il \u00eatre encod\u00e9 comme un entier ordinal compris entre 1 et 12, garantissant une compatibilit\u00e9 arithm\u00e9tique imm\u00e9diate, ou sous la forme d&rsquo;un libell\u00e9 textuel pour des imp\u00e9ratifs de visualisation et de communication d\u00e9cisionnelle ? La transition conceptuelle d&rsquo;une cha\u00eene scalaire vers un objet temporel multidimensionnel implique la ma\u00eetrise des m\u00e9canismes internes du moteur de Pandas, afin d&rsquo;\u00e9viter les incoh\u00e9rences de segmentation statistique et les ruptures d&rsquo;alignement lors des jointures de tables.<\/p>\n<h3>1.3 Vue d&rsquo;ensemble des m\u00e9thodes disponibles dans l&rsquo;\u00e9cosyst\u00e8me Python<\/h3>\n<p>L&rsquo;\u00e9cosyst\u00e8me open-source articul\u00e9 autour du langage Python propose plusieurs strat\u00e9gies pour r\u00e9pondre \u00e0 cette probl\u00e9matique. D&rsquo;une part, les modules standards tels que <code>datetime<\/code> et <code>time<\/code> offrent des approches scalaires imp\u00e9ratives. Bien qu&rsquo;\u00e9l\u00e9gantes pour des scripts l\u00e9gers, ces fonctions natives r\u00e9v\u00e8lent des limitations r\u00e9dhibitoires d\u00e8s lors qu&rsquo;elles sont appliqu\u00e9es de mani\u00e8re na\u00efve \u00e0 des millions d&rsquo;enregistrements, provoquant des goulots d&rsquo;\u00e9tranglement majeurs dus au co\u00fbt d&rsquo;interpr\u00e9tation de la machine virtuelle.<\/p>\n<p>D&rsquo;autre part, la biblioth\u00e8que Pandas encapsule la puissance calculatoire de <a rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\/\">NumPy<\/a> pour fournir deux grandes abstractions vectoris\u00e9es : l&rsquo;instanciation explicite d&rsquo;un <code>pd.DatetimeIndex<\/code> et l&rsquo;usage idiomatique de l&rsquo;accesseur <code>Series.dt<\/code>. Ces interfaces permettent d&rsquo;appliquer des op\u00e9rations optimis\u00e9es en langage C sur l&rsquo;ensemble d&rsquo;un vecteur de donn\u00e9es temporelles, sans avoir recours \u00e0 des boucles Python explicites. La compr\u00e9hension comparative de ces deux approches constitue le socle technique sur lequel repose tout traitement de donn\u00e9es volumineuses et performant.<\/p>\n<h2>2. Pr\u00e9requis techniques et pr\u00e9paration de l&rsquo;environnement de travail<\/h2>\n<h3>2.1 Configuration des biblioth\u00e8ques fondamentales<\/h3>\n<p>Pour assurer la p\u00e9rennit\u00e9 algorithmique et la reproductibilit\u00e9 absolue des exp\u00e9rimentations pr\u00e9sent\u00e9es dans cette \u00e9tude, la mise en place d&rsquo;un environnement Python standardis\u00e9 s&rsquo;av\u00e8re indispensable. L&rsquo;installation conjointe des biblioth\u00e8ques Pandas et NumPy via le gestionnaire de paquets officiel garantit l&rsquo;acc\u00e8s aux optimisations bas niveau des calculs matriciels. Il est vivement conseill\u00e9 de travailler dans des environnements virtuels d\u00e9di\u00e9s afin d&rsquo;isoler les d\u00e9pendances logicielles et de pr\u00e9venir les conflits de versions entre paquets tiers.<\/p>\n<p>Au-del\u00e0 de la simple installation, la configuration des options globales du moteur d&rsquo;affichage de Pandas permet une inspection granulaire des structures temporelles. Par l&rsquo;interm\u00e9diaire de commandes de param\u00e9trage telles que <code>pd.set_option('display.max_columns', None)<\/code> et l&rsquo;ajustement du format d&rsquo;affichage des dates, l&rsquo;analyste s&rsquo;assure d&rsquo;une lisibilit\u00e9 maximale lors de l&rsquo;examen des colonnes nouvellement instanci\u00e9es, \u00e9cartant ainsi tout biais d&rsquo;interpr\u00e9tation li\u00e9 \u00e0 une troncature visuelle de la table de donn\u00e9es.<\/p>\n<h3>2.2 Typage des donn\u00e9es : objets cha\u00eene versus formats datetime<\/h3>\n<p>L&rsquo;une des sources d&rsquo;erreurs les plus courantes lors du traitement des dates r\u00e9side dans la confusion entre le type g\u00e9n\u00e9rique <code>object<\/code> et le type natif optimis\u00e9 <code>datetime64[ns]<\/code>. Lorsqu&rsquo;un fichier au format CSV ou JSON est charg\u00e9 en m\u00e9moire sans consigne explicite, les colonnes contenant des dates sont quasi syst\u00e9matiquement interpr\u00e9t\u00e9es comme des s\u00e9quences de cha\u00eenes de caract\u00e8res textuelles. Dans cette configuration, toute tentative d&rsquo;interrogation directe d&rsquo;une propri\u00e9t\u00e9 temporelle d\u00e9clenchera in\u00e9vitablement une lev\u00e9e d&rsquo;exception.<\/p>\n<p>Le type <code>datetime64[ns]<\/code> stocke chaque instant sous la forme d&rsquo;un entier sign\u00e9 de 64 bits repr\u00e9sentant le nombre de nanosecondes \u00e9coul\u00e9es depuis l&rsquo;\u00e9poque UNIX du 1er janvier 1970. Cette repr\u00e9sentation interne compacte permet non seulement une \u00e9conomie drastique de la m\u00e9moire vive, mais autorise \u00e9galement des op\u00e9rations arithm\u00e9tiques et des extractions de sous-composantes \u00e0 une vitesse inaccessible aux cha\u00eenes de caract\u00e8res. L&rsquo;inspection pr\u00e9alable des types \u00e0 l&rsquo;aide de l&rsquo;attribut <code>dtypes<\/code> d&rsquo;un DataFrame constitue d\u00e8s lors une \u00e9tape d&rsquo;audit obligatoire avant toute manipulation temporelle.<\/p>\n<h3>2.3 Construction d&rsquo;un jeu de donn\u00e9es de r\u00e9f\u00e9rence pour l&rsquo;\u00e9tude<\/h3>\n<p>Afin d&rsquo;ancrer les d\u00e9monstrations dans une r\u00e9alit\u00e9 applicative concr\u00e8te, nous initialisons un DataFrame repr\u00e9sentatif d&rsquo;une activit\u00e9 de commerce \u00e9lectronique. Ce jeu de donn\u00e9es synth\u00e9tique associe des identifiants de transactions, des montants de vente h\u00e9t\u00e9rog\u00e8nes et une s\u00e9rie d&rsquo;horodatages distribu\u00e9s sur diff\u00e9rents mois et ann\u00e9es, incluant volontairement des singularit\u00e9s calendaires telles que des fins de mois et des ann\u00e9es bissextiles.<\/p>\n<p>La structure tabulaire initiale est g\u00e9n\u00e9r\u00e9e de fa\u00e7on d\u00e9terministe en utilisant un dictionnaire d&rsquo;attributs converti via le constructeur <code>pd.DataFrame<\/code>. Ce jeu de donn\u00e9es sert de r\u00e9f\u00e9rentiel immuable tout au long de notre argumentation technique, permettant d&rsquo;observer en temps r\u00e9el les mutations de colonnes, l&rsquo;adjonction de variables mensuelles et l&rsquo;impact de chaque m\u00e9thode syntaxique sur la structure globale des m\u00e9tadonn\u00e9es du tableau.<\/p>\n<h2>3. M\u00e9thode fondamentale : Utilisation de pd.DatetimeIndex<\/h2>\n<h3>3.1 M\u00e9canique interne de DatetimeIndex<\/h3>\n<p>L&rsquo;objet <code>pd.DatetimeIndex<\/code> constitue une classe centrale dans l&rsquo;architecture interne de Pandas. Con\u00e7u initialement pour indexer les s\u00e9ries temporelles le long de l&rsquo;axe vertical d&rsquo;un DataFrame, il encapsule un tableau unidimensionnel de scalaires temporels hautement optimis\u00e9s. Lorsqu&rsquo;une colonne de dates lui est transmise, il ne se contente pas de dupliquer les valeurs ; il les projette dans une structure indicielle dot\u00e9e de m\u00e9tadonn\u00e9es calendaires pr\u00e9-calcul\u00e9es ou accessibles instantan\u00e9ment par masque binaire.<\/p>\n<p>La puissance de <code>pd.DatetimeIndex<\/code> provient de son interfa\u00e7age direct avec les routines C sous-jacentes de NumPy. L&rsquo;index g\u00e8re de mani\u00e8re native la fr\u00e9quence, le fuseau horaire et les d\u00e9calages d&rsquo;\u00e9poque sans surco\u00fbt d&rsquo;encapsulation. Lorsqu&rsquo;un analyste instancie un tel index \u00e0 partir d&rsquo;une colonne existante, il cr\u00e9e une passerelle directe vers un ensemble d&rsquo;attributs temporels vectoris\u00e9s, parmi lesquels la propri\u00e9t\u00e9 <code>month<\/code> figure au premier plan.<\/p>\n<h3>3.2 Syntaxe de base pour l&rsquo;extraction du mois<\/h3>\n<p>L&rsquo;extraction du mois via <code>pd.DatetimeIndex<\/code> repose sur une formulation syntaxique directe et lisible. En transmettant la s\u00e9rie temporelle cible comme argument du constructeur de l&rsquo;index, puis en interrogeant imm\u00e9diatement son attribut d\u00e9di\u00e9, l&rsquo;utilisateur obtient un tableau d&rsquo;entiers repr\u00e9sentant chaque mois calendaire :<\/p>\n<p><code>df['mois_vente'] = pd.DatetimeIndex(df['sales_date']).month<\/code><\/p>\n<p>Dans cette instruction, la m\u00e9thode convertit implicitement la s\u00e9quence de donn\u00e9es en un index temporel temporaire, dont l&rsquo;attribut <code>month<\/code> extrait les valeurs comprises entre 1 (pour janvier) et 12 (pour d\u00e9cembre). Cette nouvelle variable est alors assign\u00e9e sans friction \u00e0 une nouvelle colonne du DataFrame. Les types de retour g\u00e9n\u00e9r\u00e9s sont invariablement des entiers non sign\u00e9s ou sign\u00e9s de type <code>int32<\/code> ou <code>int64<\/code>, parfaitement adapt\u00e9s aux op\u00e9rations de filtrage arithm\u00e9tique ult\u00e9rieures.<\/p>\n<h3>3.3 Analyse pas \u00e0 pas du code et inspection des r\u00e9sultats<\/h3>\n<p>Lors de l&rsquo;\u00e9valuation de cette commande, le moteur d&rsquo;ex\u00e9cution proc\u00e8de \u00e0 une s\u00e9rie d&rsquo;op\u00e9rations s\u00e9quentielles en m\u00e9moire. D&rsquo;abord, la Series <code>df['sales_date']<\/code> est parcourue au niveau de ses pointeurs m\u00e9moire. Si la s\u00e9rie est d\u00e9j\u00e0 de type <code>datetime64[ns]<\/code>, le constructeur <code>pd.DatetimeIndex<\/code> se contente d&rsquo;une vue sans copie superficielle (<em>zero-copy view<\/em>), garantissant une allocation m\u00e9moire minimale.<\/p>\n<p>L&rsquo;interrogation de l&rsquo;attribut <code>.month<\/code> applique ensuite une division modulo calendaire vectoris\u00e9e pour d\u00e9river l&rsquo;ordinal mensuel correspondant \u00e0 chaque horodatage. L&rsquo;inspection du DataFrame r\u00e9sultant d\u00e9montre une correspondance bijective rigoureuse entre chaque horodatage d&rsquo;origine et la valeur enti\u00e8re ins\u00e9r\u00e9e dans la colonne cible. Cette m\u00e9thode brille par sa clart\u00e9 conceptuelle, bien qu&rsquo;elle n\u00e9cessite d&rsquo;envelopper explicitement la colonne cible dans un constructeur externe, ce qui peut rompre la fluidit\u00e9 d&rsquo;un pipeline de traitement continu.<\/p>\n<h2>4. Approche alternative et idiomatique : L&rsquo;accesseur .dt<\/h2>\n<h3>4.1 Fondements th\u00e9oriques de l&rsquo;accesseur temporel .dt<\/h3>\n<p>Pour offrir une exp\u00e9rience de programmation fluide et coh\u00e9rente avec les principes de la programmation orient\u00e9e objet, les concepteurs de Pandas ont introduit les accesseurs de s\u00e9ries. De m\u00eame que l&rsquo;accesseur <code>Series.str<\/code> mutualise les op\u00e9rations textuelles et que <code>Series.cat<\/code> supervise les variables cat\u00e9gorielles, l&rsquo;accesseur <code>Series.dt<\/code> centralise l&rsquo;ensemble des fonctionnalit\u00e9s relatives aux dimensions calendaires et temporelles.<\/p>\n<p>Th\u00e9oriquement, l&rsquo;accesseur <code>.dt<\/code> agit comme une passerelle d&rsquo;encapsulation (<em>wrapper<\/em>). Il expose les propri\u00e9t\u00e9s et m\u00e9thodes d&rsquo;un <code>pd.DatetimeIndex<\/code> directement sur une <code>Series<\/code> typ\u00e9e en date, sans contraindre le d\u00e9veloppeur \u00e0 instancier manuellement une nouvelle structure d&rsquo;index externe. Ce paradigme favorise le respect de la s\u00e9mantique tabulaire : les colonnes demeurent des colonnes, tout en b\u00e9n\u00e9ficiant de la richesse fonctionnelle des index de s\u00e9ries temporelles.<\/p>\n<h3>4.2 Mise en \u0153uvre pratique de Series.dt.month<\/h3>\n<p>La mise en \u0153uvre de cette m\u00e9thode constitue la pratique la plus idiomatique dans le code Python moderne. \u00c0 condition que la colonne cible ait pr\u00e9alablement \u00e9t\u00e9 convertie au format temporel ad\u00e9quat \u00e0 l&rsquo;aide de la fonction standard <code>pd.to_datetime<\/code>, l&rsquo;extraction de la composante mensuelle s&rsquo;op\u00e8re par une simple notation par point :<\/p>\n<p><code>df['sales_date'] = pd.to_datetime(df['sales_date'])<\/code><br \/>\n<code>df['mois_vente'] = df['sales_date'].dt.month<\/code><\/p>\n<p>Cette approche \u00e9limine toute ambigu\u00eft\u00e9 syntaxique. L&rsquo;appel \u00e0 <code>.dt.month<\/code> renvoie une nouvelle <code>Series<\/code> d&rsquo;entiers parfaitement align\u00e9e sur l&rsquo;index d&rsquo;origine du DataFrame h\u00f4te. La compacit\u00e9 de cette syntaxe s&rsquo;int\u00e8gre harmonieusement dans les environnements de d\u00e9veloppement interactifs comme Jupyter et s&rsquo;av\u00e8re particuli\u00e8rement lisible lors des revues de code entre pairs.<\/p>\n<h3>4.3 Comparaison structurelle entre DatetimeIndex et .dt<\/h3>\n<p>Bien que <code>pd.DatetimeIndex(df['col']).month<\/code> et <code>df['col'].dt.month<\/code> produisent des r\u00e9sultats rigoureusement identiques sur le plan arithm\u00e9tique, leurs implications conceptuelles diff\u00e8rent sensiblement. La premi\u00e8re m\u00e9thode traite la s\u00e9rie comme une s\u00e9quence g\u00e9n\u00e9rique transmise \u00e0 une classe indicielle autonome. Elle s&rsquo;av\u00e8re parfois l\u00e9g\u00e8rement plus directe si la s\u00e9rie d&rsquo;origine est encore au format cha\u00eene de caract\u00e8res, car le constructeur de l&rsquo;index int\u00e8gre sa propre logique de parsing temporel.<\/p>\n<p>En revanche, l&rsquo;accesseur <code>.dt<\/code> s&rsquo;int\u00e8gre naturellement dans les paradigmes modernes de cha\u00eenage de m\u00e9thodes (<em>method chaining<\/em>). Dans une s\u00e9quence d&rsquo;op\u00e9rations impliquant des filtres <code>.query()<\/code>, des r\u00e9assignations <code>.assign()<\/code> et des projections, l&rsquo;accesseur <code>.dt<\/code> s&rsquo;av\u00e8re nettement plus expressif :<\/p>\n<p><code>df = df.assign(mois=lambda x: x['sales_date'].dt.month)<\/code><\/p>\n<p>Pour cette raison d&rsquo;\u00e9l\u00e9gance architecturale et d&rsquo;alignement avec les standards officiels de Pandas, l&rsquo;accesseur <code>.dt<\/code> est g\u00e9n\u00e9ralement recommand\u00e9 par la communaut\u00e9 scientifique pour la production de pipelines d&rsquo;ing\u00e9nierie logicielle p\u00e9rennes.<\/p>\n<h2>5. Extraction sous diff\u00e9rents formats : Mois num\u00e9rique versus textuel<\/h2>\n<h3>5.1 Extraction num\u00e9rique standard (valeurs de 1 \u00e0 12)<\/h3>\n<p>L&rsquo;extraction d&rsquo;un mois sous sa forme num\u00e9rique enti\u00e8re constitue le standard de r\u00e9f\u00e9rence pour la mod\u00e9lisation statistique. Les entiers scalaires compris entre 1 et 12 permettent d&rsquo;ex\u00e9cuter des s\u00e9lections relationnelles imm\u00e9diates, telles que le filtrage d&rsquo;un trimestre particulier (par exemple, par le pr\u00e9dicat <code>df['mois'].between(1, 3)<\/code>) ou le calcul d&rsquo;\u00e9carts temporels simples sans n\u00e9cessiter de dictionnaires de correspondance externes.<\/p>\n<p>Cependant, dans certaines applications d&rsquo;exportation vers des syst\u00e8mes financiers ou des bases de donn\u00e9es relationnelles rigides, une repr\u00e9sentation textuelle \u00e0 deux chiffres avec z\u00e9ro initial (<em>zero-padding<\/em>) est imp\u00e9rativement exig\u00e9e (par exemple <code>01<\/code> pour janvier au lieu de <code>1<\/code>). Pour obtenir une telle structure sans alt\u00e9rer la coh\u00e9rence du typage, l&rsquo;analyste peut recourir \u00e0 la m\u00e9thode de formatage vectoris\u00e9 :<\/p>\n<p><code>df['mois_padded'] = df['sales_date'].dt.strftime('%m')<\/code><\/p>\n<p>Cette approche produit une s\u00e9rie de type <code>object<\/code> ou <code>string<\/code>, dont la longueur uniforme garantit une int\u00e9gration harmonieuse dans les identifiants composites, au prix n\u00e9anmoins d&rsquo;une perte des propri\u00e9t\u00e9s arithm\u00e9tiques pures propres aux types entiers.<\/p>\n<h3>5.2 Conversion en noms de mois complets ou abr\u00e9g\u00e9s avec strftime<\/h3>\n<p>Dans le cadre de la construction de tableaux de bord d\u00e9cisionnels, de visualisations graphiques via <a rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a> ou <a rel=\"noopener noreferrer\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a>, ou de rapports destin\u00e9s aux directions g\u00e9n\u00e9rales, la repr\u00e9sentation num\u00e9rique brute s&rsquo;av\u00e8re souvent aust\u00e8re. La conversion des ordinaux en d\u00e9signations textuelles compl\u00e8tes ou abr\u00e9g\u00e9es devient alors une exigence ergonomique majeure.<\/p>\n<p>L&rsquo;accesseur temporel propose \u00e0 cette fin la m\u00e9thode <code>Series.dt.strftime<\/code>, d\u00e9riv\u00e9e de la fonction classique du langage C standard. En mobilisant des sp\u00e9cificateurs de format formalis\u00e9s, l&rsquo;analyste pilote avec une pr\u00e9cision absolue la texture du libell\u00e9 extrait :<\/p>\n<ul>\n<li>Le sp\u00e9cificateur <code>%B<\/code> restitue le nom complet du mois (par exemple, <em>January<\/em> ou <em>Janvier<\/em> selon la configuration locale active).<\/li>\n<li>Le sp\u00e9cificateur <code>%b<\/code> g\u00e9n\u00e8re l&rsquo;abr\u00e9viation usuelle sur trois lettres (par exemple, <em>Jan<\/em> ou <em>F\u00e9v<\/em>).<\/li>\n<\/ul>\n<p>Cette transformation textuelle conf\u00e8re une lisibilit\u00e9 imm\u00e9diate aux axes de coordonn\u00e9es des graphiques. Il convient toutefois de souligner qu&rsquo;un tri alphab\u00e9tique appliqu\u00e9 sur des noms de mois textuels organisera ces derniers selon une logique lexicale arbitraire (Avril, Ao\u00fbt, D\u00e9cembre&#8230;) rompant irr\u00e9m\u00e9diablement la chronologie des observations, \u00e0 moins d&rsquo;assigner explicitement \u00e0 la s\u00e9rie un type cat\u00e9goriel ordonn\u00e9 (<code>CategoricalDtype<\/code>).<\/p>\n<h3>5.3 Gestion de la localisation linguistique des mois<\/h3>\n<p>La g\u00e9n\u00e9ration de libell\u00e9s mensuels alphab\u00e9tiques soul\u00e8ve imm\u00e9diatement la question de la localisation linguistique (<em>locale<\/em>). Par d\u00e9faut, la machine virtuelle Python et la biblioth\u00e8que Pandas adoptent l&rsquo;environnement linguistique du syst\u00e8me d&rsquo;exploitation h\u00f4te ou se calent sur le standard anglo-saxon <code>C \/ POSIX<\/code>. En cons\u00e9quence, un appel standard \u00e0 <code>strftime('%B')<\/code> produira syst\u00e9matiquement des noms de mois anglophones.<\/p>\n<p>Pour forcer la restitution des mois en langue fran\u00e7aise ou dans toute autre d\u00e9clinaison linguistique, il s&rsquo;av\u00e8re indispensable d&rsquo;interagir avec le module standard <code>locale<\/code> de Python :<\/p>\n<p><code>import locale<\/code><br \/>\n<code>locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')<\/code><\/p>\n<p>Cette manipulation modifie globalement le comportement des formats temporels du processus d&rsquo;ex\u00e9cution. Il convient n\u00e9anmoins de manipuler ce param\u00e8tre avec une extr\u00eame vigilance dans les environnements distribu\u00e9s, conteneuris\u00e9s (Docker) ou multithreads, car la disponibilit\u00e9 des paquetages linguistiques d\u00e9pend \u00e9troitement des biblioth\u00e8ques install\u00e9es au niveau du syst\u00e8me d&rsquo;exploitation sous-jacent. De plus, la gestion stricte de l&rsquo;encodage des caract\u00e8res accentu\u00e9s (tels que le mois d&rsquo;ao\u00fbt ou de f\u00e9vrier) doit \u00eatre garantie pour pr\u00e9venir tout incident d&rsquo;encodage lors de l&rsquo;\u00e9criture des fichiers finaux.<\/p>\n<h2>6. Extraction conjointe d&rsquo;autres attributs temporels (Ann\u00e9e, Jour)<\/h2>\n<h3>6.1 Extraction conjointe du mois et de l&rsquo;ann\u00e9e<\/h3>\n<p>Dans la quasi-totalit\u00e9 des \u00e9tudes empiriques portant sur des historiques s&rsquo;\u00e9tendant au-del\u00e0 de douze mois cons\u00e9cutifs, l&rsquo;isolement du seul attribut mensuel engendre une ambigu\u00eft\u00e9 temporelle majeure. Le mois de mars 2021 se trouve agr\u00e9g\u00e9 indiff\u00e9remment avec le mois de mars 2024, provoquant un ph\u00e9nom\u00e8ne de t\u00e9lescopage des donn\u00e9es hautement pr\u00e9judiciable aux analyses d&rsquo;\u00e9volution pluriannuelle.<\/p>\n<p>Pour d\u00e9sambigu\u00efser les m\u00e9triques observ\u00e9es, l&rsquo;ing\u00e9nierie des variables requiert l&rsquo;extraction conjointe de la composante annuelle en parall\u00e8le du mois :<\/p>\n<p><code>df['annee'] = df['sales_date'].dt.year<\/code><br \/>\n<code>df['mois'] = df['sales_date'].dt.month<\/code><\/p>\n<p>Cette d\u00e9composition multivari\u00e9e permet de conserver une ind\u00e9pendance compl\u00e8te des descripteurs scalaires. L&rsquo;analyste pr\u00e9serve ainsi la possibilit\u00e9 d&rsquo;agr\u00e9ger ses observations \u00e0 l&rsquo;\u00e9chelle globale de l&rsquo;ann\u00e9e, ou de croiser ult\u00e9rieurement l&rsquo;ann\u00e9e et le mois au sein d&rsquo;index hi\u00e9rarchiques (<em>MultiIndex<\/em>) lors d&rsquo;op\u00e9rations statistiques avanc\u00e9es.<\/p>\n<h3>6.2 Cr\u00e9ation d&rsquo;identifiants de p\u00e9riode annuelle-mensuelle (PeriodIndex)<\/h3>\n<p>Lorsque l&rsquo;objectif analytique consiste \u00e0 caract\u00e9riser un intervalle temporel continu plut\u00f4t qu&rsquo;un point infinit\u00e9simal sur l&rsquo;axe du temps, Pandas offre une structure conceptuelle sup\u00e9rieure : l&rsquo;objet <code>Period<\/code> et son conteneur matriciel associ\u00e9 <code>pd.PeriodIndex<\/code>. Contrairement \u00e0 un horodatage (<code>Timestamp<\/code>) qui repr\u00e9sente une nanoseconde singuli\u00e8re, une p\u00e9riode mod\u00e9lise une dur\u00e9e d\u00e9finie.<\/p>\n<p>L&rsquo;utilisation de la m\u00e9thode <code>.dt.to_period('M')<\/code> convertit instantan\u00e9ment une s\u00e9quence de dates en p\u00e9riodes mensuelles normalis\u00e9es :<\/p>\n<p><code>df['periode_mensuelle'] = df['sales_date'].dt.to_period('M')<\/code><\/p>\n<p>Les donn\u00e9es r\u00e9sultantes adoptent le format standardis\u00e9 <code>YYYY-MM<\/code> (par exemple, <code>2023-04<\/code>). Cette approche pr\u00e9sente un avantage d\u00e9terminant face \u00e0 une simple concat\u00e9nation de cha\u00eenes de caract\u00e8res : l&rsquo;objet <code>PeriodIndex<\/code> conserve des propri\u00e9t\u00e9s arithm\u00e9tiques temporelles natives. Il devient trivial d&rsquo;ajouter ou de soustraire un nombre arbitraire de mois via de simples additions scalaires (<code>df['periode_mensuelle'] + 1<\/code>), tout en garantissant un tri chronologique infaillible lors des op\u00e9rations de restitution.<\/p>\n<h3>6.3 D\u00e9composition multivari\u00e9e compl\u00e8te d&rsquo;un horodatage<\/h3>\n<p>Dans le cadre de la mod\u00e9lisation statistique avanc\u00e9e et de l&rsquo;apprentissage automatique, enrichir une table brute par une d\u00e9composition temporelle exhaustive constitue l&rsquo;une des techniques de pr\u00e9traitement les plus performantes. En d\u00e9clinant un simple horodatage en une multiplicit\u00e9 d&rsquo;attributs discrets, l&rsquo;algorithme acc\u00e8de \u00e0 diff\u00e9rents niveaux de p\u00e9riodicit\u00e9 sans n\u00e9cessiter de co\u00fbteuses d\u00e9ductions param\u00e9triques.<\/p>\n<p>Un pipeline de transformation typique d\u00e9ploiera ainsi de mani\u00e8re coordonn\u00e9e une constellation d&rsquo;accesseurs compl\u00e9mentaires :<\/p>\n<ul>\n<li><code>df['jour'] = df['sales_date'].dt.day<\/code> : Extraction du jour du mois (1 \u00e0 31).<\/li>\n<li><code>df['jour_semaine'] = df['sales_date'].dt.dayofweek<\/code> : Extraction de l&rsquo;ordinal du jour de la semaine (0 pour lundi \u00e0 6 pour dimanche).<\/li>\n<li><code>df['semaine_annee'] = df['sales_date'].dt.isocalendar().week<\/code> : Calcul de la semaine selon la norme internationale ISO 8601.<\/li>\n<li><code>df['trimestre'] = df['sales_date'].dt.quarter<\/code> : D\u00e9termination du trimestre \u00e9conomique (1 \u00e0 4).<\/li>\n<\/ul>\n<p>La cr\u00e9ation de cette matrice dimensionnelle enrichit consid\u00e9rablement l&rsquo;espace des variables explicatives. Elle facilite notamment l&rsquo;apprentissage de motifs cycliques intrajournaliers ou saisonniers par des mod\u00e8les \u00e0 arbres de d\u00e9cision (tels que XGBoost ou LightGBM), d\u00e9montrant l&rsquo;importance de ma\u00eetriser l&rsquo;ensemble des ramifications fonctionnelles d\u00e9riv\u00e9es de l&rsquo;accesseur temporel de Pandas.<\/p>\n<h2>7. Gestion rigoureuse des valeurs manquantes et anomalies temporelles<\/h2>\n<h3>7.1 Comportement face aux valeurs nulles (NaN et NaT)<\/h3>\n<p>Dans les environnements industriels, les donn\u00e9es brutes parviennent rarement aux analystes dans un \u00e9tat d&rsquo;int\u00e9grit\u00e9 absolue. Les flux transactionnels comportent quasi syst\u00e9matiquement des valeurs manquantes r\u00e9sultant d&rsquo;erreurs de transmission r\u00e9seau, de pannes de capteurs ou de jointures externes incompl\u00e8tes. Dans l&rsquo;\u00e9cosyst\u00e8me Pandas, le traitement de l&rsquo;absence de donn\u00e9es temporelles est mat\u00e9rialis\u00e9 par un objet singulier : <code>pd.NaT<\/code> (acronyme de <em>Not a Time<\/em>).<\/p>\n<p>Contrairement au traditionnel <code>np.nan<\/code> utilis\u00e9 pour les s\u00e9ries \u00e0 virgule flottante ou textuelles, <code>pd.NaT<\/code> est polymorphe et s&rsquo;int\u00e8gre harmonieusement dans les structures <code>datetime64[ns]<\/code>. Lorsqu&rsquo;une extraction mensuelle est sollicit\u00e9e via <code>.dt.month<\/code> ou <code>pd.DatetimeIndex<\/code> sur une s\u00e9rie constell\u00e9e de valeurs manquantes, le moteur de calcul n&rsquo;interrompt pas le processus par une lev\u00e9e d&rsquo;exception. Il propage silencieusement la lacune temporelle en assignant une valeur ind\u00e9termin\u00e9e \u00e0 l&rsquo;enregistrement correspondant.<\/p>\n<h3>7.2 Strat\u00e9gies d&rsquo;imputation et de nettoyage pr\u00e9-extraction<\/h3>\n<p>Bien que la tol\u00e9rance aux valeurs nulles permette l&rsquo;ex\u00e9cution sans plantage de l&rsquo;algorithme, la pr\u00e9sence de valeurs ind\u00e9termin\u00e9es complique substantiellement les phases aval de l&rsquo;analyse, notamment lors des regroupements statistiques ou des exports de fichiers typ\u00e9s. Il est par cons\u00e9quent imp\u00e9ratif de mettre en place une strat\u00e9gie de traitement des anomalies avant d&rsquo;engager l&rsquo;extraction du mois.<\/p>\n<p>L&rsquo;analyste dispose de plusieurs leviers compl\u00e9mentaires :<\/p>\n<ul>\n<li><strong>Le filtrage s\u00e9lectif :<\/strong> L&rsquo;utilisation du pr\u00e9dicat <code>df['sales_date'].notna()<\/code> permet d&rsquo;\u00e9carter purement et simplement les lignes corrompues pour concentrer l&rsquo;analyse sur un sous-ensemble int\u00e8gre.<\/li>\n<li><strong>L&rsquo;imputation directionnelle :<\/strong> Dans le cadre de donn\u00e9es temporelles denses, l&rsquo;application d&rsquo;un remplissage vers l&rsquo;avant (<code>df['sales_date'].ffill()<\/code>) ou vers l&rsquo;arri\u00e8re (<code>bfill()<\/code>) substitue la valeur manquante par l&rsquo;horodatage valide le plus proche chronologiquement.<\/li>\n<li><strong>L&rsquo;imputation par borne arbitraire :<\/strong> L&rsquo;assignation d&rsquo;une date sentinelle (par exemple <code>1970-01-01<\/code>) via la m\u00e9thode <code>fillna()<\/code> garantit le maintien du typage temporel tout en balisant explicitement les donn\u00e9es artificielles.<\/li>\n<\/ul>\n<h3>7.3 Typage r\u00e9sultant et contraintes des entiers avec support Nullable<\/h3>\n<p>L&rsquo;un des comportements historiques les plus d\u00e9routants de Pandas r\u00e9side dans la mutation automatique de type induite par la pr\u00e9sence d&rsquo;une valeur manquante. Lorsqu&rsquo;une s\u00e9rie d&rsquo;entiers temporels (normalement typ\u00e9e en <code>int64<\/code>) incorpore un <code>pd.NaT<\/code>, l&rsquo;ancien moteur de stockage de NumPy se trouve dans l&rsquo;incapacit\u00e9 technique d&rsquo;associer une valeur nulle \u00e0 un entier natif. Par cons\u00e9quent, la totalit\u00e9 de la colonne est implicitement convertie en nombres \u00e0 virgule flottante (<code>float64<\/code>), transformant un mois de janvier repr\u00e9sent\u00e9 par <code>1<\/code> en <code>1.0<\/code>.<\/p>\n<p>Pour pallier cette d\u00e9gradation structurelle, les versions modernes de Pandas introduisent des types d&rsquo;entiers nullables, formalis\u00e9s par la syntaxe de majuscule <code>Int64<\/code>. En appliquant explicitement un transtypage lors de l&rsquo;extraction :<\/p>\n<p><code>df['mois'] = df['sales_date'].dt.month.astype('Int64')<\/code><\/p>\n<p>l&rsquo;ing\u00e9nieur de donn\u00e9es pr\u00e9serve rigoureusement la nature enti\u00e8re des mois existants tout en accueillant les anomalies sous la forme de valeurs <code>&lt;NA&gt;<\/code> standardis\u00e9es, sans alt\u00e9ration vers le format flottant.<\/p>\n<h2>8. Conversion pr\u00e9alable des donn\u00e9es textuelles en objets DateTime<\/h2>\n<h3>8.1 Utilisation de pd.to_datetime et parsing robuste<\/h3>\n<p>Dans une cha\u00eene de traitement standard (ETL), l&rsquo;\u00e9tape pr\u00e9liminaire absolue conditionnant le succ\u00e8s de l&rsquo;extraction mensuelle est la m\u00e9tamorphose de cha\u00eenes de caract\u00e8res brutes en v\u00e9ritables instances d&rsquo;horodatages. La fonction <code>pd.to_datetime<\/code> constitue l&rsquo;outil polyvalent con\u00e7u \u00e0 cette fin au sein de l&rsquo;\u00e9cosyst\u00e8me Pandas. Face \u00e0 des cha\u00eenes format\u00e9es selon la norme internationale ISO 8601 (telles que <code>2023-05-14T15:30:00<\/code>), le moteur d&rsquo;inf\u00e9rence parvient \u00e0 d\u00e9duire le sch\u00e9ma temporel de mani\u00e8re totalement transparente.<\/p>\n<p>Cependant, l&rsquo;inf\u00e9rence automatique pr\u00e9sente un double inconv\u00e9nient : elle induit une p\u00e9nalit\u00e9 computationnelle substantielle li\u00e9e \u00e0 l&rsquo;analyse heuristique des cha\u00eenes, et elle expose l&rsquo;analyse \u00e0 des ambigu\u00eft\u00e9s critiques, notamment l&rsquo;inversion r\u00e9currente entre le quanti\u00e8me journalier et l&rsquo;ordinal mensuel (confusion entre le format am\u00e9ricain <code>MM\/DD\/YYYY<\/code> et le format europ\u00e9en <code>DD\/MM\/YYYY<\/code>). Pour neutraliser ces risques, il est fondamental de sp\u00e9cifier explicitement le patron de formatage via l&rsquo;argument <code>format<\/code> :<\/p>\n<p><code>df['sales_date'] = pd.to_datetime(df['sales_date'], format='%Y-%m-%d')<\/code><\/p>\n<p>Cette explicitation court-circuite les algorithmes d&rsquo;estimation statistique et acc\u00e9l\u00e8re l&rsquo;ingestion de mani\u00e8re spectaculaire tout en assurant une interpr\u00e9tation univoque de chaque segment temporel.<\/p>\n<h3>8.2 R\u00e9solution des erreurs de parsing temporel<\/h3>\n<p>L&rsquo;ingestion de flux de donn\u00e9es h\u00e9t\u00e9rog\u00e8nes expose fr\u00e9quemment le script \u00e0 des enregistrements corrompus contenant des caract\u00e8res alphanum\u00e9riques invalides, des cha\u00eenes tronqu\u00e9es ou des d\u00e9nominations impossibles (telles qu&rsquo;un pr\u00e9tendu 31 f\u00e9vrier). Par d\u00e9faut, <code>pd.to_datetime<\/code> r\u00e9agit avec s\u00e9v\u00e9rit\u00e9 face \u00e0 de telles anomalies en interrompant le traitement par l&rsquo;\u00e9mission d&rsquo;une exception de type <code>ValueError<\/code> (comportement gouvern\u00e9 par <code>errors='raise'<\/code>).<\/p>\n<p>Pour maintenir la r\u00e9silience d&rsquo;un pipeline automatis\u00e9, le param\u00e8tre <code>errors<\/code> autorise des comportements alternatifs d\u00e9terminants :<\/p>\n<ul>\n<li><code>errors='coerce'<\/code> : Cette option ordonne au moteur de conversion d&rsquo;intercepter toute impossibilit\u00e9 structurelle et de substituer silencieusement la valeur fautive par un marqueur temporel manquant <code>pd.NaT<\/code>. Cette approche s&rsquo;av\u00e8re la plus robuste pour assainir des bases volumineuses tout en poursuivant le calcul vectoris\u00e9.<\/li>\n<li><code>errors='ignore'<\/code> : Historiquement disponible pour laisser intacte la valeur d&rsquo;origine en cas d&rsquo;\u00e9chec, ce r\u00e9glage est d\u00e9sormais r\u00e9prouv\u00e9 dans les versions contemporaines de Pandas car il maintient la colonne dans un type hybride <code>object<\/code> hautement instable pour les op\u00e9rations subs\u00e9quentes.<\/li>\n<\/ul>\n<p>L&rsquo;audit post-conversion s&rsquo;effectue alors ais\u00e9ment en requ\u00eatant les lignes ayant g\u00e9n\u00e9r\u00e9 des valeurs nulles coerc\u00e9es, facilitant l&rsquo;isolement et la rem\u00e9diation des anomalies en amont.<\/p>\n<h3>8.3 Traitement des formats h\u00e9t\u00e9rog\u00e8nes dans une m\u00eame colonne<\/h3>\n<p>Une complexit\u00e9 technique sup\u00e9rieure survient lorsqu&rsquo;une m\u00eame colonne consolide des formats typographiques divergents, situation typique lors de la fusion non standardis\u00e9e de plusieurs bases historiques. Une partie des observations peut suivre une typologie <code>DD\/MM\/YYYY<\/code> tandis qu&rsquo;une autre adopte la norme <code>YYYY-MM-DD<\/code> ou m\u00eame des horodatages UNIX num\u00e9riques.<\/p>\n<p>Dans une telle configuration, une sp\u00e9cification rigide d&rsquo;un format unique provoquera une conversion erron\u00e9e massive vers des <code>NaT<\/code>. Une premi\u00e8re r\u00e9ponse consiste \u00e0 exploiter l&rsquo;argument <code>format='mixed'<\/code> introduit dans les versions r\u00e9centes de Pandas, qui instruit le parseur d&rsquo;analyser chaque ligne de fa\u00e7on autonome sans bloquer globalement le processus. Si la variabilit\u00e9 morphologique outrepasse les capacit\u00e9s de d\u00e9tection heuristique, il devient n\u00e9cessaire d&rsquo;orchestrer un nettoyage par expressions r\u00e9guli\u00e8res (<em>regex<\/em>) en amont, ou de partitionner la table selon la typologie des cha\u00eenes avant d&rsquo;appliquer des conversions sp\u00e9cialis\u00e9es par sous-ensemble.<\/p>\n<h2>9. \u00c9valuation des performances et optimisation sur de volumineux jeux de donn\u00e9es<\/h2>\n<h3>9.1 Benchmark de vitesse : DatetimeIndex versus dt.month versus boucles<\/h3>\n<p>L&rsquo;ing\u00e9nierie de donn\u00e9es contemporaine impose des exigences strictes en mati\u00e8re de temps de calcul, singuli\u00e8rement lorsqu&rsquo;il s&rsquo;agit d&rsquo;ing\u00e9rer des flux continus ou des volumes historiques s&rsquo;\u00e9levant \u00e0 des dizaines de millions d&rsquo;enregistrements. Une \u00e9valuation quantitative rigoureuse d\u00e9montre des \u00e9carts de vitesse vertigineux entre les diff\u00e9rents modes d&rsquo;extraction mensuelle sous Python.<\/p>\n<p>L&rsquo;usage d&rsquo;une boucle it\u00e9rative imp\u00e9rative, telle que l&rsquo;it\u00e9ration ligne par ligne via la m\u00e9thode <code>df.iterrows()<\/code> combin\u00e9e \u00e0 des fonctions scalaires Python, repr\u00e9sente l&rsquo;antith\u00e8se absolue de l&rsquo;efficacit\u00e9 logicielle. Cette approche d\u00e9sactive l&rsquo;ensemble des m\u00e9canismes d&rsquo;optimisation du mat\u00e9riel sous-jacent, subit la p\u00e9nalit\u00e9 de cr\u00e9ation de tuples interm\u00e9diaires \u00e0 chaque \u00e9tape et engendre un temps d&rsquo;ex\u00e9cution souvent des centaines de fois sup\u00e9rieur \u00e0 celui des m\u00e9thodes vectoris\u00e9es.<\/p>\n<p>En revanche, la confrontation exp\u00e9rimentale entre <code>pd.DatetimeIndex(df['sales_date']).month<\/code> et <code>df['sales_date'].dt.month<\/code> r\u00e9v\u00e8le des performances remarquablement proches et tr\u00e8s \u00e9lev\u00e9es, toutes deux tirant parti de routines \u00e9crites en C compil\u00e9. Toutefois, lorsque la colonne d&rsquo;origine est d\u00e9j\u00e0 typ\u00e9e en <code>datetime64[ns]<\/code>, l&rsquo;accesseur <code>.dt.month<\/code> \u00e9limine la charge d&rsquo;instanciation de l&rsquo;enveloppe d&rsquo;index, offrant ainsi une efficacit\u00e9 l\u00e9g\u00e8rement sup\u00e9rieure en termes de cycles CPU purs.<\/p>\n<h3>9.2 Efficacit\u00e9 m\u00e9moire et vectorisation sous Pandas<\/h3>\n<p>Au-del\u00e0 de la latence temporelle, la consommation de la m\u00e9moire vive (RAM) constitue un facteur critique de dimensionnement d&rsquo;infrastructure. Le principe fondamental de la vectorisation sous Pandas r\u00e9side dans le regroupement contigu des donn\u00e9es au sein de blocs m\u00e9moires \u00e9l\u00e9mentaires g\u00e9r\u00e9s par NumPy. Lorsqu&rsquo;une op\u00e9ration d&rsquo;extraction est sollicit\u00e9e, les instructions du processeur peuvent s&rsquo;appliquer simultan\u00e9ment sur des vecteurs entiers de registres via les jeux d&rsquo;instructions SIMD (<em>Single Instruction, Multiple Data<\/em>).<\/p>\n<p>Par d\u00e9faut, l&rsquo;extraction du mois g\u00e9n\u00e8re un conteneur d&rsquo;entiers sign\u00e9s cod\u00e9s sur 64 bits (<code>int64<\/code>), n\u00e9cessitant l&rsquo;allocation de 8 octets pour chaque ligne du tableau. Or, les ordinaux mensuels \u00e9tant strictement born\u00e9s par l&rsquo;intervalle ferm\u00e9 [1, 12], une telle allocation s&rsquo;av\u00e8re manifestement surdimensionn\u00e9e. Par un sous-typage rigoureux vers un entier non sign\u00e9 de 8 bits :<\/p>\n<p><code>df['mois'] = df['sales_date'].dt.month.astype('uint8')<\/code><\/p>\n<p>l&rsquo;analyste r\u00e9duit l&#8217;empreinte m\u00e9moire de la colonne cible d&rsquo;un facteur huit (un seul octet par valeur), pr\u00e9venant ainsi les erreurs critiques de saturation m\u00e9moire (<em>Out-Of-Memory<\/em>) lors des jointures ult\u00e9rieures sur des tables massives.<\/p>\n<h3>9.3 Bonnes pratiques pour l&rsquo;\u00e9chelle industrielle<\/h3>\n<p>Pour industrialiser le traitement de s\u00e9ries chronologiques massives, l&rsquo;ordonnancement des transformations doit se conformer \u00e0 une architecture d&rsquo;ex\u00e9cution rigoureuse. La premi\u00e8re bonne pratique dicte de ne jamais diff\u00e9rer la conversion en type temporel : celle-ci doit intervenir d\u00e8s la phase d&rsquo;ingestion (via les arguments <code>parse_dates<\/code> des lecteurs d&rsquo;E\/S tels que <code>pd.read_csv<\/code> ou <code>pd.read_parquet<\/code>).<\/p>\n<p>La seconde recommandation concerne la r\u00e9duction des copies d\u00e9fensives en m\u00e9moire. L&rsquo;usage r\u00e9current de la r\u00e9affectation sans cr\u00e9ation explicite de nouveaux DataFrames interm\u00e9diaires et le recours \u00e0 la s\u00e9lection de colonnes restreintes minimisent l&#8217;empreinte logicielle. Enfin, d\u00e8s lors que les donn\u00e9es franchissent le cap des dizaines de gigaoctets, exc\u00e9dant la capacit\u00e9 de m\u00e9moire vive d&rsquo;un n\u0153ud unique, il devient imp\u00e9ratif de transposer ces syntaxes vers des moteurs d&rsquo;ex\u00e9cution distribu\u00e9s ou paresseux (<em>lazy evaluation<\/em>) tels que <a rel=\"noopener noreferrer\" href=\"https:\/\/pola.rs\/\">Polars<\/a> ou <a rel=\"noopener noreferrer\" href=\"https:\/\/www.dask.org\/\">Dask<\/a>, dont les API r\u00e9pliquent tr\u00e8s fid\u00e8lement l&rsquo;accesseur temporel de Pandas tout en parall\u00e9lisant les calculs sur l&rsquo;ensemble des c\u0153urs de calcul disponibles.<\/p>\n<h2>10. Applications analytiques et agr\u00e9gations group\u00e9es par mois<\/h2>\n<h3>10.1 Regroupement statistique (groupby) bas\u00e9 sur le mois extrait<\/h3>\n<p>L&rsquo;extraction isol\u00e9e d&rsquo;un composant temporel prend tout son sens lorsqu&rsquo;elle sert de cl\u00e9 de partitionnement pour des op\u00e9rations de r\u00e9duction statistique. Le paradigme <em>Split-Apply-Combine<\/em>, formalis\u00e9 dans l&rsquo;architecture de Pandas par la m\u00e9thode <code>groupby<\/code>, permet d&rsquo;agr\u00e9ger les indicateurs d&rsquo;activit\u00e9 en fonction de la dimension mensuelle.<\/p>\n<p>Une fois la colonne <code>mois<\/code> adjointe au tableau de donn\u00e9es, le calcul d&rsquo;agr\u00e9gats tels que la somme des transactions, le panier moyen ou l&rsquo;\u00e9cart-type de la distribution s&rsquo;op\u00e8re par une syntaxe limpide :<\/p>\n<p><code>synthese_mensuelle = df.groupby('mois')['montant'].agg(['count', 'mean', 'sum'])<\/code><\/p>\n<p>Il importe toutefois de mentionner une alternative native hautement performante : l&rsquo;utilisation de la classe <code>pd.Grouper<\/code>. Au lieu de mat\u00e9rialiser physiquement une nouvelle colonne dans le sch\u00e9ma de la table, l&rsquo;analyste peut instruire le moteur de regroupement d&rsquo;agr\u00e9ger directement les donn\u00e9es selon une fr\u00e9quence mensuelle pr\u00e9d\u00e9finie :<\/p>\n<p><code>df.groupby(pd.Grouper(key='sales_date', freq='ME'))['montant'].sum()<\/code><\/p>\n<p>Cette seconde approche \u00e9vite l&rsquo;allocation structurelle d&rsquo;une colonne interm\u00e9diaire et lie intrins\u00e8quement l&rsquo;agr\u00e9gation \u00e0 la chronologie calendaire compl\u00e8te (ann\u00e9e et mois associ\u00e9s).<\/p>\n<h3>10.2 Calculs de saisonnalit\u00e9 et m\u00e9triques p\u00e9riodiques<\/h3>\n<p>L&rsquo;extraction exclusive de l&rsquo;ordinal mensuel (de 1 \u00e0 12), affranchi de son ancrage annuel, constitue l&rsquo;instrument privil\u00e9gi\u00e9 pour caract\u00e9riser la saisonnalit\u00e9 empirique d&rsquo;une activit\u00e9 \u00e9conomique. En agr\u00e9geant l&rsquo;ensemble des ventes r\u00e9alis\u00e9es au cours de tous les mois de janvier document\u00e9s dans un historique d\u00e9cennal, l&rsquo;\u00e9conom\u00e8tre neutralise les fluctuations conjoncturelles de court terme pour isoler le profil sous-jacent de la demande.<\/p>\n<p>\u00c0 partir de cette consolidation, il devient ais\u00e9 de d\u00e9river des indices de saisonnalit\u00e9 normalis\u00e9s. En divisant la moyenne observ\u00e9e d&rsquo;un mois sp\u00e9cifique par la moyenne g\u00e9n\u00e9rale de l&rsquo;ensemble des observations annuelles, on obtient un coefficient multiplicateur traduisant le surcro\u00eet ou le d\u00e9ficit structurel d&rsquo;activit\u00e9 inh\u00e9rent \u00e0 cette p\u00e9riode. Ces coefficients constituent le socle de calibrage des m\u00e9thodes de d\u00e9saisonnalisation classiques, telles que l&rsquo;algorithme X-13ARIMA-SEATS ou les d\u00e9compositions par r\u00e9gression locale pond\u00e9r\u00e9e (LOESS\/STL).<\/p>\n<h3>10.3 Pivotement et r\u00e9organisation des donn\u00e9es temporelles<\/h3>\n<p>La restitution synth\u00e9tique d&rsquo;indicateurs mensuels impose tr\u00e8s fr\u00e9quemment une restructuration dimensionnelle des donn\u00e9es depuis un format long (vertical) vers un format large (matriciel). L&rsquo;op\u00e9ration de pivotement, mat\u00e9rialis\u00e9e par la fonction <code>pivot_table<\/code> sous Pandas, permet de croiser de multiples descripteurs temporels pour fabriquer des repr\u00e9sentations tabulaires directement assimilables par les d\u00e9cideurs.<\/p>\n<p>En assignant l&rsquo;ann\u00e9e calendaire le long des lignes (index) et l&rsquo;ordinal mensuel le long des colonnes, le DataFrame se m\u00e9tamorphose en une grille matricielle \u00e9l\u00e9gante :<\/p>\n<p><code>matrice_ventes = df.pivot_table(index='annee', columns='mois', values='montant', aggfunc='sum')<\/code><\/p>\n<p>Cette typologie de tableau crois\u00e9 dynamique met imm\u00e9diatement en exergue les ruptures de tendance interannuelles tout en offrant un cadre de lecture imm\u00e9diat pour cartographier l&rsquo;\u00e9volution des performances via des cartes thermiques (<em>heatmaps<\/em>) informatives.<\/p>\n<h2>11. Erreurs courantes, pi\u00e8ges syntaxiques et r\u00e9solutions<\/h2>\n<h3>11.1 L&rsquo;erreur fr\u00e9quente AttributeError sur cha\u00eenes de caract\u00e8res<\/h3>\n<p>Parmi les incidents syntaxiques r\u00e9pertori\u00e9s sur les forums de programmation sp\u00e9cialis\u00e9s, l&rsquo;exception <code>AttributeError: Can only use .dt accessor with datetimelike values<\/code> figure parmi les plus universellement rencontr\u00e9es. Cette interruption brutale du programme survient syst\u00e9matiquement d\u00e8s lors qu&rsquo;un d\u00e9veloppeur tente d&rsquo;appliquer l&rsquo;accesseur temporel <code>.dt<\/code> sur une colonne qui n&rsquo;a pas encore \u00e9t\u00e9 typ\u00e9e en <code>datetime64[ns]<\/code>.<\/p>\n<p>Le diagnostic de cette anomalie s&rsquo;\u00e9tablit par l&rsquo;interrogation de l&rsquo;attribut <code>df['sales_date'].dtype<\/code>. Si la console restitue la mention <code>object<\/code>, la colonne est consid\u00e9r\u00e9e par le ramasse-miettes comme une simple collection de cha\u00eenes textuelles ou de pointeurs g\u00e9n\u00e9riques. La r\u00e9solution formelle de cette m\u00e9prise impose une conversion imp\u00e9rative via <code>pd.to_datetime<\/code> avant tout cha\u00eenage vers l&rsquo;accesseur temporel, restaurant ainsi la conformit\u00e9 de la structure avec les attendus de l&rsquo;API de Pandas.<\/p>\n<h3>11.2 D\u00e9calages d&rsquo;index et alignement des Series<\/h3>\n<p>Un pi\u00e8ge conceptuel plus insidieux concerne le d\u00e9salignement potentiel d&rsquo;index lors de l&rsquo;assignation d&rsquo;une nouvelle colonne extraite. Le moteur interne de Pandas conditionne rigoureusement l&rsquo;int\u00e9gration d&rsquo;une <code>Series<\/code> dans un <code>DataFrame<\/code> \u00e0 la correspondance stricte de leurs index d&rsquo;\u00e9tiquetage respectifs.<\/p>\n<p>Si un analyste extrait les composantes mensuelles en appliquant une transformation externe qui r\u00e9initialise ou alt\u00e8re l&rsquo;index (par exemple via des m\u00e9thodes <code>reset_index(drop=True)<\/code> mal calibr\u00e9es ou des filtres pr\u00e9alables sur des tableaux NumPy bruts), l&rsquo;op\u00e9ration d&rsquo;assignation directe :<\/p>\n<p><code>df['mois'] = serie_extraite_desalignee<\/code><\/p>\n<p>engendrera une prolif\u00e9ration massive de valeurs <code>NaN<\/code> sur les enregistrements dont les cl\u00e9s indicielles diff\u00e8rent, voire une corruption silencieuse de l&rsquo;ordre s\u00e9quentiel des observations. La vigilance commande de veiller \u00e0 ce que toute s\u00e9rie temporelle d\u00e9riv\u00e9e conserve immuablement l&rsquo;index d&rsquo;origine du tableau conteneur.<\/p>\n<h3>11.3 Diff\u00e9rences de convention d&rsquo;indexation (Base 0 versus Base 1)<\/h3>\n<p>L&rsquo;interfa\u00e7age de scripts Pandas avec d&rsquo;autres biblioth\u00e8ques d&rsquo;analyse num\u00e9rique ou d&rsquo;apprentissage automatique constitue une zone de vuln\u00e9rabilit\u00e9 r\u00e9currente relative aux conventions d&rsquo;indexation num\u00e9rique. Par construction, le syst\u00e8me calendaire conventionnel et la biblioth\u00e8que Pandas adoptent une num\u00e9rotation en base 1 pour les mois de l&rsquo;ann\u00e9e : le mois de janvier est d\u00e9sign\u00e9 par la valeur <code>1<\/code>, et d\u00e9cembre par <code>12<\/code>.<\/p>\n<p>N\u00e9anmoins, de nombreux environnements de bas niveau, des modules d&rsquo;ing\u00e9nierie statistique issus du langage C, ou certaines fonctions math\u00e9matiques cycliques (telles que les encodages trigonom\u00e9triques sinus\/cosinus pour les r\u00e9seaux de neurones) postulent une indexation d\u00e9butant \u00e0 l&rsquo;ordinal z\u00e9ro. Une omission dans la d\u00e9cr\u00e9mentation ou l&rsquo;incr\u00e9mentation d&rsquo;offset calendaire g\u00e9n\u00e8re alors un d\u00e9calage de phase syst\u00e9matique de trente jours dans les s\u00e9ries temporelles, induisant des erreurs d&rsquo;interpr\u00e9tation massives dans les mod\u00e8les pr\u00e9dictifs sans qu&rsquo;aucune exception technique ne soit explicitement lev\u00e9e.<\/p>\n<h2>12. Synth\u00e8se m\u00e9thodologique et recommandations d&rsquo;ing\u00e9nierie des donn\u00e9es<\/h2>\n<h3>12.1 Arbre d\u00e9cisionnel pour le choix de la m\u00e9thode d&rsquo;extraction<\/h3>\n<p>Pour arbitrer rationnellement entre la diversit\u00e9 des approches document\u00e9es dans cette \u00e9tude, l&rsquo;architecte de donn\u00e9es doit appliquer une grille d&rsquo;\u00e9valuation syst\u00e9matique fond\u00e9e sur la typologie du jeu de donn\u00e9es, les contraintes de lisibilit\u00e9 logicielle et les exigences de performance computationnelle :<\/p>\n<ul>\n<li>Si le code s&rsquo;inscrit dans un pipeline de transformation orient\u00e9 objet favorisant le cha\u00eenage d&rsquo;op\u00e9rations et que la s\u00e9rie est d\u00e9j\u00e0 strictement typ\u00e9e en <code>datetime64[ns]<\/code>, l&rsquo;accesseur vectoris\u00e9 <strong><code>df['date'].dt.month<\/code><\/strong> repr\u00e9sente le choix canonique \u00e0 privil\u00e9gier pour son expressivit\u00e9 et sa maintenabilit\u00e9.<\/li>\n<li>Si la source de donn\u00e9es se pr\u00e9sente sous la forme d&rsquo;un tableau d&rsquo;horodatages non index\u00e9, ou si l&rsquo;on souhaite construire dynamiquement un nouvel index temporel le long de l&rsquo;axe vertical, l&rsquo;instanciation <strong><code>pd.DatetimeIndex(df['date']).month<\/code><\/strong> offre une alternative performante et robuste.<\/li>\n<li>Si l&rsquo;analyse s&rsquo;\u00e9tend sur une \u00e9chelle pluriannuelle continue et n\u00e9cessite des calculs de d\u00e9calages ou d&rsquo;intervalles glissants, la conversion en p\u00e9riode formelle via <strong><code>df['date'].dt.to_period('M')<\/code><\/strong> supplante avantageusement les ordinaux entiers bruts.<\/li>\n<li>Si la finalit\u00e9 unique r\u00e9side dans la restitution visuelle sur un tableau de bord, l&rsquo;utilisation de <strong><code>df['date'].dt.strftime('%B')<\/code><\/strong> (associ\u00e9e \u00e0 une gestion rigoureuse de la localisation) s&rsquo;impose pour des consid\u00e9rations ergonomiques.<\/li>\n<\/ul>\n<h3>12.2 Int\u00e9gration dans des pipelines de pr\u00e9traitement automatis\u00e9s<\/h3>\n<p>Dans un contexte d&rsquo;ing\u00e9nierie logicielle industrielle, les transformations de variables ne doivent pas consister en des fragments de scripts ex\u00e9cut\u00e9s de fa\u00e7on ad hoc, mais doivent \u00eatre encapsul\u00e9es au sein de classes de transformation r\u00e9utilisables et testables unitairement. L&rsquo;\u00e9cosyst\u00e8me <a rel=\"noopener noreferrer\" href=\"https:\/\/scikit-learn.org\/\">Scikit-Learn<\/a> fournit une interface formalis\u00e9e via les classes <code>BaseEstimator<\/code> et <code>TransformerMixin<\/code>.<\/p>\n<p>L&rsquo;encapsulation de l&rsquo;extraction mensuelle au sein d&rsquo;un transformateur personnalis\u00e9 (<em>custom transformer<\/em>) permet d&rsquo;automatiser le typage, de s\u00e9curiser l&rsquo;imputation des valeurs nulles par des r\u00e8gles \u00e9prouv\u00e9es et de garantir l&rsquo;absence absolue de fuite d&rsquo;information (<em>data leakage<\/em>) entre les jeux d&rsquo;entra\u00eenement et de validation des mod\u00e8les d&rsquo;apprentissage. Des tests d&rsquo;int\u00e9gration automatis\u00e9s (via des cadres comme <code>pytest<\/code>) valideront syst\u00e9matiquement la r\u00e9silience de ce composant face \u00e0 des variations soudaines de formats de dates en entr\u00e9e de production.<\/p>\n<h3>12.3 Perspectives d&rsquo;\u00e9volution avec les versions modernes de Pandas<\/h3>\n<p>L&rsquo;architecture de Pandas traverse une mutation structurelle profonde avec l&rsquo;int\u00e9gration graduelle d&rsquo;un nouveau moteur de stockage fond\u00e9 sur le standard colonnaire <a rel=\"noopener noreferrer\" href=\"https:\/\/arrow.apache.org\/\">Apache Arrow<\/a>. Accessible en option dans les versions 2.x et destin\u00e9 \u00e0 devenir la norme h\u00e9g\u00e9monique, ce backend remplace les blocs NumPy historiques par des tableaux Arrow hautement optimis\u00e9s.<\/p>\n<p>Cette transition technologique transforme radicalement le comportement des types temporels. Les types <code>timestamp<\/code> d&rsquo;Arrow supportent nativement la gestion des valeurs nulles sans conversion pernicieuse en flottants, \u00e9liminant ainsi d\u00e9finitivement les \u00e9cueils historiques de Pandas. Par ailleurs, les calculs vectoris\u00e9s b\u00e9n\u00e9ficient d&rsquo;une optimisation mat\u00e9rielle d\u00e9cupl\u00e9e, promettant des gains d&rsquo;efficacit\u00e9 notables sur l&rsquo;extraction des composantes calendaires. N\u00e9anmoins, les syntaxes fondamentales analys\u00e9es dans ce guide, singuli\u00e8rement l&rsquo;accesseur <code>.dt<\/code> et l&rsquo;usage de <code>DatetimeIndex<\/code>, demeurent les standards syntaxiques immuables sur lesquels reposeront durablement les architectures d&rsquo;ing\u00e9nierie de donn\u00e9es.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>McKinney, W. (2022). <em>Python for Data Analysis: Data Wrangling with pandas, NumPy, and Jupyter<\/em> (3rd ed.). O&rsquo;Reilly Media. <a rel=\"noopener noreferrer\" href=\"https:\/\/wesmckinney.com\/book\/\">https:\/\/wesmckinney.com\/book\/<\/a><\/li>\n<li>Pandas Development Team. (2024). <em>pandas documentation: Time series \/ date functionality<\/em>. PyData. <a rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\/docs\/user_guide\/timeseries.html\">https:\/\/pandas.pydata.org\/docs\/user_guide\/timeseries.html<\/a><\/li>\n<li>NumPy Developers. (2024). <em>NumPy v1.26 Manual: Datetimes and Timedeltas<\/em>. NumPy.org. <a rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\/doc\/stable\/reference\/arrays.datetime.html\">https:\/\/numpy.org\/doc\/stable\/reference\/arrays.datetime.html<\/a><\/li>\n<li>Apache Arrow Developers. (2024). <em>Apache Arrow Python Bindings: Temporal Data Types<\/em>. Apache Software Foundation. <a rel=\"noopener noreferrer\" href=\"https:\/\/arrow.apache.org\/docs\/python\/\">https:\/\/arrow.apache.org\/docs\/python\/<\/a><\/li>\n<li>Python Software Foundation. (2024). <em>Python 3 Standard Library: datetime \u2014 Basic date and time types<\/em>. Python.org. <a rel=\"noopener noreferrer\" href=\"https:\/\/docs.python.org\/3\/library\/datetime.html\">https:\/\/docs.python.org\/3\/library\/datetime.html<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide m\u00e9thodologique complet pour extraire le mois \u00e0 partir d&rsquo;une date dans Pandas. Syntaxe DatetimeIndex, accesseur dt, gestion des NaN et exemples pratiques.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2465,2464],"tags":[6883,3650,2466,2468,1911],"class_list":["post-4900","psych_stat","type-psych_stat","status-publish","hentry","category-programmation-python","category-science-des-donnees","tag-datetimeindex","tag-extraction-de-donnees","tag-pandas","tag-python","tag-series-temporelles"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/4900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4900"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/4900\/revisions"}],"predecessor-version":[{"id":16706,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/4900\/revisions\/16706"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4900"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}