Python tools for geographic data
Small bug-fix release with several fixes for compatibility with the upcoming pandas 3.0, numpy 2.0 and fiona 1.10 releases.
Notes on dependencies:
API changes:
unary_union
is now deprecated and replaced by the union_all
method (#3007).align
keyword in binary methods now defaults to None
, treated as True. Explicit True
will silence the warning about mismachted indices. (#3212)sjoin
method will now preserve the name of the index of the right
GeoDataFrame, if it has one, instead of always using "index_right"
as the
name for the resulting column in the return value (#846, #2144).New methods:
line_merge
method from shapely to GeoSeries/GeoDataframe (#3214).set_precision
and get_precision
methods from shapely to GeoSeries/GeoDataframe (#3175).count_coordinates
method from shapely to GeoSeries/GeoDataframe (#3026).minimum_clearance
method from shapely to GeoSeries/GeoDataframe (#2989).is_ccw
method from shapely to GeoSeries/GeoDataframe (#3027).is_closed
attribute from shapely to GeoSeries/GeoDataframe (#3092).force_2d
and force_3d
methods from shapely to GeoSeries/GeoDataframe (#3090).contains_properly
method from shapely to GeoSeries/GeoDataframe (#3105).snap
method from shapely to GeoSeries/GeoDataframe (#3086).transform
method from shapely to GeoSeries/GeoDataFrame (#3075).dwithin
method to check for a "distance within" predicate on
GeoSeries/GeoDataFrame (#3153).to_geo_dict
method to generate GeoJSON-like dictionary from a GeoDataFrame (#3132).New features and improvements:
predicate="dwithin"
option and distance
argument to the sindex.query()
method
and sjoin
(#2882).__repr__
now trims trailing zeros for a more readable
output (#3087).on_invalid
parameter to from_wkt
and from_wkb
(#3110).make_valid
option in overlay
now uses the make_valid
method instead of
buffer(0)
(#3113)."geometry"
as dtype
to pd.read_csv
will now return a GeoSeries for
the specified columns (#3101).read_file
for the mask
keyword for the pyogrio engine (#3062).read_file
for the columns
keyword for the fiona engine (#3133).show_bbox
, drop_id
and to_wgs84
arguments to allow further customization of
GeoSeries.to_json
(#3226)Backwards incompatible API changes:
explode(.., index_parts=True)
is now
set to false for consistency with pandas (#3174).set_geometry
has been changed when passed a (Geo)Series ser
with a name.
The new active geometry column name in this case will be ser.name
, if not None, rather than
the previous active geometry column name. This means that if the new and old names are
different, then both columns will be preserved in the GeoDataFrame. To replicate the previous
behaviour, you can instead call gdf.set_geometry(ser.rename(gdf.active_geometry_name))
(#3237).Potentially breaking changes:
read_file
now returns a Pandas DataFrame instead of a GeoDataFrame with an empty
geometry
column.Bug fixes:
GeoDataFrame.merge()
incorrectly returning a DataFrame
instead of a
GeoDataFrame
when the suffixes
argument is applied to the active
geometry column (#2933).GeoDataFrame
constructor where if geometry
is given a named
GeoSeries
the name was not used as the active geometry column name (#3237).Deprecations and compatibility notes:
The deprecation of geopandas.datasets
has been enforced and the module has been
removed. New sample datasets are now available in the
geodatasets package (#3084).
Many longstanding deprecated functions, methods and properties have been removed (#3174), (#3189)
geopandas.io.read_file
, geopandas.io.to_file
and geopandas.io.sql.read_postgis
.
geopandas.read_file
, geopandas.read_postgis
and the GeoDataFrame/GeoSeries to_file(..)
method should be used instead.GeometryArray.data
property, np.asarray(..)
or the to_numpy()
method should be used instead.sindex.query_bulk
method, using sindex.query
instead.sjoin
parameter op
, predicate
should be supplied instead.__xor__
, __or__
, __and__
and
__sub__
. Instead use methods symmetric_difference
, union
, intersection
and
difference
respectively.plot_polygon_collection
,
plot_linestring_collection
and plot_point_collection
, use the GeoSeries/GeoDataFrame .plot
method directly instead..plot
parameters axes
and colormap
, instead use
ax
and cmap
respectively.Fixes for compatibility with psycopg (#3167).
The include_fields
and ignore_fields
keywords in read_file()
are deprecated
for the default pyogrio engine. Currently those are translated to the columns
keyword
for backwards compatibility, but you should directly use the columns
keyword instead
to select which columns to read (#3133).
The drop
keyword in set_geometry
has been deprecated, and in future the drop=True
behaviour will be removed (#3237). To prepare for this change, you should remove any explicit
drop=False
calls in your code (the default behaviour already is the same as drop=False
).
To replicate the previous drop=True
behaviour you should replace
gdf.set_geometry(new_geo_col, drop=True)
with
geo_col_name = gdf.active_geometry_name
gdf.set_geometry(new_geo_col).drop(columns=geo_col_name).rename_geometry(geo_col_name)
Small bug-fix release:
pandas.concat
CRS consistency checking where CRS differing by WKT whitespace only were treated as incompatible (#3023).Small bug-fix release:
overlay
where using buffer(0)
instead of make_valid
internally produced invalid results (#3074).explore()
method when the active geometry contains missing and empty geometries (#3094).Small bug-fix release updating the GeoParquet spec version and with a critical security fix:
read_parquet
and read_feather
for CVE-2023-47248 (#3070).GeoPandas will use Shapely 2.0 by default instead of PyGEOS when both Shapely >= 2.0 and PyGEOS are installed. PyGEOS will continue to be used by default when PyGEOS is installed alongside Shapely < 2.0. Support for PyGEOS and Shapely < 2.0 will be removed in GeoPandas 1.0. (#2999)
API changes:
seed
keyword in sample_points
is deprecated. Use rng
instead. (#2913).New methods:
concave_hull
method from shapely to GeoSeries/GeoDataframe (#2903).delaunay_triangles
method from shapely to GeoSeries/GeoDataframe (#2907).extract_unique_points
method from shapely to GeoSeries/GeoDataframe (#2915).frechet_distance()
method from shapely to GeoSeries/GeoDataframe (#2929).hausdorff_distance
method from shapely to GeoSeries/GeoDataframe (#2909).minimum_rotated_rectangle
method from shapely to GeoSeries/GeoDataframe (#2541).offset_curve
method from shapely to GeoSeries/GeoDataframe (#2902).remove_repeated_points
method from shapely to GeoSeries/GeoDataframe (#2940).reverse
method from shapely to GeoSeries/GeoDataframe (#2988).segmentize
method from shapely to GeoSeries/GeoDataFrame (#2910).shortest_line
method from shapely to GeoSeries/GeoDataframe (#2960).New features and improvements:
exclusive
parameter to sjoin_nearest
method for Shapely >= 2.0 (#2877)to_file()
method will now automatically detect the FlatGeoBuf driver
for files with the .fgb
extension (#2958)Bug fixes:
"crs"
(#2944)explore
when using UserDefined
bins (#2923)apply
with axis=1
where the given user defined function returns nested
data in the geometry column (#2959)np.int32
and pd.Int32Dtype
columns (#2950)assert_geodataframe_equal
now handles GeoDataFrames with no active geometry (#2498)Notes on (optional) dependencies:
Deprecations and compatibility notes:
geom_almost_equals()
methods have been deprecated and
geom_equals_exact()
should be used instead (#2604).Acknowledgments
Thanks to everyone who contributed to this release! A total of 16 people contributed patches to this release. People with a "+" by their names contributed for the first time.
Full Changelog: https://github.com/geopandas/geopandas/compare/v0.13.2...v0.14.0
Small bug-fix release with this critical fix:
file://..
) using geopandas.read_file
(#2948).Small bug-fix release with this critical fix:
geopandas.read_file
(#2908). This
restores the behaviour to download all data up-front before passing it to the
underlying engine (fiona or pyogrio), except if the server supports partial requests
(to support reading a subset of a large file).New methods:
sample_points
method to sample random points from Polygon or LineString geometries (#2860).hilbert_distance()
method that calculates the distance along a Hilbert curve for each geometry in a GeoSeries/GeoDataFrame (#2297).sort_values()
) based on the distance along the Hilbert curve (#2070).get_coordinates()
method from shapely to GeoSeries/GeoDataframe (#2624).minimum_bounding_circle()
method from shapely to GeoSeries/GeoDataframe (#2621).minimum_bounding_radius()
as GeoSeries method (#2827).Other new features and improvements:
GeoSeries.fillna
via another GeoSeries
(#2535).min_zoom
and max_zoom
inside the map_kwds
argument for .explore()
(#2599).mode="a"
or append=True
) in to_file()
using engine="pyogrio"
(#2788).to_wgs84
keyword to to_json
allowing automatic re-projecting to follow the 2016 GeoJSON specification (#416).to_json
output now includes a "crs"
field if the CRS is not the default WGS84 (#1774).geometry
attribute of GeoDataFrame without an active geometry column related to the default name "geometry"
being provided in the constructor (#2577)Deprecations and compatibility notes:
unary_union
will return 'GEOMETRYCOLLECTION EMPTY'
instead of None for all-None GeoSeries. (#2618)query_bulk()
method of the spatial index .sindex
property is deprecated in favor of query()
(#2823).Bug fixes:
plot()
if an empty or missing geometry is present (#2224)explore()
(#2657)to_parquet
/to_feather
to not write an invalid bbox (with NaNs) in the metadata in case of an empty GeoDataFrame (#2653)to_parquet
/to_feather
to use correct WKB flavor for 3D geometries (#2654)read_file
to avoid reading all file bytes prior to calling Fiona or Pyogrio if provided a URL as input (#2796)copy()
downcasting GeoDataFrames without an active geometry column to a DataFrame (#2775)iterfeatures()
method of GeoDataFrame to correctly handle non-scalar values when na='drop'
is specified (#2811)plot
(#2886)Notes on (optional) dependencies:
Acknowledgments
Thanks to everyone who contributed to this release! A total of 32 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Bug fixes:
to_crs()
when using PyGEOS or
Shapely >= 2.0 (previously the z coordinates were lost) (#1345).naturalearth_lowres
built-in dataset (#2670)