Pandas Series.dt.weekday-Attribut

Pandas 通用函数Pandas Häufige Funktionen


Series.dt.weekdaywird in Pandas verwendet, umden Wochentag zu extrahieren, der einem Datum entspricht.Er ist Teil des dt-Accessors und gibt eine ganze Zahl zurück, die den Wochentag darstellt (0=Montag, 6=Sonntag).

In der Zeitreihenanalyse ist der Wochentag eine wichtige Dimension, zum Beispiel bei der Analyse von Unterschieden zwischen Wochenenden und Werktagen, wöchentlichen Verkaufsmustern usw.dt.weekdayDieses Attribut macht solche Analysen einfach und effizient.

Wortbedeutung: weekdayEs bedeutet "Wochentag" oder "Tag der Woche" und gibt einen ganzzahligen Wert von 0 bis 6 zurück.


Grundlegende Syntax und Parameter

Series.dt.weekdayEs ist ein Attribut des dt-Accessors einer Series, das verwendet wird, um den Wochentag zu extrahieren.

Syntaxformat

Series.dt.weekday

Parameterbeschreibung

Dieses Attribut erfordert keine Parameter; es greift direkt auf die Wochentagsinformationen einer datetime-Series zu.

Beschreibung des Rückgabewerts

  • Rückgabewert: Gibt eine Integer-Series (0-6) zurück, die den Wochentag enthält.
  • Effekt: Gibt eine Ganzzahl von 0 bis 6 zurück, wobei 0 für Montag steht, 1 für Dienstag, ..., 6 für Sonntag.

Beispiele

Lass uns anhand einer Reihe von Beispielen von einfach bis komplex gründlichSeries.dt.weekdaydie Verwendung beherrschen.

Beispiel 1: Grundlegende Verwendung - Extrahieren des Wochentags

Beispiel

import pandas as pd

# 1. Erstellen einer datetime Series
print("=== datetime Series erstellen ===")
dates = pd.Series([
    '2023-01-02',  # Montag
    '2023-01-03',  # Dienstag
    '2023-01-04',  # Mittwoch
    '2023-01-05',  # Donnerstag
    '2023-01-06',  # Freitag
    '2023-01-07',  # Samstag
    '2023-01-08',  # Sonntag
])

# In datetime-Typ umwandeln
datetime_ = pd.to_datetime(dates)
print("Ursprüngliche Datumsangaben:")
print(datetime_series)

# 2. Verwende dt.weekday, um den Wochentag zu extrahieren
print("n=== Verwende dt.weekday, um den Wochentag zu extrahieren ===")
weekdays = datetime_series.dt.weekday
print("Wochentag (0=Montag, 6=Sonntag):")
print(weekdays)

# 3. Verwende dt.day_name(), um den Namen des Wochentags zu erhalten
print("n=== Verwende dt.day_name(), um Wochentagsnamen zu erhalten ===")
weekday_names = datetime_series.dt.day_name()
print(weekday_names)

# 4. Verwende dt.day_name(locale='zh_CN'), um chinesische Wochentagsnamen zu erhalten (falls verfügbar)
# Hinweis: Die chinesische Lokalisierung erfordert möglicherweise eine entsprechende Konfiguration
weekday_abbrev = datetime_series.dt.day_name().str[:3]
print("n=== Wochentagsabkürzungen ===")
print(weekday_abbrev)

# 5. Eine intuitivere Vergleichstabelle erstellen
print("n=== Datums- und Wochentagsvergleichstabelle ===")
result = pd.DataFrame({
    'Datum': datetime_series.dt.date,
    'Wochentagswert': weekdays,
    'Wochentagsname': weekday_names
})
print(result)

Ausgabe:

=== 创建日期时间 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

Code-Erklärung:

  1. dt.weekdayGibt eine ganze Zahl von 0 bis 6 zurück, wobei 0 für Montag und 6 für Sonntag steht.
  2. dt.day_name()Gibt den vollständigen englischen Namen des Wochentags zurück.
  3. Sie können Abkürzungen durch String-Slicing erhalten (z. B. 'Mon', 'Tue').

Beispiel 2: Unterscheidung von Wochentagen und Wochenenden

Beispiel

import pandas as pd
import numpy as np

# Transaktionsdaten erstellen
print("=== Transaktionsdaten erstellen ===")
np.random.seed(100)

# Erzeuge Daten für 35 Tage (einschließlich mehrerer Wochenenden)
dates = pd.date_range('2023-03-01', periods=35, freq='D')
df = pd.DataFrame({
    'date': dates,
    'sales': np.random.randint(1000, 5000, 35)
})

# Extrahiere den Wochentag
df['weekday'] = df['date'].dt.weekday
df['day_name'] = df['date'].dt.day_name()

# Markiere Wochentage und Wochenenden
df['is_weekend'] = df['weekday'].isin([5, 6])
df['day_type'] = df['is_weekend'].map({True: 'Wochenende', False: 'Wochentag'})

print(df.head(15))

