You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何按日/月/年时间频率筛选DataFrame的datetime日期列

Pandas多时间频率数据筛选实现方案

前置处理:标准化日期格式

原始数据日期列为dd/mm/yyyy格式字符串,需先转换为pandas原生datetime类型才能进行时间维度运算,假设日期列名为date、数值列名为value,转换代码如下:

import pandas as pd
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')

各频率筛选实现

日度数据

原始数据本身就是2000-01-01至2010-01-01的连续日度记录,无需额外筛选,直接使用原DataFrame即可。可通过如下代码做数据完整性校验:

daily_df = df.copy()
print(f"日度数据范围:{daily_df['date'].min()} ~ {daily_df['date'].max()},总计{len(daily_df)}条记录")

月度数据(保留每月首日记录)

因原始数据为连续日度数据,直接筛选日期为当月1日的记录即可,日期本身已符合“当月1日”的要求,无需额外修改:

# 筛选每月首日记录
monthly_df = df[df['date'].dt.day == 1].copy()

如果需要强制统一日期格式为当月首日(适配非连续数据场景),可追加如下转换代码:

monthly_df['date'] = monthly_df['date'].astype('datetime64[M]')

年度数据(保留每年首日记录)

同理,筛选日期为1月1日的记录即可,日期本身已符合“当年1月1日”的要求:

# 筛选每年1月1日记录
yearly_df = df[(df['date'].dt.month == 1) & (df['date'].dt.day == 1)].copy()

如果需要强制统一日期格式为当年首日(适配非连续数据场景),可追加如下转换代码:

yearly_df['date'] = yearly_df['date'].astype('datetime64[Y]')

兼容方案:如果原始日度数据存在缺失,无法保证每月/每年首日存在对应记录,可使用重采样方法自动对齐日期到周期起点,取每个周期内第一条有效记录:

# 月度重采样,日期自动对齐到当月首日
monthly_df = df.resample('MS', on='date').first().reset_index()
# 年度重采样,日期自动对齐到当年1月1日
yearly_df = df.resample('YS', on='date').first().reset_index()

上述代码会自动补全所有缺失的时间周期,若不需要空周期可追加.dropna(subset=['value'])过滤无数据行。

内容的提问来源于stack exchange,提问作者Gabriel Tkacz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:45:49