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

这适用于多边形,但为任何(有效)MultiPolygon 返回 ValueError。

请指教如何解决这个问题?我不知道是否/如何/为什么我应该更改 MultiPolygon 以获得“相等的 len 键和值”?

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)

这将返回相同的 ValueError。

最佳答案

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

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

作为一种解决方法,您可以分配给一个元素的列表:

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

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

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

关于python - Geopandas 设置几何 : ValueError for MultiPolygon "equal len keys and value",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56018427/

10-12 16:25