问题描述
我正在尝试将every block file from the 2010 census组合在一起,成为美国的单个主文件。我目前正在Google Colab甚至他们的专业版订阅中执行此操作-这将为您提供约25GB的RAM-我正在最大限度地利用第45个文件上的所有可用内存(我还有5个文件!)。在代码方面,我只是建立一个数据帧列表,这些数据帧需要concat
在一起并最终写入磁盘:
gdfs = []
census_blocks_basepath = r'/content/drive/My Drive/Census/blocks/'
census_block_filenames = [f for f in os.listdir(census_blocks_basepath) if f.endswith('.shp')]
for index,block_filename in enumerate(census_block_filenames):
file_name = os.path.join(census_blocks_basepath,block_filename)
gdfs.append(gpd.read_file(file_name))
print('Appended file %s,%s' % (index,block_filename))
gdf = gpd.GeoDataFrame(pd.concat(gdfs,ignore_index=True),crs=dataframesList[0].crs)
# gdf.reset_index(inplace=True,drop=True)
gdf.head(3)
相反,我认为我应该:
- 加载单个地理数据框
- 将其附加到磁盘上(而不是像csv.writer这样的内存中)存在的主数据帧中
- 从
1
删除加载的地理数据框(以避免产生内存) - 然后对源目录中剩余的所有地理数据框重复
1
-3
我看不到有关geopandas是否支持基于磁盘的附件的文档。似乎只能通过GeoDataFrame.to_file
覆盖以前的文件。就是说,我看到geopandas有一个chunksize
argument的GeoDataFrame.to_postgis
方法,这使我认为可以将数据附加到磁盘上的地理文件中(或者我错了,这只是postgis
。
有什么想法吗?
解决方法
是的,可以添加任何支持附加的文件格式(并由fiona支持)。您只需指定mode =“ a”。
df.to_file(filename,mode="a")
您可以使用以下方式检查是否支持该模式
import fiona fiona.supported_drivers
这是r-read,a-append,w-write的当前结果。
{'AeronavFAA': 'r','ARCGEN': 'r','BNA': 'raw','DXF': 'raw','CSV': 'raw','OpenFileGDB': 'r','ESRIJSON': 'r','ESRI Shapefile': 'raw','GeoJSON': 'rw','GeoJSONSeq': 'rw','GPKG': 'rw','GML': 'raw','GPX': 'raw','GPSTrackMaker': 'raw','Idrisi': 'r','MapInfo File': 'raw','DGN': 'raw','PCIDSK': 'r','S57': 'r','SEGY': 'r','SUA': 'r','TopoJSON': 'r'}