Функция построения графика GeoPandas не работает

У меня есть шейп-файл на mapshaper, который выглядит так:  mapshaper

Но когда я попытался построить его в пандах с помощью следующего кода

police = gpd.read_file('srilanka_policestations')
police.plot()

Блокнот jupyter выдает сообщение об ошибке: «AttributeError: объект 'str' не имеет атрибута 'type'».

Я не уверен, что случилось. Я попытался построить набор данных GeoPandas "naturalearth_cities", и он отлично работает. См. ниже:

блокнот jupyter

Географический фрейм данных хорошо читается в пандах, но не отображает:  введите описание изображения здесь

Любая помощь очень, очень ценится. Спасибо вам всем!


person user7999601    schedule 17.08.2017    source источник
comment
Привет, каков результат police.dtypes? А также каков результат type(police.loc[0,'geometry'])   -  person Bob Haffner    schedule 18.08.2017
comment
police.geometry работает? также попробуйте добавить формат файла, например 'serilanka_policestations.shp'.   -  person Alz    schedule 18.08.2017
comment
Спасибо вам обоим! Боб, результат police.dtypes - объект для всего (включая геометрию). Широта и долгота - это float64. Результат type(police.loc[0,'geometry']) - строка.   -  person user7999601    schedule 19.08.2017
comment
Алиреза, police.geometry тоже не работает, как и добавление .shp после имени файла. :(   -  person user7999601    schedule 19.08.2017
comment
type(police.loc[0,'geometry']) не должен быть строкой, но должен иметь тип shapely.geometry.Point. Что-то пошло не так с чтением этого файла. Вы можете поделиться шейп-файлом? Вы также можете открыть проблему на странице github.com/geopandas/geopandas.   -  person joris    schedule 19.08.2017
comment
В качестве обходного пути вы можете сделать police['geometry'] = police['geometry'].apply(shapely.wkt.loads) (чтобы преобразовать строки в фактические геометрические объекты)   -  person joris    schedule 19.08.2017
comment
Спасибо за ссылку и код, joris, я скоро попробую. Я попытался загрузить свой шейп-файл, но не вижу, где это сделать при переполнении стека. Я буду держать эту ветку в курсе того, как будут работать мои будущие попытки. А пока мне удалось сделать нужную мне карту из фолиума!   -  person user7999601    schedule 22.08.2017
comment
Джорис, я попробовал эту строчку police['geometry'] = police['geometry'].apply(shapely.wkt.loads), и она сработала как по волшебству. Если вы можете опубликовать это как решение, я соглашусь с ним - не знаю, как это сделать, в разделе комментариев. Большое вам спасибо еще раз!   -  person user7999601    schedule 23.08.2017


Ответы (1)


Столбец геометрии в geopandas GeoDataFrame должен содержать не строки, а фактические геометрические объекты. Если у вас есть строки, вы можете преобразовать их следующим образом:

import shapely.wkt
police['geometry'] = police['geometry'].apply(shapely.wkt.loads)

Однако я должен сказать, что это обходной путь, как если бы вы использовали геопанды read_file для чтения шейп-файла, у вас не должно получиться строк.

person joris    schedule 23.08.2017