# Gruppiere Statistiken nach Wochentag/Wochenende
print("n=== Wochentag vs. Wochenende Umsatzvergleich ===")
day_type_stats = df.groupby('day_type')['sales'].agg(['sum', 'mean', 'count'])
day_type_stats.columns = ['Gesamtumsatz', 'Durchschnittsumsatz', 'Tage']
print(day_type_stats)

# Detaillierte Statistiken für jeden Tag
print("n=== Verkaufsstatistiken nach Wochentag ===")
weekday_stats = df.groupby('weekday')['sales'].agg(['sum', 'mean'])
weekday_stats.index = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
weekday_stats.columns = ['Gesamtverkäufe', 'Durchschnittsverkäufe']
print(weekday_stats.round(2))

# Daten für alle Wochenenden filtern
print("n=== Wochenenddaten ===")
weekend_data = df[df['is_weekend']][['date', 'day_name', 'sales']]
print(weekend_data)

Ausgabe:

=== 创建交易数据 ===
         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

Code-Erklärung:

  • isin([5, 6])Sie können feststellen, ob es ein Wochenende ist (Samstag=5, Sonntag=6).
  • Daten für Wochentage und Wochenenden zeigen oft deutliche Unterschiede, was eine wichtige Dimension in der Geschäftsanalyse ist.
  • groupby().agg()Sie können Gruppenstatistiken nach Wochentag durchführen.

Beispiel 3: Eingehende Analyse wöchentlicher Muster

Beispiel

import pandas as pd
import numpy as np

# Erstellen Sie einen längeren Datensatz
print("=== Erstellen Sie einen 90-Tage-Datensatz ===")
np.random.seed(200)

# 90 Tage Daten generieren
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)
})

# Wochentagsmerkmale extrahieren
df['weekday'] = df['date'].dt.weekday
df['is_weekend'] = df['weekday'].isin([5, 6])

# 1. Berechne die durchschnittliche Leistung für jeden Wochentag
print("=== Leistungsanalyse für jeden Tag der Woche ===")
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 = ['Durchschnittliche Besucher', 'Durchschnittlicher Umsatz']
print(weekday_analysis)

# 2. Ermittle die verkehrsreichsten und ruhigsten Tage der Woche
print("n=== Verkehrsreichste und ruhigste Tage der Woche ===")
best_day = weekday_analysis['Average Revenue'].idxmax()
worst_day = weekday_analysis['Average Revenue'].idxmin()
print(f"Höchster Umsatz: {best_day}, Durchschnitt {weekday_analysis.loc[best_day, 'Average Revenue']:,.0f}")
print(f"Niedrigster Umsatz: {worst_day}, Durchschnitt {weekday_analysis.loc[worst_day, 'Average Revenue']:,.0f}")

# 3. Vergleich von Wochentagen und Wochenenden
print("n=== Eingehender Vergleich von Wochentagen vs Wochenenden ===")
weekend_comparison = df.groupby('is_weekend').agg({
    'visitors': ['mean', 'std', 'sum'],
    'revenue': ['mean', 'std', 'sum']
}).round(2)
weekend_comparison.index = ['Wochentag', 'Wochenende']
print(weekend_comparison)

# 4. Typ des Tages markieren
print("n=== Tagestyp markieren ===")
def get_day_type(weekday):
    if weekday < 5:
        return &'Wochentag'
    elif weekday == 5:
        return &'Samstag'
    else:
        return &'Sonntag'

df['day_category'] = df['weekday'].apply(get_day_type)

# Wöchentlicher Trend
print("n===Wöchentlicher Umsatztrend===")
df['week'] = df['date'].dt.isocalendar().week
weekly_trend = df.pivot_table(
    values='revenue',
    index='day_category',
    columns='week',
    agg='sum'
)
print(weekly_trend.head())

Ausgabe:

=== 创建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

Code-Erklärung:

  • Mittwoch hat den höchsten durchschnittlichen Umsatz, während der Sonntag den niedrigsten durchschnittlichen Umsatz hat.
  • Die Gesamtleistung an Wochentagen ist besser als an Wochenenden, was ein bemerkenswerter Punkt in der Geschäftsanalyse ist.
  • Sie könnenpivot_tableum die Trendänderungen der verschiedenen Wochentage über verschiedene Wochen hinweg zu analysieren.

Hinweise

Wichtige Hinweise:

  • Series.dt.weekdayKann nur auf Series mit dtype datetime64 verwendet werden.
  • Der Rückgabewert liegt im Bereich 0-6, wobei 0 für Montag und 6 für Sonntag steht.
  • Wenn Sie den Namen des Wochentags benötigen, verwenden Siedt.day_name()Methode.
  • Bei der Verarbeitung von Daten mit fehlenden Werten (NaT),...dt.weekdayAn den entsprechenden Positionen wird NaT zurückgegeben.
  • Hinweis:weekdayDas Attribut entspricht demdayofweekAttribut; sie sind äquivalent, nur die Namen unterscheiden sich.

Pandas 常用函数Pandas Häufige Funktionen

Andere Erweiterungen