.boundary生成的GeoSeries存入GeoDataFrame自动转为pandas.Series求助
问题原因
你没有操作错误,这个是GeoPandas旧版本的默认行为:
- 0.9.x及更早版本的GeoDataFrame默认仅支持1个激活几何列,只有这个列会被保留为
GeoSeries类型,其余存储几何对象的列在直接赋值时会被自动转换为普通pandas.Series,哪怕列的dtype显示为geometry也不例外。 - 官方指南示例基于0.10.0及以上版本的GeoPandas运行,该版本开始优化了多几何列的支持逻辑,直接赋值几何类新列会自动保留
GeoSeries类型。
解决方法
你可以选择任意一种方案解决这个问题:
- 如果需要将新的
bd列作为激活几何列,使用set_geometry方法赋值:
gdf = gdf.set_geometry(gdf.boundary.rename('bd'))
赋值后gdf['bd']就会是GeoSeries类型,原几何列会作为普通列保留。
- 如果需要同时保留原激活几何列和
bd列的GeoSeries属性,赋值时显式指定为GeoSeries即可:
gdf['bd'] = gd.GeoSeries(gdf.boundary)
- 直接升级GeoPandas到0.10.0以上版本,原有代码无需修改即可得到和官方指南一致的运行结果。
内容的提问来源于stack exchange,提问作者dispink
相关产品推荐
相关产品推荐

