使用append收集要素后创建GeoDataFrame报list无geometry属性如何解决
问题原因及解决方法
错误根因
报错AttributeError: 'list' object has no attribute 'geometry'的核心原因是:你声明的M_point是普通Python列表,只有GeoDataFrame、GeoSeries这类geopandas专属对象才带有geometry属性,普通列表没有这个属性,调用时就会抛出异常。
解决方法
你原本的逻辑是收集多个shapely几何对象后统一转GeoDataFrame,直接用普通列表存几何对象,生成GeoDataFrame时直接把列表传给geometry参数即可,修正后代码如下:
# 初始化空列表存几何对象 M_point = [] # 你的循环逻辑(此处省略遍历生成point_list的代码) pointlist = Polygon(point_list) M_point.append(pointlist) # 所有几何收集完成后,直接传列表生成GeoDataFrame shp = gpd.GeoDataFrame(geometry=M_point)
通用排查思路
遇到类似属性不存在的报错时,可以按以下步骤定位:
- 先打印报错行中调用属性的变量类型,确认变量类型是否符合预期:比如本例可以先执行
print(type(M_point)),确认它是普通列表而非geopandas对象 - 核对对应类型的支持属性:普通Python列表仅支持
append、pop等原生方法,确实没有geometry属性 - 确认GeoDataFrame的入参要求:
geometry参数支持直接传入shapely几何对象组成的列表,不需要额外调用属性
内容的提问来源于stack exchange,提问作者user16708120
相关产品推荐
相关产品推荐

