我正在尝试通过实现以下方法组合多个shapefile:
import geopandas as gpd
import pandas as pd
for i in range(10,56):
interesting_files = "/Users/m3105/Downloads/area/tl_2015_{}_arealm.shp".format(i)
gdf_list = []
for filename in sorted(interesting_files):
gdf_list.append(gpd.read_file((filename)))
full_gdf = pd.concat(gdf_list)
Run Code Online (Sandbox Code Playgroud)
其中目录/Users/m3105/Downloads/area有多个shapefile,例如tl_2015_01_arealm.shp,tl_2015_02_arealm.shp一直到最多tl_2015_56_arealm.shp.我想结合所有这些shapefile,避免重复他们的标题.但是,每当我尝试使用上面的代码连接文件时,我会收到以下错误:
ValueError: Null layer: u''
通常,我知道如何连接csv文件,但我注意到如何连接shapefile.我非常感谢任何帮助
小智 12
如果像@Paul H 的回答一样使用 pandas.concat,则默认情况下不会保留某些地理信息,例如坐标参考系统(crs)。但是在使用如下方式时它起作用了:
import os
import geopandas as gpd
import pandas as pd
file = os.listdir("Your folder")
path = [os.path.join("Your folder", i) for i in file if ".shp" in i]
gdf = gpd.GeoDataFrame(pd.concat([gpd.read_file(i) for i in path],
ignore_index=True), crs=gpd.read_file(path[0]).crs)
Run Code Online (Sandbox Code Playgroud)
这样,地理数据框将根据您的需要提供 CRS
我无法测试这个,因为我没有你的数据,但你想要这样的东西(假设python 3):
from pathlib import Path
import pandas
import geopandas
folder = Path("/Users/m3105/Downloads/area")
shapefiles = folder.glob("tl_2015_*_arealm.shp")
gdf = pandas.concat([
geopandas.read_file(shp)
for shp in shapefiles
]).pipe(geopandas.GeoDataFrame)
gdf.to_file(folder / 'compiled.shp')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |