Pandas执行字符串转元组代码时纬度数值显示不全如何修复
问题根因
异常由两个独立问题共同导致:
- 手写切片逻辑存在致命缺陷:原代码提取经度时用
a.find('-')定位截取起点,Python字符串find()方法找不到目标字符时会返回-1而非抛出错误,当经度为正、字符串内无负号时,截取起点直接跳到字符串末尾,解析出的数值完全错误;同时硬编码字符偏移量的写法容错性极差,字符串内空格、标点位置稍有变动就会解析失败。 - Pandas默认显示精度限制:Jupyter/Colab环境下Pandas默认仅展示浮点数前6位小数,存储在元组类型内的浮点数不会触发高精度渲染,即使数值存储正确,视觉上也会出现“数值被截断、显示不全”的效果。
修复方案
1. 替换容错性极低的逐行循环切片逻辑
不要用硬编码位置的字符串截取写法,改用更稳定的分割逻辑解析经纬度,避免找不到负号时的解析错误:
new_LNGLAT = [] for s in df['LATLNG']: # 去掉首尾大括号,按逗号分割成纬度、经度两个片段 lat_part, lng_part = s.strip('{}').split(',') # 每个片段按冒号分割,取后半段转浮点数 lat = float(lat_part.split(':')[1]) lng = float(lng_part.split(':')[1]) new_LNGLAT.append((lat, lng)) df['LATLNG'] = new_LNGLAT
如果习惯用Pandas向量化操作,可以用更简洁的写法,无需手写循环,运行效率更高:
df['LATLNG'] = df['LATLNG'].str.strip('{}').apply( lambda x: tuple(float(v.split(':')[1]) for v in x.split(',')) )
如果LATLNG字段是标准JSON格式(键带双引号),可以直接用JSON模块解析,稳定性更强:
import json df['LATLNG'] = df['LATLNG'].apply(lambda x: (json.loads(x)['lat'], json.loads(x)['lng']))
长期处理空间数据更建议把经纬度拆成独立数值列,不要存在元组里,后续做距离计算、地图可视化、空间关联时调用更方便,拆分代码参考:
df[['latitude', 'longitude']] = pd.DataFrame(df['LATLNG'].tolist(), index=df.index)
2. 调整Pandas全局显示配置,解决数值展示截断问题
在脚本最开头加入以下配置,把浮点数显示精度调到GPS坐标够用的级别,即可看到完整经纬度数值:
import pandas as pd # 设置浮点数最多展示12位小数,覆盖民用GPS最高精度要求 pd.set_option('display.float_format', '{:.12f}'.format)
如果不想修改全局配置,仅需要核对LATLNG字段的完整值,可以直接逐行打印,不会触发Pandas的显示截断:
for coord in df['LATLNG']: print(coord)
验证说明
修复后重新输出DataFrame,既不会出现经纬度解析错误的问题,也能看到完整的经纬度数值,不存在显示截断。
内容的提问来源于stack exchange,提问作者jacksojo
相关产品推荐
相关产品推荐

