如何使用geopandas和python合并多个压缩的shapefile?

3
我有近60个来自美国人口普查的压缩形状文件,属于不同的州。我想将它们合并成一个全国性的形状文件。我试过很多不同的方法,包括尝试使用read_file读取文件和各种其他使用csv文件或者shp文件本身的Python/pandas/geopandas示例进行下载。如果可能的话,我希望避免解压缩形状文件。据我所知,geopandas.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

GeoPandas文档将所有zipfile路径的前缀都设置为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')

嗯,仍然出现“ValueError:没有要连接的对象”。 - Kyle Pennell
当我尝试时,我没有遇到那个错误。您能否请更新您的问题并提供一个可重现的示例? - jkr
我的错,我不得不执行 folder = Path("./blocks") 才能让它正常工作。不确定为什么整个路径从(从终端 pwd)没有起作用,但没关系。 - Kyle Pennell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接