从Fiona迁移到Pyogrio读/写引擎#

自版本0.11开始,GeoPandas开始支持两种引擎来读取和写入文件: FionaPyogrio

现在可以使用 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