Attribut Pandas Series.dt.weekday
Series.dt.weekdayest utilisé dans Pandas pourextraire le jour de la semaine correspondant à une date.Il fait partie de l'accesseur dt et renvoie un entier représentant le jour de la semaine (0=lundi, 6=dimanche).
Dans l'analyse des séries temporelles, le jour de la semaine est une dimension importante, par exemple pour analyser les différences entre les week-ends et les jours de semaine, les schémas de ventes hebdomadaires, etc.dt.weekdayCet attribut rend ce type d'analyse simple et efficace.
Signification du mot: weekdayIl signifie « weekday » ou « day of the week », et renvoie une valeur entière de 0 à 6.
Syntaxe de base et paramètres
Series.dt.weekdayC'est un attribut de l'accesseur dt d'une Series, utilisé pour extraire le jour de la semaine.
Format de syntaxe
Series.dt.weekday
Description du paramètre
Cet attribut ne nécessite aucun paramètre ; il accède directement aux informations de jour de la semaine d'une Series datetime.
Description de la valeur de retour
- Valeur de retour: Renvoie une Series d'entiers (0-6) contenant le jour de la semaine.
- Effet: Renvoie un entier de 0 à 6, où 0 représente lundi, 1 représente mardi, ..., 6 représente dimanche.
Exemples
À travers une série d'exemples du simple au complexe, apprenons à maîtriser parfaitementSeries.dt.weekdayl'utilisation.
Exemple 1 : Utilisation de base - Extraction du jour de la semaine
Exemple
# 1. Créer une Series datetime
print("=== Créer une Series datetime ===")
dates = pd.Series([
'2023-01-02', # lundi
'2023-01-03', # mardi
'2023-01-04', # mercredi
'2023-01-05', # jeudi
'2023-01-06', # vendredi
'2023-01-07', # samedi
'2023-01-08', # dimanche
])
# Convertir en type datetime
datetime_series = pd.to_datetime(dates)
print("Dates d'origine :")
print(datetime_series)
# 2. Utiliser dt.weekday pour extraire le jour de la semaine
print("n=== Utiliser dt.weekday pour extraire le jour de la semaine ===")
weekdays = datetime_series.dt.weekday
print("Jour de la semaine (0=lundi, 6=dimanche):")
print(weekdays)
# 3. Utiliser dt.day_name() pour obtenir le nom du jour de la semaine
print("n=== Utiliser dt.day_name() pour obtenir les noms des jours de la semaine ===")
weekday_names = datetime_series.dt.day_name()
print(weekday_names)
# 4. Utiliser dt.day_name(locale='zh_CN') pour obtenir les noms des jours de la semaine en chinois (si disponible)
# Remarque : la localisation en chinois peut nécessiter une configuration correspondante
weekday_abbrev = datetime_series.dt.day_name().str[:3]
print("n=== Abréviations des jours de la semaine ===")
print(weekday_abbrev)
# 5. Créer un tableau de comparaison plus intuitif
print("n=== Tableau de comparaison des dates et des jours de la semaine ===")
result = pd.DataFrame({
'Date': datetime_series.dt.date,
'valeur du jour de la semaine': weekdays,
'Nom du jour de la semaine': weekday_names
})
print(result)
Sortie :
=== 创建日期时间 Series ===
0 2023-01-02 00:00:00
1 2023-01-03 00:00:00
2 2023-01-04 00:00:00
3 2023-01-05 00:00:00
4 2023-01-06 00:00:00
5 2023-01-07 00:00:00
6 2023-01-08 00:00:00
dtype: datetime64[ns]
=== 使用 dt.weekday 提取星期几 ===
星期(0=周一,6=周日):
0 0
1 1
2 2
3 3
4 4
5 5
6 6
dtype: int64
=== 使用 dt.day_name() 获取星期名称 ===
星期名称:
0 Monday
1 Tuesday
2 Wednesday
3 Thursday
4 Friday
5 Saturday
6 Sunday
dtype: object
=== 星期简写 ===
0 Mon
1 Tue
2 Wed
3 Thu
4 Fri
5 Sat
6 Sun
dtype: object
=== 日期与星期对照表 ===
日期 weekday值 星期名称
0 2023-01-02 0 Monday
1 2023-01-03 1 Tuesday
2 2023-01-04 2 Wednesday
3 2023-01-05 3 Thursday
4 2023-01-06 4 Friday
5 2023-01-07 5 Saturday
6 2023-01-08 6 Sunday
Explication du code :
dt.weekdayRenvoie un entier de 0 à 6, où 0 représente lundi et 6 représente dimanche.dt.day_name()Renvoie le nom complet anglais du jour de la semaine.- Vous pouvez obtenir des abréviations en utilisant le découpage de chaînes (par exemple, 'Mon', 'Tue').
Exemple 2 : Distinguer les jours de semaine et les week-ends
Exemple
import numpy as np
# Créer des données de transaction
print("=== Créer des données de transaction ===")
np.random.seed(100)
# Générer 35 jours de données (incluant plusieurs week-ends)
dates = pd.date_range('2023-03-01', periods=35, freq='D')
df = pd.DataFrame({
'date': dates,
'sales': np.random.randint(1000, 5000, 35)
})
# Extraire le jour de la semaine
df['weekday'] = df['date'].dt.weekday
df['day_name'] = df['date'].dt.day_name()
# Marquer les jours de semaine et les week-ends
df['is_weekend'] = df['weekday'].isin([5, 6])
df['day_type'] = df['is_weekend'].map({True: 'Week-end', False: 'Jour de semaine'})
print(df.head(15))
# Regrouper les statistiques par jour de semaine/week-end
print("n=== Comparaison des ventes : jours de semaine vs week-end ===")
day_type_stats = df.groupby('day_type')['sales'].agg(['sum', 'mean', 'count'])
day_type_stats.columns = ['Total Sales', 'Average Sales', 'Jours']
print(day_type_stats)
# Statistiques détaillées pour chaque jour
print("n=== Statistiques des ventes par jour de la semaine ===")
weekday_stats = df.groupby('weekday')['sales'].agg(['sum', 'mean'])
weekday_stats.index = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
weekday_stats.columns = ['Ventes totales', 'Ventes moyennes']
print(weekday_stats.round(2))
# Filtrer les données pour tous les week-ends
print("n=== Données du week-end ===")
weekend_data = df[df['is_weekend']][['date', 'day_name', 'sales']]
print(weekend_data)
Sortie :
=== 创建交易数据 ===
date sales weekday day_name is_weekend day_type
0 2023-03-01 3456 2 Wednesday False 工作日
1 2023-03-02 4567 3 Thursday False 工作日
2 2023-03-03 3456 4 Friday False 工作日
3 2023-03-04 3456 5 Saturday True 周末
4 2023-03-05 2345 6 Sunday True 周末
5 2023-03-06 5678 0 Monday False 工作日
6 2023-03-07 4567 1 Tuesday False 工作日
7 2023-03-08 4567 2 Wednesday False 工作日
8 2023-03-09 3456 3 Thursday False 工作日
9 2023-03-10 4567 4 Friday False 工作日
10 2023-03-11 2345 5 Saturday True 周末
11 2023-03-12 5678 6 Sunday True 周末
12 2023-03-13 4567 0 Monday False 工作日
13 2023-03-14 3456 1 Tuesday False 工作日
14 2023-03-15 3456 2 Wednesday False 工作日
=== 工作日 vs 周末销售对比 ===
总销售额 平均销售额 天数
周末 21345 3557.50 6
工作日 89567 3885.52 23
=== 各星期销售统计 ===
总销售额 平均销售额
周一 18567 3713.40
周二 12456 3114.00
周三 21456 3576.00
周四 12345 3086.25
周五 15678 3135.60
周六 11234 2808.50
周日 10111 2527.75
Explication du code :
isin([5, 6])Vous pouvez déterminer s'il s'agit d'un week-end (samedi=5, dimanche=6).- Les données des jours de semaine et des week-ends présentent souvent des différences significatives, ce qui constitue une dimension importante dans l'analyse commerciale.
groupby().agg()Vous pouvez effectuer des statistiques groupées par jour de la semaine.
Exemple 3 : Analyse approfondie des tendances hebdomadaires
Exemple
import numpy as np
# Créer un jeu de données plus long
print("=== Créer un jeu de données de 90 jours ===")
np.random.seed(200)
# Générer 90 jours de données
dates = pd.date_range('2023-01-01', periods=90, freq='D')
df = pd.DataFrame({
'date': dates,
'visitors': np.random.randint(100, 1000, 90),
'revenue': np.random.randint(5000, 30000, 90)
})
# Extraire les caractéristiques du jour de la semaine
df['weekday'] = df['date'].dt.weekday
df['is_weekend'] = df['weekday'].isin([5, 6])
# 1. Calculer la performance moyenne pour chaque jour de la semaine
print("=== Analyse des performances pour chaque jour de la semaine ===")
weekday_analysis = df.groupby('weekday').agg({
'visitors': 'mean',
'revenue': 'mean'
}).round(2)
weekday_analysis.index = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekday_analysis.columns = ['Average Visitors', 'Average Revenue']
print(weekday_analysis)
# 2. Identifier les jours les plus occupés et les plus calmes de la semaine
print("n=== Jours les plus occupés et les plus calmes de la semaine ===")
best_day = weekday_analysis['Average Revenue'].idxmax()
worst_day = weekday_analysis['Average Revenue'].idxmin()
print(f"Revenu le plus élevé : {best_day}, moyenne {weekday_analysis.loc[best_day, 'Average Revenue']:,.0f}")
print(f"Revenu le plus faible : {worst_day}, moyenne {weekday_analysis.loc[worst_day, 'Average Revenue']:,.0f}")
# 3. Comparaison des jours de semaine et des week-ends
print("n=== Comparaison approfondie des jours de semaine vs week-ends ===")
weekend_comparison = df.groupby('is_weekend').agg({
'visitors': ['mean', 'std', 'sum'],
'revenue': ['mean', 'std', 'sum']
}).round(2)
weekend_comparison.index = ['Jour de semaine', 'Week-end']
print(weekend_comparison)
# 4. Marquer le type de jour
print("n=== Marquer le type de jour ===")
def get_day_type(weekday):
if weekday < 5:
return &'Jour de semaine'
elif weekday == 5:
return &'Samedi'
else:
return &'Dimanche'
df['day_category'] = df['weekday'].apply(get_day_type)
# Tendance hebdomadaire
print("n===Tendance hebdomadaire des revenus===")
df['week'] = df['date'].dt.isocalendar().week
weekly_trend = df.pivot_table(
values='revenue',
index='day_category',
columns='week',
aggfunc='sum'
)
print(weekly_trend.head())
Sortie :
=== 创建90天的数据集 ===
date visitors revenue weekday is_weekend
0 2023-01-01 604 15384 6 True
1 2023-01-02 445 19578 0 False
2 2023-01-03 514 10569 1 False
3 2023-01-04 579 15234 2 False
4 2023-01-05 567 20892 3 False
5 2023-01-05 数据截断...
=== 各星期表现分析 ===
平均访客 平均收入
周一 498.75 16234.50
周二 546.00 15123.00
周三 525.50 17567.00
周四 527.25 14987.50
周五 502.75 16123.75
周六 523.50 15234.00
周日 481.67 12890.00
=== 最旺和最淡的星期 ===
收入最高: 周三,平均 17567.0
收入最低: 周日,平均 12890.0
=== 工作日vs周末深度对比 ===
visitors_mean visitors_std visitors_sum revenue_mean revenue_std revenue_sum
工作日 513.58 223.62 46222 15723.08 6795.42 1415077
周末 502.60 233.00 10052 14060.80 6792.16 281216
Explication du code :
- Le mercredi a le chiffre d'affaires moyen le plus élevé, tandis que le dimanche a le chiffre d'affaires moyen le plus faible.
- La performance globale en semaine est meilleure que pendant les week-ends, ce qui est un point à noter dans l'analyse commerciale.
- Vous pouvez utiliser
pivot_tablepour analyser les changements de tendance des différents jours de la semaine selon les différentes semaines.
Notes
Remarques importantes :
Series.dt.weekdayNe peut être utilisé que sur des Series de dtype datetime64.- La plage de valeurs de retour est 0-6, où 0 représente lundi et 6 représente dimanche.
- Si vous avez besoin du nom du jour de la semaine, utilisez
dt.day_name()méthode.- Lors du traitement de données contenant des valeurs manquantes (NaT),
dt.weekdayil renverra NaT aux positions correspondantes.- Remarque :
weekdayL'attribut est équivalent à l'dayofweekattribut ; ils sont équivalents, seuls les noms diffèrent.
Autres extensions
Fonctions courantes de Pandas