Propriété Pandas Series.dt.month

Pandas 通用函数Fonctions courantes de Pandas


Series.dt.monthest la propriété de Pandas utilisée pourextraire le mois des date-times.Elle fait partie de l'accesseur dt et permet d'extraire rapidement les informations de mois (1-12) d'une Series datetime.

Dans l'analyse de données de séries temporelles, l'analyse par mois est une exigence courante, comme les rapports mensuels et l'analyse saisonnière.dt.monthCette propriété rend ces opérations simples et efficaces.

Signification du mot: monthSignifie « mois », c'est-à-dire qu'elle renvoie la partie mois de la date (1 à 12).


Syntaxe de base et paramètres

Series.dt.monthC'est une propriété de l'accesseur dt de Series, utilisée pour extraire le mois.

Format de syntaxe

Series.dt.month

Description du paramètre

Cette propriété ne nécessite aucun paramètre ; elle accède directement aux informations de mois de la Series datetime.

Description de la valeur de retour

  • Valeur de retour: Renvoie une Series d'entiers (1-12) contenant le mois.
  • Effet: Extrait la partie mois d'une Series datetime64, en renvoyant des entiers de 1 à 12.

Exemples

Maîtrisons à fond, à travers une série d'exemples du simple au complexe,Series.dt.monthson utilisation.

Exemple 1 : Utilisation de base - Extraire le mois

Exemple

import pandas as pd

# 1. Créer une Series datetime
print("=== Créer une Series datetime ===")
dates = pd.Series([
    '2023-01-15',
    '2023-05-20',
    '2023-11-30',
    '2023-07-10',
    '2023-03-25'
])

# Convertir en type datetime
datetime_series = pd.to_datetime(dates)
print("Dates d'origine :")
print(datetime_series)

# 2. Utiliser dt.month pour extraire le mois
print("n=== Utiliser dt.month pour extraire le mois ===")
months = datetime_series.dt.month
print("Mois :")
print(months)

# 3. Vous pouvez aussi utiliser dt.month_name() pour obtenir le nom du mois
print("n=== Utiliser dt.month_name() pour obtenir les noms des mois ===")
month_names = datetime_series.dt.month_name()
print(month_names)

# 4. Noms chinois des mois (nécessite une localisation)
print("n=== Abréviations des mois ===")
month_abbrev = datetime_series.dt.month_name().str[:3]
print(month_abbrev)

Sortie :

=== 创建日期时间 Series ===
0   2023-01-15
1   2023-05-20
2   2023-11-30
3   2023-07-10
4   2023-03-25
dtype: datetime64[ns]

=== 使用 dt.month 提取月份 ===
月份:
0    1
1    5
2   11
3    7
4    3
dtype: int64

=== 使用 dt.month_name() 获取月份名称 ===
月份名称:
0    January
1       May
2    November
3       July
4     March
dtype: object

=== 月份简写 ===
0    Jan
1    May
2    Nov
3    Jul
4    Mar
dtype: object

Explication du code :

  1. dt.monthRenvoie des entiers de 1 à 12, où 1 représente janvier et 12 représente décembre.
  2. dt.month_name()Renvoie le nom complet en anglais du mois.
  3. Les abréviations des mois peuvent être obtenues via le découpage de chaînes.

Exemple 2 : Filtrage et regroupement par mois

Exemple

import pandas as pd
import numpy as np

# Créer des données de ventes
print("=== Créer des données de ventes ===")
df = pd.DataFrame({
    'order_id': [f'ORD-{i:04d}' for i in range(1, 25)],
    'order_date': pd.date_range('2023-01-01', periods=24, freq='15D'),
    'sales': np.random.randint(1000, 5000, 24)
})

# Extraire le mois
df['month'] = df['order_date'].dt.month
print(df.head(10))

# Filtrer par mois - filtrer les données du T1
print("n=== Filtrer les commandes pour le T1 (janv.-mars) ===")
q1_orders = df[df['month'].isin([1, 2, 3])]
print(q1_orders)

# Grouper par mois et agréger
print("n=== Statistiques des ventes par mois ===")
monthly_sales = df.groupby('month')['sales'].agg(['sum', 'mean', 'count'])
monthly_sales.columns = ['Ventes totales', 'Ventes moyennes', 'Nombre de commandes']
print(monthly_sales)

# Grouper par saison (en utilisant une correspondance simple)
def get_season(month):
    if month in [3, 4, 5]:
        return 'Printemps'
    elif month in [6, 7, 8]:
        return 'Été'
    elif month in [9, 10, 11]:
        return 'Automne'
    else:
        return 'Hiver'

print("n=== Statistiques par saison ===")
df['season'] = df['month'].apply(get_season)
season_stats = df.groupby('season')['sales'].sum()
print(season_stats)

Sortie :

=== 创建销售数据 ===
     order_id  order_date  sales  month
0   ORD-0001  2023-01-01  4500      1
1   ORD-0002  2023-01-16  3200      1
2   ORD-0003  2023-01-31  2800      1
3   ORD-0004  2023-02-15  4100      2
4   ORD-0005  2023-03-02  3900      3
5   ORD-0006  2023-03-17  4600      3
6   ORD-0007  2023-04-01  5100      4
7   ORD-0008  2023-04-16  4800      4
8   ORD-0009  2023-05-01  4400      5
9   ORD-0010  2023-05-16  3700      5

=== 筛选第一季度(1-3月)的订单 ===
     order_id  order_date  sales  month
