如何在Python DataFrame中从Object类型列提取坐标(无需迭代)
高效提取DataFrame中JSON格式的坐标值
你当前用字符串切片提取坐标的方式太依赖固定字符位置,一旦JSON格式出现变动(比如多了空格、键的顺序调整)就会失效,这里给你几个更稳健且无需手动迭代的方案:
方案一:用pd.json_normalize解析JSON(最稳健)
这个方法是pandas官方推荐的处理JSON列的方式,能完美适配标准JSON格式,不受键顺序、空格等因素影响:
import pandas as pd import json # 将JSON字符串列转为字典列表 location_dicts = trip_data['pickuplocation'].apply(json.loads) # 展开JSON为结构化DataFrame normalized_df = pd.json_normalize(location_dicts) # 拆分coordinates数组为单独的纬度、经度列 trip_data['latitude'] = normalized_df['coordinates'].str[0].astype(float) trip_data['longitude'] = normalized_df['coordinates'].str[1].astype(float)
方案二:用正则表达式提取(速度快)
如果你的JSON格式非常固定,也可以用正则直接匹配坐标数值,无需导入json模块,操作更轻量化:
import pandas as pd # 用正则匹配方括号内的两个浮点数 coords = trip_data['pickuplocation'].str.extract(r'\[([\d.]+),\s*([\d.]+)\]') # 将提取结果转为float类型并赋值给新列 trip_data['latitude'] = coords[0].astype(float) trip_data['longitude'] = coords[1].astype(float)
为什么不推荐切片方法?
切片完全依赖字符串的固定长度和字符位置,比如[31:-13]这种写法,只要JSON里多一个空格、键名长度变化,就会提取出错误的数值,容错性极差,生产环境里绝对不建议用。
内容的提问来源于stack exchange,提问作者jaya lekshmi
相关产品推荐
相关产品推荐

