我有2个带有几何列的地理数据框,并将某些几何从1复制到另一个。
这对多边形很有效,但是对于任何(有效)多多边形都返回ValueError。
请咨询如何解决此问题?我不知道是否/如何/为什么要更改MultiPolygon以获取“相等的len键和值”?
geodata01.loc[index, 'geometry'] = geodata02.loc[index, 'geometry']
这对多边形很有效。只有有了MultiPolygon,我才能得到:
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。
答案 0 :(得分:0)
Joris提供的github issue的解释和解决方法:
“原因是,pandas检查您要分配的值的长度,以查看它是否与您要分配的元素的数量(这里是单个元素,因为索引是标量)是否匹配。 因此,我们可能需要在熊猫方面对此进行讨论。
作为一种解决方法,您可以分配一个元素的列表:
df.loc[[0], 'geometry'] = df.loc[[1], 'geometry'].values
请注意,我还使用列表来选择要分配的单个元素,然后执行.values,所以我基本上是在分配一个具有一个值的数组(问题是当不转换为数组时,pandas会尝试对齐索引,分配就会出错)。 “
再次感谢Joris提供了解决方法,并创建了熊猫问题来解决此问题:REGR: assigning scalar with a length no longer works