如何用Python实现月度数据干湿季拆分与结果文件导出

实现思路
整个实现用pandas库做表格处理即可,对新手友好,不需要写复杂的底层逻辑,核心步骤如下:
- 先读取月度风速数据集,自动把年月列解析成Python可识别的时间格式,方便后续提取年、月维度信息
- 按规则给每条数据打分类标签:
- 月份在5-10月的标记为干季,直接归属对应自然年的干季分组
- 月份在11月、12月、1-4月的标记为湿季,这里要注意跨年问题:11-12月属于「当年到次年」的湿季,1-4月属于「上一年到当年」的湿季,必须给同个湿季的数据打统一的分组标签,否则会把同一个湿季的数据拆到两个自然年里,后续统计就会出错
- 把打了标签的数据按干、湿季拆成两个独立表格,导出成通用格式文件即可,推荐导出为csv格式,不需要额外安装软件,用Excel就能直接打开查看。
前期准备
先打开电脑的命令提示符,执行下面的命令安装需要的依赖库:pip install pandas
如果你的原始数据是xlsx格式的Excel文件,再多装一个读取依赖:pip install openpyxl
参考代码
代码里加了详细注释,你只要修改开头配置部分的文件路径、列名和自己的数据匹配即可,其他逻辑不需要改动:
import pandas as pd # -------------------------- 👇 这里改成你自己的文件配置 👇 -------------------------- file_path = "你的月度风速数据文件路径.csv" # 后缀是.xlsx就改成对应文件名 date_col = "月份" # 你数据里存储年月的列的列名,比如叫"日期""观测时间"就对应替换 wind_col = "平均风速" # 你数据里存储平均风速值的列的列名 # -------------------------- 👆 改完上面这部分就能直接运行 👆 -------------------------- # 读取数据,自动解析日期列 if file_path.endswith(".csv"): df = pd.read_csv(file_path, parse_dates=[date_col]) else: df = pd.read_excel(file_path, parse_dates=[date_col]) # 提取每条数据的年份、月份 df["自然年"] = df[date_col].dt.year df["月份"] = df[date_col].dt.month # 给每条数据打上季节类型、所属季节分组的标签 df["季节类型"] = "" df["所属季节分组"] = "" for i, row in df.iterrows(): m = row["月份"] y = row["自然年"] if 5 <= m <= 10: df.loc[i, "季节类型"] = "干季" df.loc[i, "所属季节分组"] = f"{y}年干季" else: df.loc[i, "季节类型"] = "湿季" if m >= 11: # 11、12月归到当年-次年的湿季 df.loc[i, "所属季节分组"] = f"{y}-{y+1}年湿季" else: # 1-4月归到上一年-当年的湿季 df.loc[i, "所属季节分组"] = f"{y-1}-{y}年湿季" # 拆分干季、湿季表,只保留核心字段 dry_df = df[df["季节类型"] == "干季"][["所属季节分组", date_col, wind_col]] wet_df = df[df["季节类型"] == "湿季"][["所属季节分组", date_col, wind_col]] # 导出文件,默认存在和代码同一个文件夹下,设置编码避免中文乱码 dry_df.to_csv("各年份干季风速数据.csv", index=False, encoding="utf-8-sig") wet_df.to_csv("各年份湿季风速数据.csv", index=False, encoding="utf-8-sig") print("处理完成!两个结果文件已经生成在代码所在文件夹里")
补充说明
如果你不需要导出逐月明细,想直接统计每个干季、湿季的平均风速,只要在导出前加两行分组统计的代码即可:
# 计算每个干季的平均风速 dry_season_avg = dry_df.groupby("所属季节分组")[wind_col].mean().reset_index() dry_season_avg.to_csv("各干季平均风速统计.csv", index=False, encoding="utf-8-sig") # 计算每个湿季的平均风速 wet_season_avg = wet_df.groupby("所属季节分组")[wind_col].mean().reset_index() wet_season_avg.to_csv("各湿季平均风速统计.csv", index=False, encoding="utf-8-sig")
运行后直接得到每个季节周期的平均风速统计结果,不需要手动计算。
内容的提问来源于stack exchange,提问作者Kalen Eyre
相关产品推荐
相关产品推荐

