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

使用dataprep clean_lat_long清洗经纬度数据成功率极低,如何优化?

问题:如何提升clean_lat_long工具的经纬度数据清洗成功率?

原始经纬度数据格式

Longitude   Latitude
055.25.30E  21.19.15S
075.26.27W  40.39.08N
085.02.00W  29.44.00N

已执行代码

from dataprep.clean import clean_lat_long
dfa['lat_long'] = dfa['Latitude'] + ' ' + dfa['Longitude']
clean_lat_long(dfa, "lat_long", split=True)

清洗结果报告

Latitude and Longitude Cleaning Report:
13 values cleaned (0.09%)
15169 values unable to be parsed (99.91%), set to NaN
Result contains 13 (0.09%) values in the correct format and 15169 null values (99.91%)


解决方法
  • 手动转换为标准十进制格式
    你的数据用.分隔度、分、秒,且方向后缀在末尾,clean_lat_long对这种非标准格式兼容性较差。可以先将每个经纬度转换为十进制格式,再传入工具处理:

    def dms_to_decimal(dms_str):
        # 分离方向和数字部分
        dir_char = dms_str[-1]
        degrees, minutes, seconds = dms_str[:-1].split('.')
        # 计算十进制值
        decimal_val = int(degrees) + int(minutes)/60 + float(seconds)/3600
        # 南纬、西经取负数
        if dir_char in ('S', 'W'):
            decimal_val = -decimal_val
        return decimal_val
    
    # 分别处理纬度和经度列
    dfa['latitude_dec'] = dfa['Latitude'].apply(dms_to_decimal)
    dfa['longitude_dec'] = dfa['Longitude'].apply(dms_to_decimal)
    # 合并为标准格式字符串
    dfa['lat_long_std'] = dfa['latitude_dec'].astype(str) + ', ' + dfa['longitude_dec'].astype(str)
    

    之后用clean_lat_long处理lat_long_std列,解析成功率会显著提升。

  • 指定自定义格式参数
    查看clean_lat_long的官方文档,它支持通过format参数定义自定义DMS格式。针对你的DD.MM.SSX格式,尝试直接指定格式:

    clean_lat_long(dfa, "lat_long", split=True, format="DD.MM.SS")
    

    若工具无法自动识别方向后缀,可先手动分离方向,再传入纯数字的DMS字符串并指定格式。

  • 调整经纬度合并顺序
    你当前合并的是纬度 + 空格 + 经度,但部分地理数据工具默认解析顺序为经度 纬度,尝试调换顺序后再清洗:

    dfa['lat_long'] = dfa['Longitude'] + ' ' + dfa['Latitude']
    clean_lat_long(dfa, "lat_long", split=True)
    

    错误的顺序是导致解析失败的常见原因之一。


内容的提问来源于stack exchange,提问作者the world is not flat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:05:32