Attribut Pandas Series.dt.year
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
# 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 :
- Tout d'abord, vous devez convertir la Series au type datetime64 avant de pouvoir utiliser l'accesseur dt.
dt.yearLa Series retournée est de type entier, chaque ligne correspondant à l'année de la date d'origine.- 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 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 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 :
- Via
groupby().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 utiliser
pd.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.
Autres extensions
Fonctions courantes de Pandas