Pandas计算年维度各月反照率均值并剔除无效负值问题求助
问题说明
你当前代码存在3个核心错误,直接导致没有得到预期结果:
- 分组求月均值的计算结果未赋值存储:
data_by_whole_year.groupby(...)这一行的计算结果没有被赋值给任何变量,直接被丢弃,你后续打印的还是未做聚合的全年原始数据 - 未处理无效缺测值:你提到的-9999这类无效负值没有替换为NaN,pandas的mean函数默认只会忽略NaN,不会自动过滤负值,会直接导致计算出来的均值严重偏离真实值
- 缺少导出Excel的逻辑:你需求里要求为每个年份生成单独的Excel文件,但你现有代码只有打印逻辑,完全没有写入Excel的相关代码
修正后可运行代码
import pandas as pd import numpy as np # 读取原始数据 file = pd.read_csv('file.csv', sep = ';', skiprows = 16, parse_dates = ['date']) # 预处理:将所有负值缺测值替换为NaN file['blue_sky_albedo'] = file['blue_sky_albedo'].where(file['blue_sky_albedo'] >= 0, np.nan) # 按年份循环处理 min_year = file['date'].dt.year.min() max_year = file['date'].dt.year.max() for year_XX in range(min_year, max_year + 1): # 筛选当前年份的所有数据 data_by_whole_year = file[file['date'].dt.year == year_XX] # 按月份分组求均值,结果赋值给新变量 monthly_mean = data_by_whole_year.groupby(pd.PeriodIndex(data_by_whole_year['date'], freq = "M"))['blue_sky_albedo'].mean().reset_index() # 重命名列更易读,可根据需要调整 monthly_mean.columns = ['统计月份', '月均蓝天反照率'] print(f'正在生成 {year_XX} 年的月均值文件') print(monthly_mean) # 导出到Excel文件 monthly_mean.to_excel(f'{year_XX}年蓝天反照率月均值.xlsx', index=False)
补充说明
如果需要保留原始日期格式而非Period格式,可以把groupby的逻辑替换为按年份、月份两列分组即可,mean函数会自动跳过NaN值,无需额外过滤。
内容的提问来源于stack exchange,提问作者Sultry T.
相关产品推荐
相关产品推荐

