Pandas Series.dt.weekday-Attribut
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
# 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:
dt.weekdayGibt eine ganze Zahl von 0 bis 6 zurück, wobei 0 für Montag und 6 für Sonntag steht.dt.day_name()Gibt den vollständigen englischen Namen des Wochentags zurück.- Sie können Abkürzungen durch String-Slicing erhalten (z. B. 'Mon', 'Tue').
Beispiel 2: Unterscheidung von Wochentagen und Wochenenden
Beispiel
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 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önnen
pivot_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 Sie
dt.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.
Andere Erweiterungen
Pandas Häufige Funktionen