Geopandas设置几何:MultiPolygon“相等的len键和值”的ValueError

时间:2019-05-07 08:25:20

标签: python pandas geopandas shapely

我有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。

1 个答案:

答案 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