----------------------------
Highlights of this release:
- The ``geopandas.read_file()`` and `GeoDataFrame.to_file()` methods to read
and write GIS file formats can now optionally use the
[pyogrio](https://github.com/geopandas/pyogrio/) package under the hood
through the ``engine="pyogrio"`` keyword. The pyogrio package implements
vectorized IO for GDAL/OGR vector data sources, and is faster compared to
the ``fiona``-based engine (2225).
- GeoParquet support updated to implement
[v0.4.0](https://github.com/opengeospatial/geoparquet/releases/tag/v0.4.0) of the
OpenGeospatial/GeoParquet specification (2441). Backwards compatibility with v0.1.0 of
the metadata spec (implemented in the previous releases of GeoPandas) is guaranteed,
and reading and writing Parquet and Feather files will no longer produce a ``UserWarning``
(2327).
New features and improvements:
- Improved handling of GeoDataFrame when the active geometry column is
lost from the GeoDataFrame. Previously, square bracket indexing ``gdf[[...]]`` returned
a GeoDataFrame when the active geometry column was retained and a DataFrame was
returned otherwise. Other pandas indexing methods (``loc``, ``iloc``, etc) did not follow
the same rules. The new behaviour for all indexing/reshaping operations is now as
follows (2329, 2060):
- If operations produce a ``DataFrame`` containing the active geometry column, a
GeoDataFrame is returned
- If operations produce a ``DataFrame`` containing ``GeometryDtype`` columns, but not the
active geometry column, a ``GeoDataFrame`` is returned, where the active geometry
column is set to ``None`` (set the new geometry column with ``set_geometry()``)
- If operations produce a ``DataFrame`` containing no ``GeometryDtype`` columns, a
``DataFrame`` is returned (this can be upcast again by calling ``set_geometry()`` or the
``GeoDataFrame`` constructor)
- If operations produce a ``Series`` of ``GeometryDtype``, a ``GeoSeries`` is returned,
otherwise ``Series`` is returned.
- Error messages for having an invalid geometry column
have been improved, indicating the name of the last valid active geometry column set
and whether other geometry columns can be promoted to the active geometry column
(2329).
- Datetime fields are now read and written correctly for GIS formats which support them
(e.g. GPKG, GeoJSON) with fiona 1.8.14 or higher. Previously, datetimes were read as
strings (2202).
- ``folium.Map`` keyword arguments can now be specified as the ``map_kwds`` argument to
``GeoDataFrame.explore()`` method (2315).
- Add a new parameter ``style_function`` to ``GeoDataFrame.explore()`` to enable plot styling
based on GeoJSON properties (2377).
- It is now possible to write an empty ``GeoDataFrame`` to a file for supported formats
(2240). Attempting to do so will now emit a ``UserWarning`` instead of a ``ValueError``.
- Fast rectangle clipping has been exposed as ``GeoSeries/GeoDataFrame.clip_by_rect()``
(1928).
- The ``mask`` parameter of ``GeoSeries/GeoDataFrame.clip()`` now accepts a rectangular mask
as a list-like to perform fast rectangle clipping using the new
``GeoSeries/GeoDataFrame.clip_by_rect()`` (2414).
- Bundled demo dataset ``naturalearth_lowres`` has been updated to version 5.0.1 of the
source, with field ``ISO_A3`` manually corrected for some cases (2418).
Deprecations and compatibility notes:
- The active development branch of geopandas on GitHub has been renamed from master to
main (2277).
- Deprecated methods ``GeometryArray.equals_exact()`` and ``GeometryArray.almost_equals()``
have been removed. They should
be replaced with ``GeometryArray.geom_equals_exact()`` and
``GeometryArray.geom_almost_equals()`` respectively (2267).
- Deprecated CRS functions ``explicit_crs_from_epsg()``, ``epsg_from_crs()`` and
``get_epsg_file_contents()`` were removed (2340).
- Warning about the behaviour change to ``GeoSeries.isna()`` with empty
geometries present has been removed (2349).
- Specifying a CRS in the ``GeoDataFrame/GeoSeries`` constructor which contradicted the
underlying ``GeometryArray`` now raises a ``ValueError`` (2100).
- Specifying a CRS in the ``GeoDataFrame`` constructor when no geometry column is provided
and calling ``GeoDataFrame. set_crs`` on a ``GeoDataFrame`` without an active geometry
column now raise a ``ValueError`` (2100)
- Passing non-geometry data to the``GeoSeries`` constructor is now fully deprecated and
will raise a ``TypeError`` (2314). Previously, a ``pandas.Series`` was returned for
non-geometry data.
- Deprecated ``GeoSeries/GeoDataFrame`` set operations ``__xor__()``,
``__or__()``, ``__and__()`` and ``__sub__()``, ``geopandas.io.file.read_file``/``to_file`` and
``geopandas.io.sql.read_postgis`` now emit ``FutureWarning`` instead of
``DeprecationWarning`` and will be completely removed in a future release.
- Accessing the ``crs`` of a ``GeoDataFrame`` without active geometry column is deprecated and will be removed in GeoPandas 0.12 (2373).
Bug fixes:
- ``GeoSeries.to_frame`` now creates a ``GeoDataFrame`` with the geometry column name set
correctly (2296)
- Fix pickle files created with pygeos installed can not being readable when pygeos is
not installed (2237).
- Fixed ``UnboundLocalError`` in ``GeoDataFrame.plot()`` using ``legend=True`` and
``missing_kwds`` (2281).
- Fix ``explode()`` incorrectly relating index to columns, including where the input index
is not unique (2292)
- Fix ``GeoSeries.[xyz]`` raising an ``IndexError`` when the underlying GeoSeries contains
empty points (2335). Rows corresponding to empty points now contain ``np.nan``.
- Fix ``GeoDataFrame.iloc`` raising a ``TypeError`` when indexing a ``GeoDataFrame`` with only
a single column of ``GeometryDtype`` (1970).
- Fix ``GeoDataFrame.iterfeatures()`` not returning features with the same field order as
``GeoDataFrame.columns`` (2396).
- Fix ``GeoDataFrame.from_features()`` to support reading GeoJSON with null properties
(2243).
- Fix ``GeoDataFrame.to_parquet()`` not intercepting ``engine`` keyword argument, breaking
consistency with pandas (2227)
- Fix ``GeoDataFrame.explore()`` producing an error when ``column`` is of boolean dtype
(2403).
- Fix an issue where ``GeoDataFrame.to_postgis()`` output the wrong SRID for ESRI
authority CRS (2414).
- Fix ``GeoDataFrame.from_dict/from_features`` classmethods using ``GeoDataFrame`` rather
than ``cls`` as the constructor.
- Fix ``GeoDataFrame.plot()`` producing incorrect colors with mixed geometry types when
``colors`` keyword is provided. (2420)
Notes on (optional) dependencies:
- GeoPandas 0.11 drops support for Python 3.7 and pandas 0.25 (the minimum supported
pandas version is now 1.0.5). Further, the minimum required versions for the listed
dependencies have now changed to shapely 1.7, fiona 1.8.13.post1, pyproj 2.6.1.post1,
matplotlib 3.2, mapclassify 2.4.0 (2358, 2391)