Как объединить / объединить несколько заархивированных шейп-файлов с помощью geo pandas и python? - PullRequest
3 голосов
/ 03 августа 2020

У меня есть ~ 60 заархивированных шейп-файлов из переписи населения США для разных штатов. Я хочу объединить их все в один общенациональный шейп-файл. Я пробовал так много разных подходов, начиная с попытки загрузить файл с read_file и множества других примеров Python / pandas / geo pandas, которые используют файлы csv или сами файлы .shp. Я бы хотел по возможности не распаковывать молнии шейп-файлов. Насколько я понимаю, geo pandas .read_file может отлично работать с заархивированными шейп-файлами (например, https://www2.census.gov/geo/tiger/TIGER2010/TABBLOCK/2010/tl_2010_01_tabblock10.zip)

Но теперь у меня эти файлы есть локально.

Вот код, который я пытаюсь ввести в записной книжке:

from pathlib import Path
import pandas
import geopandas

folder = Path("/Users/kyle/Desktop/jupyter-env/blocks")
shapefiles = folder.glob("*.zip")
gdf = pandas.concat([
   geopandas.read_file(shp)
   for shp in shapefiles
]).pipe(geopandas.GeoDataFrame)
gdf.to_file(folder / 'compiled.shp')

Я получаю сообщение ValueError: No objects to concatenate.

Мне здесь что-то не хватает. Файлы zip работают иначе, чем файлы csv или что-то в этом роде? Возможны ли такие вещи: перебирать список локальных или удаленных файлов и объединять заархивированные шейп-файлы в один большой?

1 Ответ

1 голос
/ 03 августа 2020

В документации Geo Pandas перед всеми путями zip-файлов стоит префикс zip://.

from pathlib import Path
import pandas
import geopandas

folder = Path("/Users/kyle/Desktop/jupyter-env/blocks")
shapefiles = folder.glob("*.zip")
gdf = pandas.concat([
   geopandas.read_file("zip://" + str(shp))
   for shp in shapefiles
]).pipe(geopandas.GeoDataFrame)
gdf.to_file(folder / 'compiled.shp')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...