Pandas Date et heure

Pandas offre de puissantes capacités de traitement des dates et heures, ce qui facilite la conversion de chaînes en types de date et l'exécution de divers calculs et analyses liés aux dates.


Création de dates et d'heures

Fonction date_range

Exemple

import pandas as pd

# Créer une plage de dates
dates = pd.date_range("2024-01-01", periods=10, freq="D")
print("Par jour :")
print(dates)
print()

# Par mois
dates_month = pd.date_range("2024-01-01", periods=12, freq="M")
print("Par mois :")
print(dates_month)
print()

# Par heure
dates_hour = pd.date_range("2024-01-01 00:00", periods=24, freq="H")
print("Par heure (5 premières) :")
print(dates_hour[:5])

DatetimeIndex et DatetimeArray

Exemple

import pandas as pd
import numpy as np

# Créer à l'aide d'un objet datetime
dt = pd.DatetimeIndex([
    pd.Timestamp("2024-01-01"),
    pd.Timestamp("2024-01-02"),
    pd.Timestamp("2024-01-03")
])
print("DatetimeIndex:")
print(dt)
print()

# Créer une Series avec le temps
s = pd.Series(
    [100, 200, 300],
    index=pd.date_range("2024-01-01", periods=3, freq="D")
)
print("Series avec index de dates :")
print(s)

Conversion de chaînes de caractères en dates

pd.to_datetime

Exemple

import pandas as pd

# Convertir des chaînes de caractères de divers formats en dates
dates_str = ["2024-01-01", "2024/01/02", "01-03-2024", "20240104"]

# Déduire automatiquement le format
dt = pd.to_datetime(dates_str)
print("Format déduit automatiquement :")
print(dt)
print()

# Spécifier le format
dt2 = pd.to_datetime(dates_str, format="%Y-%m-%d")
print("Format spécifié :")
print(dt2)
print()

# Gérer les valeurs invalides
dt3 = pd.to_datetime(["2024-01-01", "invalid", "2024-01-03"], errors="coerce")
print("Gérer les valeurs invalides (converties en NaT) :")
print(dt3)

read_csv Analyse automatique des dates

Exemple

import pandas as pd
from io import StringIO

# Simuler des données CSV
csv_data = """Date,Sales
2024-01-01,100
2024-01-02,200
2024-01-03,150
"""


# Méthode 1 : convertir après lecture
df = pd.read_csv(StringIO(csv_data))
df["Date"] = pd.to_datetime(df["Date"])
print("Après lecture, convertir :")
print(df.dtypes)
print()

# Méthode 2 : analyser directement lors de la lecture
df2 = pd.read_csv(StringIO(csv_data), parse_dates=["Date"])
print("Analyser lors de la lecture :")
print(df2.dtypes)

Accès aux attributs de date

Après avoir converti la date et l'heure en type datetime, vous pouvez facilement extraire divers attributs.

Exemple

import pandas as pd

# Créer une Series de dates
s = pd.Series(pd.date_range("2024-01-15", periods=5, freq="D"))

print("Série de dates :")
print(s)
print()

# Extraire l'année/le mois/le jour
print("Extraire l'année :")
print(s.dt.year)
print()

print("Extraire le mois :")
print(s.dt.month)
print()

print("Extraire le jour :")
print(s.dt.day)
print()

# Extraire le jour de la semaine (0=lundi, 6=dimanche)
print("Jour de la semaine (numéro) :")
print(s.dt.dayofweek)
print()

# Extraire le nom du jour de la semaine
print("Nom du jour de la semaine :")
print(s.dt.day_name())

Plus d'attributs de date

Attribut Description Exemple
year année 2024
month Mois (1-12) 1
day Jour (1-31) 15
hour Heure (0-23) 10
minute Minute (0-59) 30
dayofweek Jour de la semaine (0-6) 0
quarter Trimestre (1-4) 1
is_month_start Est le début du mois Vrai/Faux
is_month_end Est la fin du mois Vrai/Faux

