如何使用Python筛选时间序列中每年9月至次年3月的区间数据
Python筛选每年9月至次年3月时间序列数据实现方法
前置依赖
使用pandas库完成数据处理,未安装可先执行安装命令:pip install pandas
完整实现步骤
1. 加载数据并标准化日期格式
首先将原始数据的日期列转换为pandas可识别的时间格式,注意根据你的日期存储格式调整dayfirst参数:如果你的日期是日/月/年格式(比如01/12/2020代表2020年12月1日)则设为True,如果是月/日/年格式(比如01/12/2020代表2020年1月12日)则设为False。
import pandas as pd # 读取本地csv文件,替换为你的实际文件路径 df = pd.read_csv("your_dataset.csv") # 转换日期列为标准时间格式 df["Date"] = pd.to_datetime(df["Date"], dayfirst=False)
2. 核心筛选逻辑
因为目标区间跨自然年度,直接按月份数值做大小判断会出现逻辑错误,直接匹配符合要求的月份即可:
- 每年1、2、3月的数据,属于上一年9月启动的跨年度区间
- 每年9、10、11、12月的数据,属于当年启动的跨年度区间
# 提取每行日期的月份 df["month_col"] = df["Date"].dt.month # 筛选目标月份的数据 result_df = df[df["month_col"].isin([1, 2, 3, 9, 10, 11, 12])].copy() # 删除临时生成的月份列 result_df.drop(columns=["month_col"], inplace=True)
可选:给每个跨年度周期打标签
如果后续需要按「当年9月-次年3月」的完整周期做分组聚合,可以给每行数据匹配对应的周期标识:
df["year_col"] = df["Date"].dt.year df["month_col"] = df["Date"].dt.month def match_period(row): m = row["month_col"] y = row["year_col"] if 1 <= m <=3: return f"{y-1}年9月-{y}年3月" elif 9 <= m <=12: return f"{y}年9月-{y+1}年3月" else: return pd.NA df["period"] = df.apply(match_period, axis=1) # 筛选后得到带周期标签的目标数据 result_df = df[df["period"].notna()].drop(columns=["year_col", "month_col"])
结果校验
筛选完成后可以执行以下命令快速校验结果是否正确,正常返回的月份统计只会包含1、2、3、9、10、11、12七个值:
print(result_df["Date"].dt.month.value_counts().sort_index())
内容的提问来源于stack exchange,提问作者meomeowo
相关产品推荐
相关产品推荐

