Propriété Pandas Series.dt.month
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
# 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 :
dt.monthRenvoie des entiers de 1 à 12, où 1 représente janvier et 12 représente décembre.dt.month_name()Renvoie le nom complet en anglais du mois.- Les abréviations des mois peuvent être obtenues via le découpage de chaînes.
Exemple 2 : Filtrage et regroupement par mois
Exemple
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 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 le
dt.month_name()méthode.- Lors du traitement de données contenant des valeurs manquantes (NaT),
dt.monthil renvoie NaT aux positions correspondantes.
Autres extensions
Fonctions courantes de Pandas