Geopandas 设置几何:MultiPolygon 的 ValueError "equal len keys and value"

Geopandas set geometry: ValueError for MultiPolygon "equal len keys and value"

我有 2 个带有几何列的地理数据框,我将一些几何从 1 复制到另一个。

这适用于多边形,但 returns 任何(有效的)多边形的 ValueError。

请教如何解决?我不知道是否/如何/为什么我应该更改 MultiPolygon 以获得 "equal len keys and value"?

geodata01.loc[index, 'geometry'] = geodata02.loc[index, 'geometry']

这适用于多边形。仅使用 MultiPolygons 我得到:

ValueError 
if len(labels) != len(value):
--> 611      raise ValueError('Must have equal len keys and value '
    612      'when setting with an iterable')

我也不能对缓冲或简化的 MultiPolygon 进行赋值(MultiPolygon 是有效的,我可以绘制、缓冲、简化但我不能赋值):

geodata01.loc[index, 'geometry'] = geodata01.loc[index, 'geometry'].buffer(0)
#or
geodata01.loc[index, 'geometry'] = geodata01.loc[index, 'geometry'].simplify(tolerance=0)

这个returns同样的ValueError。

Joris 提供的 github issue 中的解释和解决方法:

"原因是pandas检查你要分配的值的长度,看看它是否与你分配给的元素数量匹配(这里是单个元素,因为索引是一个标量)。 所以我们可能需要在 pandas 方面讨论如何处理这个问题。

作为 work-around,您可以分配给一个元素列表:

df.loc[[0], 'geometry'] = df.loc[[1], 'geometry'].values

请注意,我还使用一个列表来 select 我想要分配的单个元素,然后执行 .values,所以我基本上是在分配一个值的数组(问题是当不转换为一个数组,pandas 将尝试在索引上对齐,并且赋值出错)。 “

再次感谢 Joris,他提供了解决方法并创建了一个 pandas 问题来解决此问题:REGR: assigning scalar with a length no longer works