从Fiona迁移到Pyogrio读/写引擎#
自版本0.11开始,GeoPandas开始支持两种引擎来读取和写入文件: Fiona 和 Pyogrio。
现在可以使用 engine= 参数在 geopandas.read_file() 和 geopandas.GeoDataFrame.to_file() 中选择引擎。也可以通过以下方式全局更改默认引擎:
geopandas.options.io_engine = "pyogrio"
对于 Geopandas 版本 <1.0,GeoPandas 默认使用 Fiona。从 Geopandas 版本 1.0 开始,全球默认值已从 Fiona 更改为 Pyogrio。
此更改的主要原因是性能。Pyogrio 针对 GeoPandas 的相关用例进行了优化:批量读取和写入。因此,在许多情况下可以观察到速度提升超过 5-20 倍。
本指南概述了两者之间的(已知)功能差异,以便您在切换到 Pyogrio 时可以考虑这些差异。
将属性表写入文件#
使用Fiona引擎,可以通过schema参数将属性表(没有几何列的表)写入文件,以指定GeoDataFrame的“几何”列应被忽略。
使用 Pyogrio,您可以通过使用 pyogrio.write_dataframe() 并传递一个 pandas DataFrame 来编写属性表:
>>> import pyogrio
>>> df = pd.DataFrame({"data_column": [1, 2, 3]})
>>> pyogrio.write_dataframe(df, "test_attribute_table.gpkg")
不支持schema参数来写入文件#
Pyogrio 不支持指定 schema 参数来写入文件。这意味着无法显式指定要写入的属性类型。
写入空几何#
Pyogrio将空和None几何体写入例如GPKG文件时,Fiona则将两者都写为None。
In [1]: import shapely
In [2]: gdf = geopandas.GeoDataFrame(geometry=[shapely.Polygon(), None], crs=31370)
In [3]: gdf.to_file("test_fiona.gpkg", engine="fiona")
In [4]: gdf.to_file("test_pyogrio.gpkg", engine="pyogrio")
In [5]: geopandas.read_file("test_fiona.gpkg").head()
Out[5]:
geometry
0 None
1 None
In [6]: geopandas.read_file("test_pyogrio.gpkg").head()
Out[6]:
geometry
0 POLYGON EMPTY
1 None