Pandas Series.dt.year-Attribut

Pandas 通用函数Pandas Häufige Funktionen


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

import pandas as pd

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

  1. Zuerst müssen Sie die Series in den Typ datetime64 konvertieren, bevor Sie den dt-Accessor verwenden können.
  2. dt.yearDie zurückgegebene Series ist vom Typ Integer, wobei jede Zeile dem Jahr des ursprünglichen Datums entspricht.
  3. Verkettete Aufrufe können genutzt werden, um Konvertierung und Extraktion in einem Schritt zu erreichen.

Beispiel 2: Daten nach Jahr filtern

Beispiel

import pandas as pd
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 pandas as pd
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:

  • Durchgroupby().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 zuerstpd.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.

Pandas 常用函数Pandas Häufige Funktionen

Andere Erweiterungen