使用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
相关产品推荐
相关产品推荐

