如何将存储Python字典格式多边形的CSV转为geopandas可读取的GeoDataFrame
实现方案
前置依赖
首先安装所需的三方库:pip install pandas geopandas shapely
代码实现
CSV中存储的boundary字段默认是字符串格式的Python字典列表,需要先解析为Python对象,再转换为shapely多边形对象,最后构造GeoDataFrame,完整代码如下:
import pandas as pd import geopandas as gpd from shapely.geometry import Polygon import ast # 1. 读取原始CSV df = pd.read_csv("你的文件路径.csv") # 2. 定义边界解析函数 def boundary_to_polygon(boundary_str): try: # 字符串转字典列表 point_list = ast.literal_eval(boundary_str) # 坐标顺序调整为(经度, 纬度),符合shapely的输入要求 coord_list = [(point["lng"], point["lat"]) for point in point_list] # 合法多边形至少需要3个坐标点 return Polygon(coord_list) if len(coord_list) >=3 else None except Exception: # 解析异常返回空值,后续过滤 return None # 3. 生成几何列 df["geometry"] = df["boundary"].apply(boundary_to_polygon) # 4. 过滤无效几何行,构造GeoDataFrame df = df.dropna(subset=["geometry"]) gdf = gpd.GeoDataFrame(df, geometry="geometry", crs="EPSG:4326") # 可选:删除原始boundary字段释放空间 # gdf = gdf.drop(columns=["boundary"])
注意事项
- 如果你的
boundary字段读取后已经是Python列表类型而非字符串,可删除ast.literal_eval步骤直接处理坐标 - 上述代码默认使用WGS84坐标系(EPSG:4326),如果你的坐标属于其他坐标系,修改
crs参数对应值即可 - 非闭合的多边形shapely会自动将首尾坐标点连接补全
内容的提问来源于stack exchange,提问作者user3733504
相关产品推荐
相关产品推荐

