Python|基于python利用多年降水日数据计算逐年逐季节各站点降水日数

文摘   教育   2024-07-24 14:39   广东  

第   八   星   系

Python|基于python利用多年降水日数据计算逐年逐季节各站点降水日数


作者:第八星系-李智

邮箱:lizhi258147369@163.com




本文将用该文献提供的标准,基于python利用多年降水日数据计算逐年逐季节各站点降水日数。

部分元数据如图所示:

import pandas as pdimport numpy as npimport calendarfrom datetime import datetime
# 加载数据file_path = 'PRE_DAYS.xlsx'df = pd.read_excel(file_path, index_col=0)  # 假设第一列是日期
# 确保日期列是 datetime 类型df.index = pd.to_datetime(df.index)
# 定义季节划分seasons = {    'spring': (3, 4, 5),    'summer': (6, 7, 8),    'autumn': (9, 10, 11),    'winter': (12, 1, 2),}
# 定义降水等级def precipitation_level(rainfall):    if 0.1 <= rainfall < 10.0:        return '小雨'    elif 10.0 <= rainfall < 20.0:        return '中雨'    elif 25.0 <= rainfall < 50.0:        return '大雨'    elif rainfall >= 50.0:        return '暴雨'    else:        return '无降水'
# 应用函数以确定降水等级df = df.apply(lambda x: x.map(precipitation_level))
# 创建多层索引的 DataFrame 来存储结果index = pd.MultiIndex.from_product(    [range(1964, 1978), ['spring', 'summer', 'autumn', 'winter'], ['小雨', '中雨', '大雨', '暴雨']],    names=["Year", "Season", "Precipitation_Type"])results = pd.DataFrame(index=index)
# 遍历每个季节和每一年for season, months in seasons.items():    for year in range(1964, 1978):        if season == 'winter':            # 特殊处理冬季跨年情况            start_date = f"{year-1}-12-01"  # 上一年的121            feb_days = calendar.monthrange(year, 2)[1]  # 当年2月的最后一天            end_date = f"{year}-02-{feb_days}"        else:            start_date = f"{year}-{min(months)}-01"            end_date = f"{year}-{max(months)}-{calendar.monthrange(year, max(months))[1]}"
       # 选取当前季节和年份的数据        season_data = df[start_date:end_date]
       # 仅选择季节对应月份        season_data = season_data[season_data.index.month.isin(months)]
       for column in df.columns:            # 计算每种类型的降水日数            counts = season_data[column].value_counts()            for precipitation_type in ['小雨', '中雨', '大雨', '暴雨']:                idx = (year, season, precipitation_type)                results.loc[idx, column] = counts.get(precipitation_type, 0)
# 重排列 DataFrame 以方便查看results = results.sort_index().fillna(0).astype(int)  # 填充空值并转换为整数
# 输出结果print(results)
# 可选:将结果保存到新的 Excel 文件results.to_excel('pre1.xlsx')

部分统计结果如图所示:



后台私信第八星系

群内每日更新分享数据

进群请勿回复 第八星系 以外字词


本文编辑| 枫阁



第八星系人造大气理论爱好者
记录与交流python、matlab等科研工具。记录与交流大气科学的学科知识
 最新文章