Pandas Series.dt.year-Attribut
Series.dt.yearwird in Pandas verwendet, umdas Jahr aus dem Datum-und-Uhrzeit-Attribut zu extrahieren. Es ist Teil des dt-Accessors und kann schnell Jahresinformationen aus einer Series vom Typ datetime extrahieren.
Bei der Analyse von Zeitreihendaten ist es oft notwendig, Daten nach Jahr zu gruppieren, zu filtern oder zu aggregieren.dt.yearDieses Attribut macht solche Operationen einfach und effizient.
Wortdefinition: yearBedeutet "Jahr", d. h. gibt den Jahresanteil des Datums zurück.
Grundlegende Syntax und Parameter
Series.dt.yearEs ist ein Attribut des dt-Accessors von Series, das zum Extrahieren des Jahres verwendet wird.
Syntaxformat
Series.dt.year
Parameterbeschreibung
Dieses Attribut erfordert keine Parameter; es greift direkt auf die Jahresinformationen einer datetime-Series zu.
Beschreibung des Rückgabewerts
- Rückgabewert: Gibt eine Integer-Series zurück, die das Jahr enthält.
- Wirkung: Extrahiert den Jahresanteil aus einer Series vom Typ datetime64 und gibt eine 4-stellige Ganzzahl zurück.
Beispiele
Lassen Sie uns durch eine Reihe von Beispielen von einfach bis komplex gründlich meistern,Series.dt.yeardie Verwendung von.
Beispiel 1: Grundlegende Verwendung - Jahr extrahieren
Beispiel
# 1. Erstellen einer datetime Series
print("=== datetime Series erstellen ===")
dates = pd.Series([
'2023-01-15',
'2023-05-20',
'2022-11-30',
'2021-07-10',
'2024-03-25'
])
# In datetime-Typ umwandeln
datetime_ = pd.to_datetime(dates)
print("Originaldatum:")
print(datetime_series)
# 2. dt.year verwenden, um das Jahr zu extrahieren
print("n=== Jahr mit dt.year extrahieren ===")
years = datetime_series.dt.year
print("Jahr:")
print(years)
print(f"Typ: {years.dtype}")
# 3. Direkter Zugriff auf datetime Series
print("n=== Direkter verketteter Aufruf ===")
years_direct = pd.to_datetime(dates).dt.year
print(years_direct)
Ausgabe:
=== 创建日期时间 Series === 0 2023-01-15 1 2023-05-20 2 2022-11-30 3 2021-07-10 4 2024-03-25 dtype: datetime64[ns] === 使用 dt.year 提取年份 === 年份: 0 2023 1 2023 2 2022 3 2021 4 2024 dtype: int64 === 直接链式调用 === 0 2023 1 2023 2 2022 3 2021 4 2024 dtype: int64
Codeanalyse:
- Zuerst müssen Sie die Series in den Typ datetime64 konvertieren, bevor Sie den dt-Accessor verwenden können.
dt.yearDie zurückgegebene Series ist vom Typ Integer, wobei jede Zeile dem Jahr des ursprünglichen Datums entspricht.- Verkettete Aufrufe können genutzt werden, um Konvertierung und Extraktion in einem Schritt zu erreichen.
Beispiel 2: Daten nach Jahr filtern
Beispiel
import numpy as np
# Umsatzdaten erstellen
print("=== Verkaufsdaten-Beispiel ===")
df = pd.DataFrame({
'order_id': [f'ORD-{i:04d}' for i in range(1, 11)],
'order_date': pd.date_range('2022-01-01', periods=10, freq='MS'),
'sales': [1200, 1500, 1800, 2100, 1900, 2300, 2500, 2800, 3100, 3500]
})
print(df)
# Jahr extrahieren
print("n=== Jahr-Spalte hinzufügen ===")
df['year'] = df['order_date'].dt.Jahr
print(df)
# Nach Jahr filtern
print("n=== Bestellungen für 2023 filtern ===")
orders_2023 = df[df['year'] == 2023]
print(orders_2023)
# Nach Jahr gruppieren und zählen
print("n=== Umsatz nach Jahr berechnen ===")
yearly_sales = df.groupby('year')['sales'].sum()
print(yearly_sales)
# Mehrere Jahre filtern
print("n=== Bestellungen für 2022 und 2024 filtern ===")
selected_years = df[df['year'].isin([2022, 2024])]
print(selected_years)
Ausgabe:
=== 销售数据示例 ===
order_id order_date sales
0 ORD-0001 2022-01-01 1200
1 ORD-0002 2022-02-01 1500
2 ORD-0003 2022-03-01 1800
3 ORD-0004 2022-04-01 2100
4 ORD-0005 2022-05-01 1900
5 ORD-0006 2022-06-01 2300
6 ORD-0007 2022-07-01 2500
7 ORD-0008 2022-08-01 2800
8 ORD-0009 2022-09-01 3100
9 ORD-0010 2022-10-01 3500
=== 添加年份列 ===
order_id order_date sales year
0 ORD-0001 2022-01-01 1200 2022
1 ORD-0002 2022-02-01 1500 2022
2 ORD-0003 2022-03-01 1800 2022
3 ORD-0004 2022-04-01 2100 2022
4 ORD-0005 2022-05-01 1900 2022
5 ORD-0006 2022-06-01 2300 2022
6 ORD-0007 2022-07-01 2500 2022
7 ORD-0008 2022-08-01 2800 2022
8 ORD-0009 2022-09-01 3100 2022
9 ORD-0010 2022-10-01 3500 2022
=== 筛选 2023 年的订单 ===
Empty DataFrame
Columns: [order_id, order_date, sales, year]
Index: []
=== 按年份统计销售额 ===
year
2022 22900
Name: sales, dtype: int64
=== 筛选 2022 和 2024 年的订单 ===
order_id order_date sales year
0 ORD-0001 2022-01-01 1200 2022
1 ORD-0002 2022-02-01 1500 2022
2 ORD-0003 2022-03-01 1800 2022
3 ORD-0004 2022-04-01 2100 2022
4 ORD-0005 2022-05-01 1900 2022
5 ORD-0006 2022-06-01 2300 2022
6 ORD-0007 2022-07-01 2500 2022
7 ORD-0008 2022-08-01 2800 2022
8 ORD-0009 2022-09-01 3100 2022
9 ORD-0010 2022-10-01 3500 2022
Codeanalyse:
- Nach der Extraktion kann das Jahr gefiltert, gruppiert und wie eine normale numerische Spalte verarbeitet werden.
isin()Mehrere Jahre können gefiltert werden.- Unterstützt Vergleichsoperatoren (>, =, <=) für die Bereichsfilterung.
Beispiel 3: Jahresbezogene Analyse
Beispiel
import numpy as np
# Einen komplexeren Datensatz erstellen
print("=== Erstelle einen Datensatz mit Daten aus mehreren Jahren ===")
np.random.seed(42)
# Generiere 5 Jahre an Daten
dates = pd.date_range('2020-01-01', '2024-12-31', freq='D')
df = pd.DataFrame({
'date': dates,
'temperature': np.random.uniform(10, 35, len(dates)),
'sales': np.random.randint(100, 500, len(dates))
})
# Jahr extrahieren
df['year'] = df['date'].dt.Jahr
print(f"Datensatzgröße: {len(df)} Datensätze")
print(f"Jahresbereich: {df['year'].min()} - {df['year'].max()}")
# Statistiken pro Jahr
print("n=== Statistiken pro Jahr ===")
yearly_stats = df.groupby('year').agg({
'temperature': ['mean', 'min', 'max'],
'sales': ['sum', 'mean', 'count']
}).round(2)
yearly_stats.columns = ['_'.join(col).strip() for col in yearly_stats.columns.values]
print(yearly_stats)
# Datenmenge für jedes Jahr und jeden Monat
print("n=== Anzahl der Datensätze nach Jahr und Monat ===")
df['month'] = df['date'].dt.month
monthly_counts = df.groupby(['year', 'month']).size().unstack(fill_value=0)
print(monthly_counts)
Ausgabe:
=== 创建包含多年数据的数据集 ===
数据集大小: 1826 条记录
年份范围: 2020 - 2024
=== 按年份统计 ===
temperature_mean temperature_min temperature_max sales_sum sales_mean sales_count
year
2020 22.47 10.06 34.74 98500 266.31 366
2021 22.56 10.08 34.83 99500 272.60 365
2022 22.43 10.01 34.90 100100 274.11 365
2023 22.53 10.00 34.95 100600 275.62 365
2024 15.90 10.03 34.83 27500 268.93 102
=== 各年各月记录数 ===
month 1 2 3 4 5 6 7 8 9 10 11 12
year
2020 31 29 31 30 31 30 31 31 30 31 30 31
2021 31 28 31 30 31 30 31 31 30 31 30 31
2022 31 28 31 30 31 30 31 31 30 31 30 31
2023 31 28 31 30 31 30 31 31 30 31 30 31
2024 31 29 31 30 31 30 31 31 30 31 30 31
Codeanalyse:
- Durch
groupby().agg()Mehrdimensionale Statistiken können nach Jahr durchgeführt werden. groupby(['year', 'month']).size().unstack()Eine Kreuztabelle für Jahr und Monat kann erstellt werden.- Die Daten für 2024 umfassen nur 102 Datensätze, da die Daten bis April 2024 (vor dem aktuellen Datum) generiert werden.
Hinweise
Wichtige Hinweise:
Series.dt.yearEs kann nur auf Series vom Typ datetime64 angewendet werden.- Wenn die Series nicht vom Typ datetime ist, müssen Sie zuerst
pd.to_datetime()um zu konvertieren.- Das extrahierte Jahr ist eine 4-stellige Ganzzahl und kann direkt in numerischen Operationen und Vergleichen verwendet werden.
- Bei der Verarbeitung von Daten mit fehlenden Werten (NaT),...
dt.yearwird NaT an der entsprechenden Position zurückgegeben.
Andere Erweiterungen
Pandas Häufige Funktionen