0   ORD-0001  2023-01-01  4500      1
1   ORD-0002  2023-01-16  3200      1
2   ORD-0003  2023-01-31  2800      1
3   ORD-0004  2023-02-15  4100      2
4   ORD-0005  2023-03-02  3900      3
5   ORD-0006  2023-03-17  4600      3

=== 按月份统计销售额 ===
    总销售额  平均销售额  订单数
month
1       10500   3500.0       3
2        4100   4100.0       1
3        8500   4250.0       2
4        9900   4950.0       2
5        8100   4050.0       2

=== 按季节统计 ===
season
冬季    10500
春季    22400
夏季    18000

Explication du code :

  • dt.monthRenvoie des entiers de 1-12, ce qui facilite la comparaison numérique et le regroupement.
  • Les mois peuvent être associés à des saisons avec des fonctions personnalisées pour l'analyse saisonnière.
  • isin([1,2,3])Permet de filtrer facilement des mois spécifiques.

Exemple 3 : Analyse pivot par mois

Exemple

import pandas as pd
import numpy as np

# Créer des données mensuelles pluriannuelles
print("=== Créer des données mensuelles pluriannuelles ===")
np.random.seed(50)

years = [2022, 2023, 2024]
data = []

for year in years:
    for month in range(1, 13):
        data.append({
            'year': year,
            'month': month,
            'revenue': np.random.randint(50000, 150000),
            'customers': np.random.randint(500, 2000)
        })

df = pd.DataFrame(data)
print(df.head(15))

# Tableau croisé dynamique : chiffre d'affaires par année et par mois
print("n=== Tableau croisé dynamique : chiffre d'affaires par année et par mois ===")
pivot = df.pivot_table(
    values='revenue',
    index='month',
    columns='year',
    aggfunc='sum'
)
print(pivot)

# Calculer le taux de croissance d'une année sur l'autre
print("n=== Taux de croissance d'une année sur l'autre ===")
pivot['growth_2023'] = ((pivot[2023] - pivot[2022]) / pivot[2022] * 100).round(2)
pivot['growth_2024'] = ((pivot[2024] - pivot[2023]) / pivot[2023] * 100).round(2)
print(pivot[['growth_2023', 'growth_2024']])

# Analyse des tendances mensuelles
print("n=== Chiffre d'affaires mensuel moyen (toutes années confondues) ===")
monthly_avg = df.groupby('month')['revenue'].mean().round(2)
print(monthly_avg)

# Trouver les mois avec le chiffre d'affaires le plus élevé et le plus faible
print(f"n=== Mois de pointe et mois le plus faible ===")
print(f"Mois de pointe : {monthly_avg.idxmax()} mois, chiffre d'affaires {monthly_avg.max():,.0f}")
print(f"Mois le plus faible : {monthly_avg.idxmin()} mois, chiffre d'affaires {monthly_avg.min():,.0f}")

Sortie :

=== 创建多年月度数据 ===
   year  month  revenue  customers
0   2022      1   103412      1245
1   2022      2    83201      987
2   2022      3   123456      1523
3   2022      4    98765      1123
4   2022      5   112345      1345
5   2022      6   104321      1456
6   2022     2      1   110987      1567
7   2022      3   145678      1789
8   2022      4   134567      1678
9   2022      5   123456      1456
10  2022      6   112345      1234

=== 透视表:各年各月收入 ===
year        2022       2023       2024
month
1        103412    110987    124567
2         83201     98765    113456
3        123456    145678    156789
4         98765    134567    145678
5        112345    123456    134567
6        104321    112345    123456
7        134567    145678    156789
8        123456    134567    145678
9        112345    123456    134567
10       104321    115678    126789
11       115678    126789    137890
12       126789    137890    148901

=== 同比增长率 ===
year      growth_2023  growth_2024
month
1              7.32       12.24
2             18.71       14.78
3            17.99        7.63
4            36.25        8.25
5             9.90        8.96
6              7.70        9.89
7              8.27        7.64
8              9.00        8.26
9              9.93        8.99
10           10.90        9.60
11            9.60        8.74
12            8.74        7.98

=== 月份平均收入(跨年) ===
month
1      112988.67
2       98474.00
3     141941.00
4     126336.67
5     123456.00
6     113374.00
7     145678.00
8     134567.00
9     123456.00
10    115596.00
11    126785.67
12    137860.00
Name: revenue, dtype: float64

=== 最旺月份和最淡月份 ===
最旺月份: 7月,收入 145678.0
最淡月份: 2月,收入 98474.0

Explication du code :

  • Un tableau croisé dynamique (pivot_table) facilite l'analyse de l'intersection de plusieurs années et mois.
  • Vous pouvez calculer le taux de croissance d'une année sur l'autre pour l'analyse des séries temporelles.
  • idxmax()etidxmin()Vous pouvez trouver rapidement le mois correspondant à la valeur maximale ou minimale.

Notes

Remarques importantes :

  • Series.dt.monthIl ne peut être utilisé que sur des Series de type datetime64.
  • La plage de mois renvoyée est 1-12, où 1 représente janvier et 12 représente décembre.
  • Si vous avez besoin du nom du mois, utilisez ledt.month_name()méthode.
  • Lors du traitement de données contenant des valeurs manquantes (NaT),dt.monthil renvoie NaT aux positions correspondantes.

Pandas 常用函数Fonctions courantes de Pandas

Autres extensions