python - GeoPackage 格式的 Geopandas 快速读取切片
问题描述
我想对 geopandas 数据框进行分块以限制峰值内存。不幸的是geopandas.read_file没有chunksize
像pandas.read_csv这样的选项。
因此,我一直在使用循环递增的选项,rows=slice(start, end)
直到我用完行。问题是它看起来每次调用都会重新读取整个文件:read_file
while
start
end
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_csv
该chunksize
选项中,通过保持文件指针打开并按顺序逐步浏览文件来工作。
有没有一种方法可以gpkg
高效地通过 geopandas 中的文件进行分块?
解决方案
推荐阅读
- angular - Angular 2 innerHTML 不适用于 slice 或 textarea
- javascript - 如何正确设置 shopify 可拖动库?
- bitnami - 更改 Bitnami 打开 edX 徽标
- mysql - ColdFusion 查询是否有字符限制?
- angular - 如何使用 Angular 在 NativeScript 中实现可见性
- javascript - 如何将用户输入与存储在数组中的项目进行比较?
- javascript - 单击一个 div 并获取另一个 div 的 id
- r - 如果语句中的 R 错误“下标越界” - 解释和代码修复?
- node.js - Safari 和 iOS 中的 Gzip 压缩问题,使用 express.js
- angular - 无法加载二维码