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

使用Pandas求经纬度对对应SPEI均值时仅返回5行结果的问题

解决Pandas按经纬度分组仅返回少量结果的问题

可能的原因及修复方案

1. 经纬度浮点精度差异

浮点数值的微小偏差(比如30.12345和30.1234500001)会被判定为不同分组,导致大量唯一对被拆分。可以通过固定小数位数统一精度:

# 保留4位小数统一经纬度精度
df['lat'] = df['lat'].round(4)
df['lon'] = df['lon'].round(4)

# 重新分组计算均值
result = df.groupby(['lat', 'lon'], as_index=False)['spei'].mean()

2. 数据存在空值或异常值

若lat/lon/spei列有大量空值,会导致有效分组数量骤降。先排查并处理空值:

# 查看各关键列的空值数量
print(df[['lat', 'lon', 'spei']].isnull().sum())

# 剔除含空值的行(或根据业务需求填充)
df_clean = df.dropna(subset=['lat', 'lon', 'spei'])

# 重新执行分组计算
result = df_clean.groupby(['lat', 'lon'], as_index=False)['spei'].mean()

3. 分组代码逻辑错误

检查是否误写分组条件,比如仅用单个列分组、或额外添加了过滤条件。确保代码逻辑为:

# 标准分组写法,as_index=False直接生成带列名的DataFrame
result = df.groupby(['lat', 'lon'], as_index=False)['spei'].mean()

4. 数据被意外过滤

检查分组前是否有其他数据过滤步骤(比如限定年份、筛选特定区域),导致大部分经纬度对被排除。可以先确认原始数据的唯一经纬度数量:

# 查看原始数据中唯一经纬度对的总数
unique_pairs = df[['lat', 'lon']].drop_duplicates().shape[0]
print(f"原始数据共有{unique_pairs}个唯一经纬度对")

若该数值远大于5,说明前面的步骤存在数据过滤遗漏。

5. 版本或内存问题

老版本Pandas处理超大数据集时可能出现分组异常,建议升级到稳定版:

pip install --upgrade pandas

若内存不足导致分组数据丢失,可尝试分块处理:

chunk_size = 100000
result_list = []

# 分块读取并计算分组均值
for chunk in pd.read_csv('your_data.csv', chunksize=chunk_size):
    chunk['lat'] = chunk['lat'].round(4)
    chunk['lon'] = chunk['lon'].round(4)
    chunk_result = chunk.groupby(['lat', 'lon'])['spei'].mean()
    result_list.append(chunk_result)

# 合并分块结果,再次计算全局均值
final_result = pd.concat(result_list).groupby(level=[0,1]).mean().reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:36:28