Geopandas导出GeoDataFrame为shapefile时报Invalid field type错误
问题解答
该报错与GeoDataFrame的列数据类型直接相关。
报错原因
Shapefile是一款兼容性较广但字段类型支持非常有限的空间数据格式,仅支持文本、整型、浮点型、日期等少数基础类型,无法存储列表、字典这类Python复合对象,当GeoDataFrame的任意属性列中存在list类型的元素时,导出时就会触发该报错。
从你提供的dtype结果来看,所有标记为object类型的列都可能存在列表类型的元素,其中Referenced Tweets、Geo、bbox三列为高发问题列,你可以运行以下代码快速定位出存在问题的列:
# 检查每一列是否包含列表类型的元素 gdf.apply(lambda series: series.apply(type).eq(list).any())
返回结果为True的列即为问题列。
修复方案
你可以根据需求选择以下两种修复方式:
- 不需要保留问题列的信息,直接删除该列即可:
gdf = gdf.drop(columns=['你定位到的问题列名']) - 需要保留信息的话,将列表转为字符串格式再导出:
# 以逗号拼接列表元素为例,可根据需求调整拼接规则 gdf['问题列名'] = gdf['问题列名'].apply(lambda x: ','.join(map(str, x)) if isinstance(x, list) else x)
处理完成后再执行导出shapefile的操作即可正常运行。
内容的提问来源于stack exchange,提问作者Daniel AG
相关产品推荐
相关产品推荐

