Attribut Pandas Series.dt.year

Pandas 通用函数Fonctions courantes de Pandas


Series.dt.yearest utilisé dans Pandas pourextraire l'année de l'attribut date et heure. Il fait partie de l'accesseur dt et peut extraire rapidement les informations sur l'année d'une Series de type datetime.

Dans l'analyse de données de séries temporelles, il est souvent nécessaire de regrouper, filtrer ou agréger les données par année.dt.yearCet attribut rend ces opérations simples et efficaces.

Définition du mot: yearSignifie « year », c'est-à-dire renvoie la partie année de la date.


Syntaxe de base et paramètres

Series.dt.yearIl s'agit d'un attribut de l'accesseur dt de Series, utilisé pour extraire l'année.

Format de syntaxe

Series.dt.year

Description du paramètre

Cet attribut ne nécessite aucun paramètre ; il accède directement aux informations sur l'année d'une Series de type datetime.

Description de la valeur de retour

  • Valeur de retour: Renvoie une Series d'entiers contenant l'année.
  • Effet: Extrait la partie année d'une Series de type datetime64 et renvoie un entier à 4 chiffres.

Exemples

Maîtrisons à fond, à travers une série d'exemples du plus simple au plus complexe,Series.dt.yearl'utilisation de.

Exemple 1 : Utilisation de base - Extraire l'année

Exemple

import pandas as pd

# 1. Créer une Series datetime
print("=== Créer une Series datetime ===")
dates = pd.Series([
    '2023-01-15',
    '2023-05-20',
    '2022-11-30',
    '2021-07-10',
    '2024-03-25'
])

# Convertir en type datetime
datetime_series = pd.to_datetime(dates)
print("Date d'origine :")
print(datetime_series)

# 2. Utiliser dt.year pour extraire l'année
print("n=== Extraire l'année avec dt.year ===")
years = datetime_series.dt.year
print("Année :")
print(years)
print(f"Type: {years.dtype}")

# 3. Accéder directement à partir d'une Series datetime
print("n=== Appel chaîné direct ===")
years_direct = pd.to_datetime(dates).dt.year
print(years_direct)

Sortie :

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

Analyse du code :

  1. Tout d'abord, vous devez convertir la Series au type datetime64 avant de pouvoir utiliser l'accesseur dt.
  2. dt.yearLa Series retournée est de type entier, chaque ligne correspondant à l'année de la date d'origine.
  3. Des appels chaînés peuvent être utilisés pour réaliser une conversion et une extraction en une seule étape.

Exemple 2 : Filtrer les données par année

Exemple

import pandas as pd
import numpy as np

# Créer des données de ventes
print("=== Exemple de données de ventes ===")

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)

# Extraire l'année
print("n=== Ajouter une colonne année ===")
df['year'] = df['order_date'].dt.année
print(df)

# Filtrer par année
print("n=== Filtrer les commandes pour 2023 ===")
orders_2023 = df[df['year'] == 2023]
print(orders_2023)

# Grouper et compter par année
print("n=== Calculer les ventes par année ===")
yearly_sales = df.groupby('year')['sales'].sum()
print(yearly_sales)

# Filtrer plusieurs années
print("n=== Filtrer les commandes pour 2022 et 2024 ===")
selected_years = df[df['year'].isin([2022, 2024])]
print(selected_years)

Sortie :

=== 销售数据示例 ===
     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

Analyse du code :

  • Après extraction, l'année peut être filtrée, regroupée et traitée comme une colonne numérique normale.
  • isin()Plusieurs années peuvent être filtrées.
  • Prend en charge les opérateurs de comparaison (>, =, <=) pour le filtrage par plage.

Exemple 3 : Analyse liée aux années

Exemple

import pandas as pd
import numpy as np

# Créer un jeu de données plus complexe
print("=== Créer un jeu de données contenant plusieurs années de données ===")
np.random.seed(42)

# Générer 5 années de données
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))
})

# Extraire l'année
df['year'] = df['date'].dt.année

print(f"Taille du jeu de données : {len(df)} enregistrements")
print(f"Plage d'années : {df['year'].min()} - {df['year'].max()}")

# Statistiques par année
print("n=== Statistiques par année ===")
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)

# Volume de données pour chaque année et chaque mois
print("n=== Nombre d'enregistrements par année et par mois ===")
df['month'] = df['date'].dt.month
monthly_counts = df.groupby(['year', 'month']).size().unstack(fill_value=0)
print(monthly_counts)

Sortie :

=== 创建包含多年数据的数据集 ===
数据集大小: 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

Analyse du code :

  • Viagroupby().agg()Des statistiques multidimensionnelles peuvent être réalisées par année.
  • groupby(['year', 'month']).size().unstack()Un tableau croisé par année et par mois peut être créé.
  • Les données de 2024 ne comportent que 102 enregistrements, car les données sont générées jusqu'en avril 2024 (avant la date actuelle).

Notes

Remarques importantes :

  • Series.dt.yearIl ne peut être utilisé que sur des Series de type datetime64.
  • Si la Series n'est pas de type datetime, vous devez d'abord utiliserpd.to_datetime()pour convertir.
  • L'année extraite est un entier à 4 chiffres et peut être directement utilisée dans des opérations numériques et des comparaisons.
  • Lors du traitement de données contenant des valeurs manquantes (NaT),dt.yearNaT sera renvoyé à la position correspondante.

Pandas 常用函数Fonctions courantes de Pandas

Autres extensions