Attribut Pandas Series.dt.weekday

Pandas 通用函数Fonctions courantes de Pandas


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

import pandas as pd

# 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 :

  1. dt.weekdayRenvoie un entier de 0 à 6, où 0 représente lundi et 6 représente dimanche.
  2. dt.day_name()Renvoie le nom complet anglais du jour de la semaine.
  3. 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 pandas as pd
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 pandas as pd
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 utiliserpivot_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, utilisezdt.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.

Pandas 常用函数Fonctions courantes de Pandas

Autres extensions