Highlights of this release:
- The
geopandas.read_file()
andGeoDataFrame.to_file()
methods to read and write GIS file formats can now optionally use the pyogrio package under the hood through theengine="pyogrio"
keyword. The pyogrio package implements vectorized IO for GDAL/OGR vector data sources, and is faster compared to thefiona
-based engine (#2225). - GeoParquet support updated to implement 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
containingGeometryDtype
columns, but not the active geometry column, aGeoDataFrame
is returned, where the active geometry column is set toNone
(set the new geometry column withset_geometry()
) - If operations produce a
DataFrame
containing noGeometryDtype
columns, aDataFrame
is returned (this can be upcast again by callingset_geometry()
or theGeoDataFrame
constructor) - If operations produce a
Series
ofGeometryDtype
, aGeoSeries
is returned, otherwiseSeries
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).
- If operations produce a
-
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 themap_kwds
argument toGeoDataFrame.explore()
method (#2315). -
Add a new parameter
style_function
toGeoDataFrame.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 aUserWarning
instead of aValueError
. -
Fast rectangle clipping has been exposed as
GeoSeries/GeoDataFrame.clip_by_rect()
(#1928). -
The
mask
parameter ofGeoSeries/GeoDataFrame.clip()
now accepts a rectangular mask as a list-like to perform fast rectangle clipping using the newGeoSeries/GeoDataFrame.clip_by_rect()
(#2414). -
Bundled demo dataset
naturalearth_lowres
has been updated to version 5.0.1 of the source, with fieldISO_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()
andGeometryArray.almost_equals()
have been removed. They should
be replaced withGeometryArray.geom_equals_exact()
andGeometryArray.geom_almost_equals()
respectively (#2267). - Deprecated CRS functions
explicit_crs_from_epsg()
,epsg_from_crs()
andget_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 underlyingGeometryArray
now raises aValueError
(#2100). - Specifying a CRS in the
GeoDataFrame
constructor when no geometry column is provided and callingGeoDataFrame. set_crs
on aGeoDataFrame
without an active geometry column now raise aValueError
(#2100) - Passing non-geometry data to the
GeoSeries
constructor is now fully deprecated and will raise aTypeError
(#2314). Previously, apandas.Series
was returned for non-geometry data. - Deprecated
GeoSeries/GeoDataFrame
set operations__xor__()
,__or__()
,__and__()
and__sub__()
,geopandas.io.file.read_file
/to_file
andgeopandas.io.sql.read_postgis
now emitFutureWarning
instead ofDeprecationWarning
and will be completely removed in a future release. - Accessing the
crs
of aGeoDataFrame
without active geometry column is deprecated and will be removed in GeoPandas 0.12 (#2373).
Bug fixes:
GeoSeries.to_frame
now creates aGeoDataFrame
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
inGeoDataFrame.plot()
usinglegend=True
andmissing_kwds
(#2281). - Fix
explode()
incorrectly relating index to columns, including where the input index is not unique (#2292) - Fix
GeoSeries.[xyz]
raising anIndexError
when the underlying GeoSeries contains empty points (#2335). Rows corresponding to empty points now containnp.nan
. - Fix
GeoDataFrame.iloc
raising aTypeError
when indexing aGeoDataFrame
with only a single column ofGeometryDtype
(#1970). - Fix
GeoDataFrame.iterfeatures()
not returning features with the same field order asGeoDataFrame.columns
(#2396). - Fix
GeoDataFrame.from_features()
to support reading GeoJSON with null properties (#2243). - Fix
GeoDataFrame.to_parquet()
not interceptingengine
keyword argument, breaking consistency with pandas (#2227) - Fix
GeoDataFrame.explore()
producing an error whencolumn
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 usingGeoDataFrame
rather thancls
as the constructor. - Fix
GeoDataFrame.plot()
producing incorrect colors with mixed geometry types whencolors
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)
Acknowledgments
Thanks to everyone who contributed to this release!
A total of 31 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
- Akylzhan Sauranbay +
- Alan D. Snow
- Alyssa Ross +
- Andreas Meier +
- Andrii Oriekhov +
- Brendan Ward
- Ewout ter Hoeven +
- Guillaume Lostis +
- James McBride
- Joris Van den Bossche
- Karol Zlot +
- Koshy Thomas +
- Martin Fleischmann
- Martina Oefelein +
- Matt Richards
- Mike Taves
- Mjumbe Poe +
- Nathan Lis +
- Nicolò Lucchesi +
- RadMagnus +
- Ray Bell
- Ryan +
- Will Schlitzer
- bstadlbauer +
- clausmichele +
- froast +
- joooeey +
- readthedocs-assistant +
- rraymondgh +
- ryanward-io +
- simberaj