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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:36:03