Wou*_*ter 6 python pandas shapely geopandas
我有 2 个带有几何列的地理数据框,我将一些几何图形从 1 个复制到另一个。
这对于多边形效果很好,但对于任何(有效)多多边形都会返回 ValueError。
请指教如何解决这个问题?我不知道是否/如何/为什么应该更改 MultiPolygon 以获得“相等的长度键和值”?
geodata01.loc[index, 'geometry'] = geodata02.loc[index, 'geometry']
Run Code Online (Sandbox Code Playgroud)
这对于多边形效果很好。只有使用 MultiPolygons 我才能得到:
ValueError
if len(labels) != len(value):
--> 611 raise ValueError('Must have equal len keys and value '
612 'when setting with an iterable')
Run Code Online (Sandbox Code Playgroud)
我也无法对缓冲或简化的 MultiPolygon 进行分配(MultiPolygon 是有效的,我可以绘制、缓冲、简化,但无法分配它):
geodata01.loc[index, 'geometry'] = geodata01.loc[index, 'geometry'].buffer(0)
#or
geodata01.loc[index, 'geometry'] = geodata01.loc[index, 'geometry'].simplify(tolerance=0)
Run Code Online (Sandbox Code Playgroud)
这会返回相同的 ValueError。
Joris 提供的github 问题的解释和解决方法:
“原因是 pandas 检查你想要分配的值的长度,看看它是否与你分配的元素数量匹配(这里是单个元素,因为索引是一个标量)。所以我们可能需要在 pandas 方面讨论如何处理这个问题。
作为一种解决方法,您可以分配给一个元素的列表:
df.loc[[0], 'geometry'] = df.loc[[1], 'geometry'].values
Run Code Online (Sandbox Code Playgroud)
请注意,我还使用列表来选择要分配的单个元素,然后执行 .values,因此我基本上分配一个值的数组(问题是当不转换为数组时,pandas 会尝试对齐索引,并且分配出错)。”
再次非常感谢 Joris,他提供了解决方法并创建了 pandas 问题来解决此问题:REGR:分配具有长度的标量不再有效