Opérations sur les dates

Addition et soustraction de dates

Exemple

import pandas as pd

# Créer une date
date = pd.Timestamp("2024-01-15")
print(f"Date de base : {date}")
print()

# Ajouter/soustraire des jours
print(f"+3 jours : {date + pd.Timedelta(days=3)}")
print(f"-5 jours : {date - pd.Timedelta(days=5)}")
print()

# Différence de dates
date1 = pd.Timestamp("2024-01-01")
date2 = pd.Timestamp("2024-01-15")
print(f"Différence de dates : {date2 - date1}")
print(f"Différence en jours : {(date2 - date1).days}")
print()

# Opérations sur les séries de dates
dates = pd.date_range("2024-01-01", periods=5, freq="D")
print("Date + 3 jours :")
print(dates + pd.Timedelta(days=3))

Décalages de dates

Exemple

import pandas as pd

date = pd.Timestamp("2024-01-15")
print(f"Date de base : {date}")
print()

# Début/Fin de mois
print(f"Début du mois : {date + pd.offsets.MonthBegin(1)}")
print(f"Fin du mois : {date + pd.offsets.MonthEnd(1)}")
print()

# Décalage en années
print(f"Ajouter 1 an : {date + pd.DateOffset(years=1)}")
print(f"Soustraire 1 mois : {date + pd.DateOffset(months=-1)}")
print()

# Jour de la semaine
print(f"Lundi prochain : {date + pd.offsets.Week(weekday=0)}")

Gestion des fuseaux horaires

Exemple

import pandas as pd

# Créer une date/heure sans fuseau horaire
dates = pd.date_range("2024-01-01 10:00", periods=3, freq="H")
print("Sans fuseau horaire :")
print(dates)
print()

# Définir le fuseau horaire
dates_utc = dates.tz_localize("UTC")
print("Définir le fuseau horaire UTC :")
print(dates_utc)
print()

# Convertir le fuseau horaire
dates_shanghai = dates_utc.tz_convert("Asia/Shanghai")
print("Convertir au fuseau horaire de Shanghai :")
print(dates_shanghai)

Exercice : Analyse des données de ventes

Exemple

import pandas as pd

# Simuler des données de ventes
df = pd.DataFrame({
    "Date": pd.date_range("2024-01-01", periods=30, freq="D"),
    "Ventes": [100, 150, 120, 180, 200, 90, 80] * 4 + [100, 100]
})
df["Date"] = pd.to_datetime(df["Date"])

print("Données de ventes :")
print(df.head(10))
print()

# Statistiques par jour de la semaine
print("Ventes moyennes par jour de la semaine :")
weekday_sales = df.groupby(df["Date"].dt.day_name())["Sales"].mean()
print(weekday_sales)
print()

# Statistiques par mois
print("Par mois :")
df["Month"] = df["Date"].dt.to_period("M")
monthly_sales = df.groupby("Month")["Sales"].sum()
print(monthly_sales)
print()

# Calculer la moyenne mobile sur 7 jours
df["7-day rolling average"] = df["Sales"].rolling(window=7).mean()
print("Ajouter la moyenne mobile sur 7 jours :")
print(df.head(10))

FAQ

1. Formats de date incohérents

Lors de l'utilisationpd.to_datetimevous pouvez spécifierformatle paramètre pour préciser le format, en évitant les erreurs d'analyse.

2. Confusion des fuseaux horaires

Lors du traitement de données à travers plusieurs fuseaux horaires, assurez-vous que toutes les heures utilisent un fuseau horaire unifié ou l'heure UTC.

3. Les opérations sur les dates utilisent Timedelta

L'addition et la soustraction de dates utilisentpd.Timedelta, plutôt qu'une simple addition et soustraction d'entiers.

Lors du traitement de données de séries temporelles, il est recommandé de convertir les chaînes de date en type datetime dès que possible afin de tirer parti des puissantes fonctionnalités de date de Pandas.

Autres extensions