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

pandas groupby调用mean()计算均值时结果出现inf值如何解决

异常成因

你之前排查0值属于方向错误,该异常和0值没有关联,核心原因有两点:

  • 参与计算的原始数据存在脏值:部分行的Latitude、Longitude字段被解析为浮点数无穷值(np.inf/-np.inf),这类值不属于0,常规排查很容易遗漏。pandas分组时会将经纬度同为inf的记录聚合为单独一组,就出现了结果最后一行经纬度均为inf的异常记录。
  • 结果行数少于预期的原因是pandasgroupby的默认机制:当分组键(也就是这里的Latitude、Longitude)为空值NaN时,对应行会被直接排除在聚合结果外,不会参与计算。你看到的行数差,就是经纬度被解析为NaN的格点被丢弃导致的。
    另外你代码里as_index=False后再接.reset_index()属于冗余写法,as_index=False已经不会将分组键设置为索引,该写法不会引发计算错误,但没有必要。
解决方法

按以下步骤排查修复即可:

  1. 先定位异常数据源,在分组前执行以下代码,筛出所有经纬度为非有限值(包含NaN、inf、-inf)的记录,直接定位是哪个源文件、哪部分数据出了问题:
import numpy as np
# 筛选经纬度无效的异常行
error_rows = df_00_10[
    (~np.isfinite(df_00_10['Latitude'])) | 
    (~np.isfinite(df_00_10['Longitude']))
]
# 统计异常行来自哪些文件
print(error_rows['filename'].value_counts())
  1. 根据定位到的异常来源修正数据读入逻辑:如果是CSV文件末尾存在多余尾注、空行、错位表头导致的解析错误,在使用pd.read_csv()读入文件时添加skipfooter、skiprows参数跳过无效行即可;如果是个别格点经纬度解析错误,由于你明确所有数据集的经纬度格网完全一致,可以直接用一份确认无异常的经纬度列,覆盖所有读入文件的对应字段,从根源避免解析偏差。
  2. 聚合前增加一层有效数据过滤,避免异常值进入计算流程,修正后的参考代码如下:
import numpy as np
import pandas as pd

def Timeseries(dfn):
    # 先过滤经纬度为非有限值的无效行
    df_valid = dfn[
        np.isfinite(dfn['Latitude']) & 
        np.isfinite(dfn['Longitude'])
    ]
    # 筛选目标年份文件
    df_00_10 = df_valid.loc[df_valid['filename'].isin([
        '1964_12_O18grid.csv','1965_12_O18grid.csv',
        '1967_12_O18grid.csv','1968_12_O18grid.csv',
        '1969_12_O18grid.csv'
    ])]
    # 分组计算均值,移除冗余的reset_index
    dfalT = df_00_10.groupby(['Latitude', 'Longitude'], as_index=False)['Value'].mean()
    return dfalT

计算完成后校验结果行数为64801、不存在inf/NaN的经纬度记录,即为符合预期的结果。

内容的提问来源于stack exchange,提问作者Weiss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:09:24