首页 > 解决方案 > GeoPackage 格式的 Geopandas 快速读取切片

问题描述

我想对 geopandas 数据框进行分块以限制峰值内存。不幸的是geopandas.read_file没有chunksizepandas.read_csv这样的选项。

因此,我一直在使用循环递增的选项,rows=slice(start, end)直到我用完行。问题是它看起来每次调用都会重新读取整个文件:read_filewhilestartend

In [1]: import geopandas as gpd

In [2]: fulldata = gpd.read_file('data.gpkg')

In [3]: len(fulldata)
Out[3]: 127433

In [4]: %timeit gpd.read_file('data.gpkg', rows=slice(0, 100))
52 ms ± 1.22 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [5]: %timeit gpd.read_file('data.gpkg', rows=slice(127333, 127433))
1.14 s ± 17.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

在文件末尾读取 100 行所需的时间是开头的 21 倍以上。当我对文件进行分块时,我大部分时间都在一遍又一遍地重新阅读文件的某些部分。在pandas.read_csvchunksize选项中,通过保持文件指针打开并按顺序逐步浏览文件来工作。

有没有一种方法可以gpkg高效地通过 geopandas 中的文件进行分块?

标签: pythongeopandas

解决方案


推荐阅读