如何将含GeoJSON格式列的Pandas DataFrame转为Geopandas DataFrame
将Pandas DataFrame转为Geopandas并设置几何列
要把包含GeoJSON字符串列的Pandas DataFrame转换成Geopandas DataFrame,同时指定几何列,按以下步骤执行:
1. 导入依赖库
需要用到pandas、geopandas、json和shapely的几何转换工具:
import pandas as pd import geopandas as gpd import json from shapely.geometry import shape
2. 解析GeoJSON字符串为几何对象
你的"Geo Shape"列存储的是字符串格式的GeoJSON,先把每个字符串解析为Python字典,再转换为Shapely几何对象:
# 解析字符串并转为Shapely几何 df_uk['geometry'] = df_uk['Geo Shape'].apply(lambda x: shape(json.loads(x)))
3. 转换为Geopandas DataFrame
用geopandas.GeoDataFrame包装原DataFrame,指定geometry列为地理数据框的几何列:
gdf_uk = gpd.GeoDataFrame(df_uk, geometry='geometry')
4. (可选)删除原GeoJSON列
如果不需要保留原始的"Geo Shape"列,可以直接删除:
gdf_uk = gdf_uk.drop('Geo Shape', axis=1)
完整示例代码
结合你提供的示例数据,完整可运行代码如下:
import pandas as pd import geopandas as gpd import json from shapely.geometry import shape # 构造示例数据 sample_data = { 'Unnamed: 0': [295, 114, 225], 'SOVEREIGNT': ['United Kingdom', 'United Kingdom', 'United Kingdom'], 'NAME': ['Jersey', 'Anguilla', 'Isle of Man'], 'Geo Shape': [ '{"coordinates": [[[-5.358386758461411, 36.141109447000375], [-5.360107421875, 36.139892578125]]], "type": "Polygon"}', '{"coordinates": [[[-6.773529052734375, 18.2177734375], [-6.771240234375, 18.215484615384617]]], "type": "Polygon"}', '{"coordinates": [[[-4.620361328125, 54.23949090909091], [-4.618072509765625, 54.23720208007529]]], "type": "Polygon"}' ] } df_uk = pd.DataFrame(sample_data) # 执行转换 df_uk['geometry'] = df_uk['Geo Shape'].apply(lambda x: shape(json.loads(x))) gdf_uk = gpd.GeoDataFrame(df_uk, geometry='geometry') # 验证结果 print(gdf_uk[['NAME', 'geometry']])
关键注意点
- 确保
"Geo Shape"列的字符串是合法的GeoJSON格式,如果存在格式错误,json.loads会抛出异常,需要先清理数据。 - 不管GeoJSON类型是
Polygon还是MultiPolygon,shapely.geometry.shape都能自动识别并转换,无需额外处理。
内容的提问来源于stack exchange,提问作者boathon
相关产品推荐
相关产品推荐

