如何使用 geopandas 和 python concat/merge 多个压缩的 shapefile?
How to concat/merge multiple zipped shapefiles using geopandas and python?
我有大约 60 个来自美国不同州的人口普查的压缩 shapefile。我想将它们全部组合成一个全国性的 shapefile。我已经尝试了很多不同的方法,从尝试使用 read_file 下载文件以及使用 csv 文件或 .shp 文件本身的各种其他 Python/pandas/geopandas 示例。如果可能,我想避免解压缩 shapefile 压缩文件。我的理解是 geopandas.read_file 可以很好地处理压缩的 shapefile(例如 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 文件或类似文件的工作方式不同吗?这种事情是否可能:遍历本地或远程文件列表并将压缩的 shapefile 合并成一个大文件?
GeoPandas documentation 为所有压缩文件路径添加前缀 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')
我有大约 60 个来自美国不同州的人口普查的压缩 shapefile。我想将它们全部组合成一个全国性的 shapefile。我已经尝试了很多不同的方法,从尝试使用 read_file 下载文件以及使用 csv 文件或 .shp 文件本身的各种其他 Python/pandas/geopandas 示例。如果可能,我想避免解压缩 shapefile 压缩文件。我的理解是 geopandas.read_file 可以很好地处理压缩的 shapefile(例如 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 文件或类似文件的工作方式不同吗?这种事情是否可能:遍历本地或远程文件列表并将压缩的 shapefile 合并成一个大文件?
GeoPandas documentation 为所有压缩文件路径添加前缀 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')