如何从pandas DataFrame的POLYGON_WKT_TEXT列提取经纬度坐标对列表
pandas解析POLYGON WKT列生成坐标列表方案
两种高效实现方案,均无需按坐标数量拆分多列,时间复杂度为O(n),适配任意坐标点数量的行:
方案1:基于shapely的标准解析方案(推荐)
依赖专门处理WKT格式的shapely库,底层为C实现,效率高且兼容所有标准WKT格式,可自动处理换行、多余空格、带内环的多边形等复杂场景:
- 先安装依赖:
pip install shapely
- 处理代码:
import pandas as pd from shapely.wkt import loads as wkt_loads def wkt_to_coord_list(wkt_str): # 解析WKT字符串为多边形对象 polygon = wkt_loads(wkt_str) # 提取多边形外边界的所有坐标点 coord_pairs = list(polygon.exterior.coords) # 按需求格式输出,以下二选一: # 选项1:输出数值元组列表:[(-105.0188, 39.6233), ...] # return coord_pairs # 选项2:输出与示例一致的空格分隔字符串元组列表:[(-105.0188 39.6233), ...] return [f"({lon} {lat})" for lon, lat in coord_pairs] # 若需要输出为字符串格式的列表,外层套str即可: # return str([f"({lon} {lat})" for lon, lat in coord_pairs]) # 应用到DataFrame生成新列 df['POLYGON_WKT_TXT'] = df['POLYGON_WKT_TEXT'].apply(wkt_to_coord_list)
方案2:纯正则字符串处理方案(无第三方依赖)
不需要安装额外库,适合简单场景下的快速处理:
import pandas as pd import re def wkt_to_coord_list_by_re(wkt_str): # 匹配所有经纬度数字对 coord_matches = re.findall(r'-?\d+\.\d+\s+-?\d+\.\d+', wkt_str) # 按需求格式输出 return [f"({coord})" for coord in coord_matches] # 若需要输出为字符串格式的列表,外层套str即可: # return str([f"({coord})" for coord in coord_matches]) # 应用到DataFrame生成新列 df['POLYGON_WKT_TXT'] = df['POLYGON_WKT_TEXT'].apply(wkt_to_coord_list_by_re)
注意:正则方案如果遇到带内环的多边形,会同时提取内环坐标,如有复杂WKT格式需求优先使用方案1。
内容的提问来源于stack exchange,提问作者Hayford K Adjavor
相关产品推荐
相关产品推荐

