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

如何查找并删除pandas dataframe中超范围的经纬度异常数据

Pandas 经纬度数据集超范围异常值清洗方案

合法取值范围说明

首先明确WGS84坐标系下经纬度的合理取值阈值,超出即为异常数据:

  • 纬度(通常列名为lat/latitude):取值区间为 [-90, 90],-90为南极点,90为北极点
  • 经度(通常列名为lon/lng/longitude):取值区间为 [-180, 180],-180/180为国际日期变更线

第一步:先定位排查异常数据

不建议直接删除异常值,先统计异常规模、查看异常样例,避免误删有效数据:

# 替换成你自己表中对应的经纬度列名
LAT_COL = 'lat'
LON_COL = 'lon'

# 筛选所有超范围的异常行
abnormal_df = df[
    (df[LAT_COL] < -90) | (df[LAT_COL] > 90) |
    (df[LON_COL] < -180) | (df[LON_COL] > 180)
]

# 输出异常统计信息
print(f"总数据量:{len(df)},异常数据量:{len(abnormal_df)},异常占比:{len(abnormal_df)/len(df):.2%}")
# 打印前10条异常样例,方便排查异常成因
print("异常数据样例:")
print(abnormal_df.head(10))

如果需要单独统计纬度、经度的异常比例,可以用以下代码:

lat_abnormal_cnt = ((df[LAT_COL] < -90) | (df[LAT_COL] > 90)).sum()
lon_abnormal_cnt = ((df[LON_COL] < -180) | (df[LON_COL] > 180)).sum()
print(f"纬度异常行数:{lat_abnormal_cnt},经度异常行数:{lon_abnormal_cnt}")

注意:如果异常占比超过1%,先排查数据源问题,常见成因包括列名匹配错误、经纬度存为放大1e6的整数值、误将弧度值作为角度值存入、字段类型解析错误等,不要直接批量删除导致数据大量损失。

第二步:过滤异常数据生成清洗后数据集

确认异常数据为无效值后,通过布尔索引保留合法范围的数据即可:

# 保留经纬度同时在合法区间的行,重置索引避免索引断层
df_clean = df[
    df[LAT_COL].between(-90, 90, inclusive='both') &
    df[LON_COL].between(-180, 180, inclusive='both')
].reset_index(drop=True)

清洗完成后就可以直接计算OSM导出用的bounding box,不会再出现范围越界问题:

# OSM要求的bbox格式为(左/西经, 下/南纬, 右/东经, 上/北纬)
osm_bbox = (
    df_clean[LON_COL].min(),
    df_clean[LAT_COL].min(),
    df_clean[LON_COL].max(),
    df_clean[LAT_COL].max()
)

额外注意事项

  • 如果需要保留经纬度为空的行单独处理,在筛选条件中追加| df[LAT_COL].isna() | df[LON_COL].isna()即可,上述默认逻辑会把空值归为异常过滤
  • 不要直接对全表使用dropna()删除空值,会误删其他字段为空但经纬度正常的有效数据
  • 如果你的数据集用的不是WGS84坐标系(比如GCJ02、BD09),经纬度合法范围和上述阈值一致,不需要调整筛选条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:36:21