Геопанды устанавливают геометрию: ValueError для MultiPolygon "равные ключи и значение len" - PullRequest
1 голос
/ 07 мая 2019

У меня есть 2 геоданных с колонкой геометрии, и я копирую некоторые геометрии из одной в другую.

Это хорошо работает с Polygons, но возвращает ValueError для любого (действительного) MultiPolygon.

Пожалуйста, совет, как решить эту проблему?Я не знаю, если / как / почему я должен изменить 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.

1 Ответ

0 голосов
/ 10 мая 2019

Объяснение и обходной путь из проблемы github , предоставленной Joris:

"Причина в том, что pandas проверяет длину значения, которое вы хотите присвоить, чтобы увидеть, соответствует ли оно количеству элементов, которые вы назначаете (здесь один элемент, поскольку индекс является скалярным). Поэтому нам, возможно, придется обсудить это на стороне панд, как с этим справиться.

В качестве обходного пути вы можете назначить списку один элемент:

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

Обратите внимание, что я также использую список, чтобы выбрать один элемент, который я хочу назначить, но затем делаю .values, поэтому я в основном присваиваю массив из одного значения (проблема в том, что если не преобразовать в массив, панды попытаются для выравнивания по индексу, и назначение идет не так). «

Еще раз большое спасибо Joris, который предоставил обходной путь и создал проблему панд для решения этой проблемы: REGR: назначение скаляра с длиной больше не работает

...