You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含Geometry的GeoPandas DataFrame中按行拆分数据?

解决GeoDataFrame拆分列时保留几何列的问题

错误原因

你遇到的TypeError是因为所用的旧版本geopandas中,explode()方法是专门用于拆分几何列(比如MultiPolygon转单个Polygon)的,只能接收自身参数,不支持指定要拆分的非几何列名。而当你移除Geometry列后,对象变成了普通pandas DataFrame,此时调用的是pandas的explode()方法,支持指定列名,所以能正常运行。

解决方案

方案1:升级geopandas到新版本

新版本的geopandas已经兼容了pandas的explode()方法,支持直接指定非几何列进行拆分,同时保留几何列。执行升级命令:

pip install --upgrade geopandas

升级后直接运行你原来的代码即可:

test.assign(state=test["state_names"].str.split("--")).explode('state')

方案2:转成普通DataFrame处理后转回GeoDataFrame

如果不想升级版本,可以先将GeoDataFrame转为普通DataFrame,拆分完成后再转回GeoDataFrame:

import pandas as pd
import geopandas as gpd

# 1. 将GeoDataFrame转为普通DataFrame(保留所有列,包括geometry)
df = pd.DataFrame(test)
# 2. 拆分state列并展开
df_exploded = df.assign(state=df["state_names"].str.split("--")).explode('state')
# 3. 转回GeoDataFrame,指定几何列名称
gdf_exploded = gpd.GeoDataFrame(df_exploded, geometry='geometry')

方案3:用apply+Series手动展开

这种方法不依赖版本,通过逐行处理实现拆分:

gdf_exploded = test.assign(state=test["state_names"].str.split("--")).apply(
    lambda row: pd.Series({
        'city': row['city'],
        'state_names': row['state_names'],
        'state': row['state'],
        'geometry': row['geometry']
    }), axis=1
).explode('state')

内容的提问来源于stack exchange,提问作者Ailurophile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:55:19