Geopandas问题:读取含多边形的CSV转换为GeoDataFrame时报错
解决将含WKT字符串的DataFrame转换为GeoDataFrame的TypeError问题
嘿,这个坑我之前踩过!你遇到的TypeError原因很明确:你DataFrame里的geometry列存的是纯字符串格式的WKT(Well-Known Text)文本,而不是GeoPandas能直接识别的几何对象,直接转GeoDataFrame自然会报错。
问题拆解
你当前的代码只是指定了哪一列作为几何列,但没有把字符串格式的WKT解析成实际的几何图形对象——GeoPandas可没法直接读懂这些文本格式的坐标串哦。
两种可行解决方案
方案1:用GeoPandas自带的from_wkt(推荐,GeoPandas 0.10+可用)
这个方法最简洁,直接把WKT字符串列转换成GeoSeries:
import pandas as pd import geopandas as gpd # 读取原始CSV文件 df = pd.read_csv('myFile.csv') # 将WKT字符串列解析为几何对象系列 geometry_series = gpd.GeoSeries.from_wkt(df['geometry']) # 创建GeoDataFrame,同时指定CRS(新版本推荐用字符串格式) gdf = gpd.GeoDataFrame(df, geometry=geometry_series, crs='EPSG:4326') # 验证结果 print(gdf.head())
方案2:用Shapely手动解析(兼容旧版本)
如果你的GeoPandas版本比较旧,用Shapely的wkt.loads函数逐个解析字符串:
import pandas as pd import geopandas as gpd from shapely.wkt import loads df = pd.read_csv('myFile.csv') # 对每行的geometry字符串进行解析,转换为几何对象 df['geometry'] = df['geometry'].apply(loads) # 构建GeoDataFrame并指定CRS gdf = gpd.GeoDataFrame(df, crs='EPSG:4326') print(gdf.head())
额外提示
注意CRS的写法:新版本GeoPandas已经弃用了{'init': 'epsg:4326'}这种字典格式,直接用字符串'EPSG:4326'更规范,也避免了弃用警告。
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

