NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #999 most downloaded on PyPI
Geographic pandas extensions
Last release 6 days ago
28 Sep 2026
Release timing varies
gaps range from 2 weeks to 11 months
Most releases are documented
notes for 38 of 59 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
63 releases · first in 2013
…generated by GeoPandas. This can be considered a breaking change if you rely the composition of collections, as that has changed. A number of plotting…
New features and improvements:
Static plotting in GeoPandas has been re-implemented. The new tooling shall be mostly
backwards compatible while bringing a set of enhancements:
colorbar=True withinlegend_kwds.vmin and vmax keywords are supported when scheme is defined, not ignored.vmin and/or vmax clip the values.ax.legend() directly.add_labels keyword.tiles keyword, exposingcontextily.add_basemap from within the plot method. Requires contextilyscheme keyword can take a value "greedy" resulting in a greedy (topological)mapclassify andlibpysal packages.The related refactoring of the plotting infrastructure has changed the internal
representation of the figure generated by GeoPandas. This can be considered a breaking
change if you rely the composition of collections, as that has changed. A number of
plotting-related bugs has been fixed along as a side effect. All changes are reflected
in an updated user guide.
(#3708, #3728, #3748, #3752, #3753, #3763, #3767, #3689).
GeoParquet improvements:
Added geopandas.make_grid and GeoSeries.make_grid to generate a square
or hexagonal grids covering the input geometry (#2062).
Added geopandas.read_file_info to expose information about file layers, including layer
metadata (this is an alias for pyogrio.read_info) (#3759).
Add grid_size parameter to union, difference, symmetric_difference
and intersection (#3593).
Document how to access the feature ID (fid) as the index when reading files
with read_file and the pyogrio engine, using fid_as_index=True (#3829).
Deprecations and compatibility notes:
resolution keyword to buffer has been deprecated to align with the convention in shapely,quad_segs should be used instead (#3600).use_pygeos which had no functionality,seed keyword in sample_points (replaced by rng) (#3613).Bug fixes:
GeoSeries.sample_points looping without end on zero-area polygons, such as aMultiPoint, as it already did for emptyread_parquet ignoring the partitioning keyword when auto-detectingpartitioning=None no longer raises (#3459).GeoDataFrame.explode() raising a cryptic error when passing multipleGeoDataFrame.from_features raising a ValueError for an empty list ofcrs is provided; it now returns an empty GeoDataFrame withgeometry column (#3777).explode(index_parts=True) andget_coordinates(index_parts=True) being int32 instead of int64 on 32-bitCommunity:
Notes on dependencies:
Thanks to everyone who contributed to this release!
People with a "+" by their names contributed a patch for the first time.
New Contributors
Full Changelog: v1.1.0...v1.2.0
One column per quarter.
Further hardening of to_postgis against SQL injection ( #3800 ).
Bug fixes:
to_postgis against SQL injection (#3800).sample_points are not sorted along x-axis (#3773).GeoDataFrame.explore() ignoring custom legend_kwds={"labels": ...} for categorical and boolean columns (#3496).keep_geom_type in the overlay() function with empty input (#3745).Full Changelog: v1.1.3...v1.1.4
This release addresses a handful of small compatibility issues with pandas 3.0 and backports some bugfixes.
This release addresses a handful of small compatibility issues with pandas 3.0 and backports some bugfixes.
Bug fixes:
GeoSeries.sample_points not accepting list-like size when generating points usingpointpaterns (#3710).from_wkt/wkb to correctly handle missing values with pandas 3 (where the new str dtype is used) (#3714).to_postgis to correctly handle missing values with pandas 3 (where the new str dtype is used) (#3722).loc to assign column values to a new row index now correctly preserves the column CRS and geometry dtypepointpats methods of sample_points can now be fixed with rng (#3737).Full Changelog: v1.1.2...v1.1.3
Fix an issue that caused an error in GeoDataFrame.from_features when there is no properties field ( #3599 ).
Bug fixes:
GeoDataFrame.from_features when there is no properties field (#3599).read_file and to_file errors (#3682)read_parquet with to_pandas_kwargs for complex (list/struct) arrow types (#3640)value_counts on GeoSeries now preserves CRS in index (#3669)pyogrio cannot be imported (#3682).read_parquet with to_pandas_kwargs for complex (list/struct) arrow types (#3640)..to_json now provides a clearer error message when called on a GeoDataFrame without an active geometrydel gdf["geometry"] now will downcast to a pd.DataFrame if there are no geometry columns leftto_postgis via geometry column name (#3681).Full Changelog: v1.1.1...v1.1.2
A patch release containing minor regression fixes.
A patch release containing minor regression fixes.
Full Changelog: v1.1.0...v1.1.1
Bug fixes:
overlay with how="identity" when input dataframes have column
names that are equal (#3596).Deprecations and compatibility notes:
Notes on dependencies:
New features and improvements:
SpatialIndex.query in a form of a dense or ascipy for the sparse output.output_formatgrid_size parameter to union_all and dissolve (#3445).GeoDataFrame.plot now supports pd.Index as an input for the column keyword (#3463).disjoint_subset union algorithm for union_all and dissolve (#3534).constrained_delaunay_triangles method to GeoSeries/GeoDataFrame (#3552).to_pandas_kwargs argument to from_arrow, read_parquet and read_featheris_valid_coverage and invalid_coverage_edges to GeoSeries/GeoDataFrame tomaximum_inscribed_circle method from shapely to GeoSeries/GeoDataFrame (#3544).minimum_clearance_line method from shapely to GeoSeries/GeoDataFrame (#3543).orient_polygons method from shapely to GeoSeries/GeoDataFrame (#3559).method and keep_collapsed argument to make_valid (#3548).simplify_coverage method for topological simplification of polygonal coveragesm and has_m properties, include_m in get_coordinates) (#3561).geom_equals_identical method exposing equals_identical from shapely to GeoSeries/GeoDataFrame (#3560).geopandas.accessors module. Import this module to register apandas.Series.geo accessor, which exposes GeoSeries methods via pandas'soverlay with how=identity (#3504).read_file when a GeoDataFrame or GeoSeries maskBug fixes:
to_geo_dict and __geo_interface__. (#3436)sample_points that could occasionally result in non-uniform distribution (#3470).GroupBy.agg (#3368).geometry which are notcrs was provided (#3383).overlay with keep_geom_type returns wrong results if theoverlay (#3424).crs was provided (#3383).Deprecations and compatibility notes:
GeoSeries.select method wrapping the pandas Series.select method has been removed.geom_almost_equals method has been removed. Usegeom_equals_exact instead (#3522).Full Changelog: v1.0.1...v1.1.0
A small bug fix release fixing a regression caused by 1.0.0.
A small bug fix release fixing a regression caused by 1.0.0.
Bug fixes:
Full Changelog: v1.0.0...v1.0.1
Backwards incompatible API changes:
Notes on dependencies:
New methods:
count_geometries method from shapely to GeoSeries/GeoDataframe (#3154).count_interior_rings method from shapely to GeoSeries/GeoDataframe (#3154)relate_pattern method from shapely to GeoSeries/GeoDataframe (#3211).intersection_all method from shapely to GeoSeries/GeoDataframe (#3228).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).shared_paths method from shapely to GeoSeries/GeoDataframe (#3215).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).voronoi_polygons method from shapely to GeoSeries/GeoDataframe (#3177).contains_properly method from shapely to GeoSeries/GeoDataframe (#3105).build_area method exposing build_area shapely to GeoSeries/GeoDataframe (#3202).snap method from shapely to GeoSeries/GeoDataframe (#3086).transform method from shapely to GeoSeries/GeoDataFrame (#3075).get_geometry method from shapely to GeoSeries/GeoDataframe (#3287).dwithin method to check for a "distance within" predicate onto_geo_dict method to generate GeoJSON-like dictionary from a GeoDataFrame (#3132).polygonize method exposing both polygonize and polygonize_full fromis_valid_reason method from shapely to GeoSeries/GeoDataframe (#3176).to_arrow method and from_arrow class method toNew features and improvements:
predicate="dwithin" option and distance argument to the sindex.query() methodsjoin (#2882).__repr__ now trims trailing zeros for a more readableon_invalid parameter to from_wkt and from_wkb (#3110).make_valid option in overlay now uses the make_valid method instead ofbuffer(0) (#3113)."geometry" as dtype to pd.read_csv will now return a GeoSeries forread_file for the mask keyword for the pyogrio engine (#3062).read_file for the columns keyword for the fiona engine (#3133).to_parquet and read_parquet for writing and reading filessort keyword to clip method for GeoSeries and GeoDataFrame to allow optionalshow_bbox, drop_id and to_wgs84 arguments to allow further customization ofGeoSeries.to_json (#3226).explore now supports GeoDataFrames with additional columns containing datetimes, uuids andGeoSeries.fillna method now supports the limit keyword (#3290).on_attribute option argument to the sjoin()bbox covering encoding in geoparquet. Can filter reading of parquetalign keyword in binary methods now defaults to None, treated as True. Explicit TrueGeoSeries.set_crs can now be used to remove CRS information by passingcrs=None, allow_override=True (#3316).autolim keyword argument to GeoSeries.plot() and GeoDataFrame.plot() (#2817).metadata parameter to GeoDataFrame.to_file (#2850)geometryread_postgis will query the spatial_ref_sys table to determine the CRS authorityread_postgis will fallbackBackwards incompatible API changes:
sjoin method will now preserve the name of the index of the right"index_right" as theexplode(.., index_parts=True) is nowset_geometry has been changed when passed a (Geo)Series ser with a name.ser.name, if not None, rather thangdf.set_geometry(ser.rename(gdf.active_geometry_name)) (#3237).GeoDataframe constructor, passing a namedser to GeoDataFrame(df, geometry=ser) will always produce a GeoDataFrame with aser when constructing a GeoDataFrame, you can instead calldf.set_geometry(ser) or GeoDataFrame(df, geometry=ser).rename_geometry(ser.name) (#3337).delaunay_triangles now considers all geometries together when creating the Delaunay triangulationshapely.delaunay_triangles instead. (#3273)read_filegeometry column.Enforced deprecations:
geopandas.datasets has been enforced and the module has beengeopandas.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(..)GeometryArray.data property, np.asarray(..) or the to_numpy()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 anddifference respectively.plot_polygon_collection,plot_linestring_collection and plot_point_collection, use the GeoSeries/GeoDataFrame .plot.plot parameters axes and colormap, instead useax and cmap respectively.version keyword in to_parquet and to_feather.schema_version to specify the GeoParquet specification version (#3334).New deprecations:
unary_union attribute is now deprecated and replaced by the union_all() method (#3007) allowing
opting for a faster union algorithm for coverages (#3151).
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)The geopandas.use_pygeos option has been deprecated and will be removed in GeoPandas
1.1 (#3283)
Manual overriding of an existing CRS of a GeoSeries or GeoDataFrame by setting the crs property has been deprecated
and will be disabled in future. Use the set_crs() method instead (#3085).
Bug fixes:
GeoDataFrame.merge() incorrectly returning a DataFrame instead of aGeoDataFrame when the suffixes argument is applied to the activeGeoDataFrame constructor where if geometry is given a namedGeoSeries the name was not used as the active geometry column name (#3237).GeoSeries constructor when passing a Series and specifying a crs to not change the original input data (#2492).read_fileto_parquet to write correct metadata in case of 3D geometries (#2824).explore (#3316).Acknowledgments
Thanks to everyone who contributed to this release!
A total of 30 people contributed patches to this release. People with a "+" by their names contributed for the first time.
Full Changelog: v0.14.0...v1.0.0
Backwards incompatible API changes:
Notes on dependencies:
New methods:
count_geometries method from shapely to GeoSeries/GeoDataframe (#3154).count_interior_rings method from shapely to GeoSeries/GeoDataframe (#3154)relate_pattern method from shapely to GeoSeries/GeoDataframe (#3211).intersection_all method from shapely to GeoSeries/GeoDataframe (#3228).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).shared_paths method from shapely to GeoSeries/GeoDataframe (#3215).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).voronoi_polygons method from shapely to GeoSeries/GeoDataframe (#3177).contains_properly method from shapely to GeoSeries/GeoDataframe (#3105).build_area method exposing build_area shapely to GeoSeries/GeoDataframe (#3202).snap method from shapely to GeoSeries/GeoDataframe (#3086).transform method from shapely to GeoSeries/GeoDataFrame (#3075).get_geometry method from shapely to GeoSeries/GeoDataframe (#3287).dwithin method to check for a "distance within" predicate onto_geo_dict method to generate GeoJSON-like dictionary from a GeoDataFrame (#3132).polygonize method exposing both polygonize and polygonize_full fromis_valid_reason method from shapely to GeoSeries/GeoDataframe (#3176).to_arrow method and from_arrow class method toNew features and improvements:
predicate="dwithin" option and distance argument to the sindex.query() methodsjoin (#2882).__repr__ now trims trailing zeros for a more readableon_invalid parameter to from_wkt and from_wkb (#3110).make_valid option in overlay now uses the make_valid method instead ofbuffer(0) (#3113)."geometry" as dtype to pd.read_csv will now return a GeoSeries forread_file for the mask keyword for the pyogrio engine (#3062).read_file for the columns keyword for the fiona engine (#3133).to_parquet and read_parquet for writing and reading filessort keyword to clip method for GeoSeries and GeoDataFrame to allow optionalshow_bbox, drop_id and to_wgs84 arguments to allow further customization ofGeoSeries.to_json (#3226).explore now supports GeoDataFrames with additional columns containing datetimes, uuids andGeoSeries.fillna method now supports the limit keyword (#3290).bbox covering encoding in geoparquet. Can filter reading of parquetalign keyword in binary methods now defaults to None, treated as True. Explicit TrueGeoSeries.set_crs can now be used to remove CRS information by passingcrs=None, allow_override=True (#3316).autolim keyword argument to GeoSeries.plot() and GeoDataFrame.plot() (#2817).geometryread_postgis will query the spatial_ref_sys table to determine the CRS authorityread_postgis will fallbackBackwards incompatible API changes:
sjoin method will now preserve the name of the index of the right"index_right" as theexplode(.., index_parts=True) is nowset_geometry has been changed when passed a (Geo)Series ser with a name.ser.name, if not None, rather thangdf.set_geometry(ser.rename(gdf.active_geometry_name)) (#3237).GeoDataframe constructor, passing a namedser to GeoDataFrame(df, geometry=ser) will always produce a GeoDataFrame with aser when constructing a GeoDataFrame, you can instead calldf.set_geometry(ser) or GeoDataFrame(df, geometry=ser).rename_geometry(ser.name) (#3337).delaunay_triangles now considers all geometries together when creating the Delaunay triangulationshapely.delaunay_triangles instead. (#3273)read_filegeometry column.Enforced deprecations:
geopandas.datasets has been enforced and the module has beengeopandas.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(..)GeometryArray.data property, np.asarray(..) or the to_numpy()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 anddifference respectively.plot_polygon_collection,plot_linestring_collection and plot_point_collection, use the GeoSeries/GeoDataFrame .plot.plot parameters axes and colormap, instead useax and cmap respectively.version keyword in to_parquet and to_feather.schema_version to specify the GeoParquet specification version (#3334).New deprecations:
unary_union attribute is now deprecated and replaced by the union_all() method (#3007) allowing
opting for a faster union algorithm for coverages (#3151).
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)The geopandas.use_pygeos option has been deprecated and will be removed in GeoPandas
1.1 (#3283)
Manual overriding of an existing CRS of a GeoSeries or GeoDataFrame by setting the crs property has been deprecated
and will be disabled in future. Use the set_crs() method instead (#3085).
Bug fixes:
GeoDataFrame.merge() incorrectly returning a DataFrame instead of aGeoDataFrame when the suffixes argument is applied to the activeGeoDataFrame constructor where if geometry is given a namedGeoSeries the name was not used as the active geometry column name (#3237).GeoSeries constructor when passing a Series and specifying a crs to not change the original input data (#2492).read_fileto_parquet to write correct metadata in case of 3D geometries (#2824).explore (#3316).Backwards incompatible API changes:
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 Truesjoin method will now preserve the name of the index of the right"index_right" as theNew 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 onto_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() methodsjoin (#2882).__repr__ now trims trailing zeros for a more readableon_invalid parameter to from_wkt and from_wkb (#3110).make_valid option in overlay now uses the make_valid method instead ofbuffer(0) (#3113)."geometry" as dtype to pd.read_csv will now return a GeoSeries forread_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 ofGeoSeries.to_json (#3226)Backwards incompatible API changes:
explode(.., index_parts=True) is nowset_geometry has been changed when passed a (Geo)Series ser with a name.ser.name, if not None, rather thangdf.set_geometry(ser.rename(gdf.active_geometry_name)) (#3237).Potentially breaking changes:
read_filegeometry column.Bug fixes:
GeoDataFrame.merge() incorrectly returning a DataFrame instead of aGeoDataFrame when the suffixes argument is applied to the activeGeoDataFrame constructor where if geometry is given a namedGeoSeries 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(..)GeometryArray.data property, np.asarray(..) or the to_numpy()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 anddifference respectively.plot_polygon_collection,plot_linestring_collection and plot_point_collection, use the GeoSeries/GeoDataFrame .plot.plot parameters axes and colormap, instead useax 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 with several fixes for compatibility with the upcoming pandas 3.0, numpy 2.0 and fiona 1.10 releases.
Small bug-fix release with several fixes for compatibility with the upcoming pandas 3.0, numpy 2.0 and fiona 1.10 releases.
Several fixes for compatibility with the latest pandas 2.2 release.
Small bug-fix release:
pandas.concat CRS consistency checking where CRS differing by WKT whitespace only were treated as incompatible (#3023).Fix regression in overlay where using buffer(0) instead of make_valid internally produced invalid results (#3074).
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:
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).seed keyword in sample_points is deprecated. Use rng instead. (#2913).
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:
Small bug-fix release with this critical fix:
file://..) using geopandas.read_file (#2948).Small bug-fix release with this critical fix:
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).Deprecations and compatibility notes:
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.
Correctly handle geometries with Z dimension in to_crs() when using PyGEOS or Shapely >= 2.0 (previously the z coordinates were lost) (#1345).
Bug fixes:
to_crs() when using PyGEOS or
Shapely >= 2.0 (previously the z coordinates were lost) (#1345).naturalearth_lowres built-in dataset (#2670)Small bug-fix release removing the shapely<2 pin in the installation requirements.
Small bug-fix release removing the shapely<2 pin in the installation requirements.
Deprecations and compatibility notes:
The highlight of this release is the support for Shapely 2.0. This makes it possible to test Shapely 2.0 (currently 2.0b1) alongside GeoPandas.
Note that if you also have PyGEOS installed, you need to set an environment variable (USE_PYGEOS=0) before importing geopandas to actually test Shapely 2.0 features instead of PyGEOS. See https://geopandas.org/en/latest/getting_started/install.html#using-the-optional-pygeos-dependency for more details.
New features and improvements:
normalize() method from shapely to GeoSeries/GeoDataframe (#2537).make_valid() method from shapely to GeoSeries/GeoDataframe (#2539).where filter to read_file (#2552).Deprecations and compatibility notes:
crs of a GeoDataFrame without active geometry column was deprecated and this now raises an AttributeError (#2578)..explore() for recent Matplotlib versions (#2596).Bug fixes:
geopandas.clip() when clipping with an empty geometry (#2589).gdf.geometry where the active geometry column is missing, and a column named "geometry" is present will now raise an AttributeError, rather than returning gdf["geometry"] (#2575).pandas.concat will no longer silently override CRS information if not all inputs have the same CRS (#2056).Acknowledgments
Thanks to everyone who contributed to this release! A total of 17 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Fix regression (RecursionError) in reshape methods such as unstack() and pivot() involving MultiIndex, or GeoDataFrame construction with MultiIndex (#
Small bug-fix release:
unstack() and pivot() involving MultiIndex, or GeoDataFrame construction with MultiIndex (#2486).GeoDataFrame.explode() with non-default geometry column name.apply() causing row-wise all nan float columns to be casted to GeometryDtype (#2482).version in to_parquet and to_feather. As a result, the version parameter for the to_parquet and to_feather methods has been replaced with schema_version. version will be passed directly to underlying feather or parquet writer. version will only be used to set schema_version if version is one of 0.1.0 or 0.4.0 (#2496).Small bug-fix release:
unstack()
and pivot() involving MultiIndex, or GeoDataFrame construction with
MultiIndex (#2486).GeoDataFrame.explode() with non-default
geometry column name.apply() causing row-wise all nan float columns to be
casted to GeometryDtype (#2482).version in
to_parquet and to_feather. As a result, the version parameter
for the to_parquet and to_feather methods has been replaced with
schema_version. version will be passed directly to underlying
feather or parquet writer. version will only be used to set
schema_version if version is one of 0.1.0 or 0.4.0 (#2496).Highlights of this release:
geopandas.read_file() and GeoDataFrame.to_file() methods to read
and write GIS file formats can now optionally use the
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).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):
DataFrame containing the active geometry column, a
GeoDataFrame is returnedDataFrame 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())DataFrame containing no GeometryDtype columns, a
DataFrame is returned (this can be upcast again by calling set_geometry() or the
GeoDataFrame constructor)Series of GeometryDtype, a GeoSeries is returned,
otherwise Series is returned.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:
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).explicit_crs_from_epsg(), epsg_from_crs() and
get_epsg_file_contents() were removed (#2340).GeoSeries.isna() with empty
geometries present has been removed (#2349).GeoDataFrame/GeoSeries constructor which contradicted the
underlying GeometryArray now raises a ValueError (#2100).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)GeoSeries constructor is now fully deprecated and
will raise a TypeError (#2314). Previously, a pandas.Series was returned for
non-geometry data.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.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)UnboundLocalError in GeoDataFrame.plot() using legend=True and
missing_kwds (#2281).explode() incorrectly relating index to columns, including where the input index
is not unique (#2292)GeoSeries.[xyz] raising an IndexError when the underlying GeoSeries contains
empty points (#2335). Rows corresponding to empty points now contain np.nan.GeoDataFrame.iloc raising a TypeError when indexing a GeoDataFrame with only
a single column of GeometryDtype (#1970).GeoDataFrame.iterfeatures() not returning features with the same field order as
GeoDataFrame.columns (#2396).GeoDataFrame.from_features() to support reading GeoJSON with null properties
(#2243).GeoDataFrame.to_parquet() not intercepting engine keyword argument, breaking
consistency with pandas (#2227)GeoDataFrame.explore() producing an error when column is of boolean dtype
(#2403).GeoDataFrame.to_postgis() output the wrong SRID for ESRI
authority CRS (#2414).GeoDataFrame.from_dict/from_features classmethods using GeoDataFrame rather
than cls as the constructor.GeoDataFrame.plot() producing incorrect colors with mixed geometry types when
colors keyword is provided. (#2420)Notes on (optional) dependencies:
Small bug-fix release:
overlay() in case no geometries are intersecting (but
have overlapping total bounds) (#2172).overlay() with keep_geom_type=True in case the
overlay of two geometries in a GeometryCollection with other geometry types
(#2177).overlay() to honor the keep_geom_type keyword for the
op="difference" case (#2164).plot() with a mapclassify scheme in case the
formatted legend labels have duplicates (#2166).explore() method ignoring the vmin and vmax keywords
in case they are set to 0 (#2175).unary_union to correctly handle a GeoSeries with missing values (#2181).clip() (#2179).Small bug-fix release:
overlay() with non-overlapping geometries and a
non-default how (i.e. not "intersection") (#2157).Highlights of this release:
sjoin_nearest() method to join based on proximity, with the
ability to set a maximum search radius (#1865). In addition, the sindex
attribute gained a new method for a "nearest" spatial index query (#1865,
#2053).explore() method on GeoDataFrame and GeoSeries with native support
for interactive visualization based on folium / leaflet.js (#1953)geopandas.sjoin()/overlay()/clip() functions are now also
available as methods on the GeoDataFrame (#2141, #1984, #2150).New features and improvements:
value_counts() method for geometry dtype (#2047).explode() method has a new ignore_index keyword (consistent with
pandas' explode method) to reset the index in the result, and a new
index_parts keywords to control whether a cumulative count indexing the
parts of the exploded multi-geometries should be added (#1871).points_from_xy() is now available as a GeoSeries method from_xy (#1936).to_file() method will now attempt to detect the driver (if not
specified) based on the extension of the provided filename, instead of
defaulting to ESRI Shapefile (#1609).storage_options keyword in read_parquet() for
specifying filesystem-specific options (e.g. for S3) based on fsspec (#2107).~ (user home directory) expansion (#1876).convert_dtypes() method from pandas to preserve the
GeoDataFrame class (#2115).GeoSeries.from_wkb() (#2106).estimate_utm_crs() method to handle crossing the antimeridian
with pyproj 3.1+ (#2049).geocode() from GeoCode.Farm to the Photon
geocoding API (https://photon.komoot.io) (#2007).Deprecations and compatibility notes:
op= keyword of sjoin() to indicate which spatial predicate to use
for joining is being deprecated and renamed in favor of a new predicate=
keyword (#1626).cascaded_union attribute is deprecated, use unary_union instead (#2074).pd.concat(.., axis=1)
function if this results in duplicated active geometry columns (#2046).explode() method currently returns a GeoSeries/GeoDataFrame with a
MultiIndex, with an additional level with indices of the parts of the
exploded multi-geometries. For consistency with pandas, this will change in
the future and the new index_parts keyword is added to control this.Bug fixes:
clip() function to correctly clip MultiPoints instead of
leaving them intact when partly outside of the clip bounds (#2148).GeoSeries.isna() to correctly return a boolean Series in case of an
empty GeoSeries (#2073).GeoDataFrame(gdf)) (#2138).GeoDataFrame.__setitem__) (#1963)GeoDataFrame.apply() to preserve the active geometry column name
(#1955).sjoin() to not ignore the suffixes in case of a right-join
(how="right) (#2065).GeoDataFrame.explode() with a MultiIndex (#1945).to/from_wkb and to_from_wkt (#1891).to_file() and to_json() when DataFrame has duplicate columns to
raise an error (#1900).path_effects keyword in plot() (#2127).GeoDataFrame.explode() to preserve attrs (#1935)Notes on (optional) dependencies:
Many documentation improvements and a restyled and restructured website with a new logo (#1564, #1579, #1617, #1668, #1731, #1750, #1757, #1759).
New features and improvements:
geopandas.read_file function now accepts more general
file-like objects (e.g. fsspec open file objects). It will now also
automatically recognize zipped files (#1535).GeoDataFrame.plot() method now provides access to the pandas plotting
functionality for the non-geometry columns, either using the kind keyword
or the accessor method (e.g. gdf.plot(kind="bar") or gdf.plot.bar())
(#1465).from_wkt(), from_wkb(), to_wkt(), to_wkb() methods for
GeoSeries to construct a GeoSeries from geometries in WKT or WKB
representation, or to convert a GeoSeries to a pandas Seriew with WKT or WKB
values (#1710).GeoSeries.z attribute to access the z-coordinates of Point geometries
(similar to the existing .x and .y attributes) (#1773).to_crs() method now handles missing values (#1618)..attrs functionality (#1658).dissolve() method now allows dissolving by no column (by=None) to
create a union of all geometries (single-row GeoDataFrame) (#1568).estimate_utm_crs() method on GeoSeries/GeoDataFrame to determine the
UTM CRS based on the bounds (#1646).GeoDataFrame.from_dict() now accepts geometry and crs keywords
(#1619).GeoDataFrame.to_postgis() and geopandas.read_postgis() now supports
both sqlalchemy engine and connection objects (#1638).GeoDataFrame.explode() method now allows exploding based on a
non-geometry column, using the pandas implementation (#1720).GeoDataFrame/GeoSeries.explode() when using
the PyGEOS backend (#1693).intersection(),
intersects()) have a new align keyword which allows optionally not
aligning on the index before performing the operation with align=False
(#1668).GeoDataFrame.dissolve() method now supports all relevant keywords of
groupby(), i.e. the level, sort, observed and dropna keywords
(#1845).geopandas.overlay() function now accepts make_valid=False to skip
the step to ensure the input geometries are valid using buffer(0) (#1802).GeoDataFrame.to_json() method gained a drop_id keyword to
optionally not write the GeoDataFrame's index as the "id" field in the
resulting JSON (#1637).aspect keyword in the plotting methods to optionally allow retaining
the original aspect (#1512)interval keyword in the legend_kwds group of the plot() method
to control the appearance of the legend labels when using a classification
scheme (#1605).sindex attribute) is
now stored on the underlying array. This ensures that the spatial index is
preserved in more operations where possible, and that multiple geometry
columns of a GeoDataFrame can each have a spatial index (#1444).has_sindex attribute on the GeoSeries/GeoDataFrame to check
if a spatial index has already been initialized (#1627).geopandas.testing.assert_geoseries_equal() and assert_geodataframe_equal()
testing utilities now have a normalize keyword (False by default) to
normalize geometries before comparing for equality (#1826). Those functions
now also give a more informative error message when failing (#1808).Deprecations and compatibility notes:
is_ring attribute currently returns True for Polygons. In the future,
this will be False (#1631). In addition, start to check it for LineStrings
and LinearRings (instead of always returning False).objects keyword in the intersection() method of the
GeoDataFrame/GeoSeries.sindex spatial index object has been removed
(#1444).Bug fixes:
plot() method raising an error with empty
geometries (#1702, #1828).geopandas.overlay() to preserve geometries of the correct type which
are nested within a GeometryCollection as a result of the overlay
operation (#1582). In addition, a warning will now be raised if geometries
of different type are dropped from the result (#1554)..crs for empty GeoDataFrames (#1560).geopandas.clip to preserve the correct geometry column name (#1566).plot() method when using legend_kwds with multiple subplots
(#1583)missing_kwds keyword of the plot() method
when there are no areas with missing data (#1600).plot() method to correctly align values passed to the column
keyword as a pandas Series (#1670).rename_geometry() method now raises a more informative error message
when a duplicate column name is used (#1602).explode() method to preserve the CRS (#1655)GeoSeries.apply() method to again accept the convert_dtype
keyword to be consistent with pandas (#1636).GeoDataFrame.apply() to preserve the CRS when possible (#1848).geom in geoseries (#1753).shift() method of a GeoSeries/GeoDataFrame now preserves the CRS
(#1744).GeoSeries constructor without passing data but only an index (#1798).Notes on (optional) dependencies:
descartes package is no longer required for plotting polygons. This
functionality is now included by default in GeoPandas itself, when
matplotlib is available (#1677).read_file/to_file. This means
you can now force geopandas to install without fiona installed (although it
is still a default requirement) (#1775).Small bug-fix release for compatibility with PyGEOS 0.9.
Small bug-fix release:
plot() method when visualizing with a
JenksCaspallSampled or FisherJenksSampled scheme (#1486).GeoDataFrame.to_postgis (#1497).pd.read_pickle of files written with older
GeoPandas versions (#1511).Experimental: optional use of PyGEOS to speed up spatial operations (#1155).
PyGEOS is a faster alternative for Shapely (being contributed back to a future
version of Shapely), and is used in element-wise spatial operations and for
spatial index in e.g. sjoin (#1343, #1401, #1421, #1427, #1428). See the
installation docs
for more info and how to enable it.
New features and improvements:
IO enhancements:
GeoDataFrame.to_postgis() method to write to PostGIS database (#1248).GeoDataFrame.to_file (#1229).ignore_geometry keyword in read_file to only read
the attribute data. If set to True, a pandas DataFrame without geometry is
returned (#1383).geopandas.read_file now supports reading from file-like objects (#1329).GeoDataFrame.to_file now supports specifying the CRS to write to the file
(#802). By default it still uses the CRS of the GeoDataFrame.chunksize keyword in geopandas.read_postgis to read a query in
chunks (#1123).Improvements related to geometry columns and CRS:
gdf["other_geom_column"]) gives a
GeoSeries (#1336).gdf.crs attribute continues to returns the CRS of the
"active" geometry column. The CRS of other geometry columns can be accessed
from the column itself (eg gdf["other_geom_column"].crs) (#1339).set_crs() method on GeoDataFrame/GeoSeries to set the CRS of naive
geometries (#747).Improvements related to plotting:
column= keyword of the
GeoDataFrame plot(), we now honor all categories and its order (#1483).
In addition, a new categories keyword allows to specify all categories
and their order otherwise (#1173).scheme=), the
legend_kwds accept two new keywords to control the formatting of the
legend: fmt with a format string for the bin edges (#1253), and labels
to pass fully custom class labels (#1302).New covers() and covered_by() methods on GeoSeries/GeoDataFrame for the
equivalent spatial predicates (#1460, #1462).
GeoPandas now warns when using distance-based methods with data in a geographic projection (#1378).
Deprecations:
set_crs
method to override an existing CRS. See
the docs.geopandas.plotting module are deprecated for
public usage (#656).geopandas.io functions are deprecated, use the top-level read_file and
to_file instead (#1407).&, |, ^, -) are deprecated, use the
intersection(), union(), symmetric_difference(), difference() methods
instead (#1255).sindex for empty dataframe will in the future return an empty spatial
index instead of None (#1438).objects keyword in the intersection method of the spatial index
returned by the sindex attribute is deprecated and will be removed in the
future (#1440).Bug fixes:
total_bounds() method to ignore missing and empty geometries (#1312).geopandas.clip when masking with non-overlapping area resulting in an
empty GeoDataFrame (#1309, #1365).geopandas.sjoin when joining on an empty geometry column (#1318).pandas.concat preserves CRS when concatenating GeoSeries
objects (#1340), preserve the CRS in geopandas.clip (#1362) and in
GeoDataFrame.astype (#1366).GeoDataFrame.explode() when 'level_1' is one of the column names
(#1445).GeoSeries.equals() (#1451).And we now have a Code of Conduct!
GeoPandas 0.8.0 is the last release to support Python 3.5. The next release will require Python 3.6, pandas 0.24, numpy 1.15 and shapely 1.6 or higher.
Support for Python 2.7 has been dropped. GeoPandas now works with Python >= 3.5.
The important API change of this release is that GeoPandas now requires
PROJ > 6 and pyproj > 2.2, and that the .crs attribute of a GeoSeries and
GeoDataFrame no longer stores the CRS information as a proj4 string or dict,
but as a pyproj.CRS object (#1101).
This gives a better user interface and integrates improvements from pyproj and PROJ 6, but might also require some changes in your code. Check the migration guide in the documentation.
Other API changes;
GeoDataFrame.to_file method will now also write the GeoDataFrame index
to the file, if the index is named and/or non-integer. You can use the
index=True/False keyword to overwrite this default inference (#1059).New features and improvements:
geopandas.clip function to clip a GeoDataFrame to the spatial extent
of another shape (#1128).geopandas.overlay function now works for all geometry types, including
points and linestrings in addition to polygons (#1110).plot() method gained support for missing values (in the column that
determines the colors). By default it doesn't plot the corresponding
geometries, but using the new missing_kwds argument you can specify how to
style those geometries (#1156).plot() method now also supports plotting GeometryCollection and
LinearRing objects (#1225).geopandas.read_file (#1160).GeoDataFrame.to_file (#1220).Bug fixes:
GeoSeries.reset_index() now correctly results in a GeoDataFrame instead of DataFrame (#1252).geopandas.sjoin function to handle MultiIndex correctly (#1159).geopandas.sjoin function to preserve the index name of the left GeoDataFrame (#1150).Small bug-fix release:
GeoDataFrame.fillna to accept non-geometry values again when there are
no missing values in the geometry column. This should make it easier to fill
the numerical columns of the GeoDataFrame (#1279).Small bug-fix release fixing a few regressions:
.plot()
method (#1178, #1211).bounds and total_bounds attributes for empty GeoSeries, which
also fixes the repr of an empty or all-NA GeoSeries (#1184, #1195).Small bug-fix release fixing a few regressions:
astype when converting to string with Multi geometries (#1145) or when converting a dataframe without geometries (#1144).GeoSeries.fillna to accept np.nan again (#1149).Important note! This will be the last release to support Python 2.7 (#1031)
API changes:
A refactor of the internals based on the pandas ExtensionArray interface (#1000). The main user visible changes are:
.dtype of a GeoSeries is now a 'geometry' dtype (and no longer a numpy object dtype)..values of a GeoSeries now returns a custom GeometryArray, and no longer a numpy array. To get back a numpy array of Shapely scalars, you can convert explicitly using np.asarray(..).The GeoSeries constructor now raises a warning when passed non-geometry data. Currently the constructor falls back to return a pandas Series, but in the future this will raise an error (#1085).
The missing value handling has been changed to now separate the concepts of missing geometries and empty geometries (#601, 1062). In practice this means that (see the docs for more details):
GeoSeries.isna now considers only missing values, and if you want to check for empty geometries, you can use GeoSeries.is_empty (GeoDataFrame.isna already only looked at missing values).GeoSeries.dropna now actually drops missing values (before it didn't drop either missing or empty geometries)GeoSeries.fillna only fills missing values (behaviour unchanged).GeoSeries.align uses missing values instead of empty geometries by default to fill non-matching index entries.New features and improvements:
GeoSeries.affine_transform method, equivalent of Shapely's function (#1008).GeoDataFrame.rename_geometry method to easily rename the active geometry column (#1053).geopandas.show_versions() function, which can be used to give an overview of the installed libraries in bug reports (#899).legend_kwds keyword of the plot() method can now also be used to specify keywords for the color bar (#1102).sjoin() operation by reusing existing spatial index of the input dataframes, if available (#789).geopandas.options configuration, with currently a single option to control the display precision of the coordinates (options.display_precision). The default is now to show less coordinates (3 for projected and 5 for geographic coordinates), but the default can be overridden with the option.Bug fixes:
pysal instead of mapclassify if available (#1082).GeoDataFrame.astype() method now correctly returns a GeoDataFrame if the geometry column is preserved (#1009).to_crs method now uses always_xy=True to ensure correct lon/lat order handling for pyproj>=2.2.0 (#1122).plot() method in case of "multi" geometries (#1119).norm in the plot() method (#1091, #1089).GeoDataFrame.to_file to preserve VFS file paths (e.g. when a "s3://" path is specified) (#1124).geopandas.sjoin with empty geometries (#1138).In addition, the minimum required versions of some dependencies have been increased: GeoPandas now requires pandas >=0.23.4 and matplotlib >=2.0.1 (#1002).
Improvements:
Significant performance improvement (around 10x) for GeoDataFrame.iterfeatures,
which also improves GeoDataFrame.to_file (#864).
File IO enhancements based on Fiona 1.8:
Compatibility with pyproj >= 2 (#962).
A new geopandas.points_from_xy() helper function to convert x and y coordinates to Point objects (#896).
The buffer and interpolate methods now accept an array-like to specify a variable distance for each geometry (#781).
Addition of a relate method, corresponding to the shapely method that returns the DE-9IM matrix (#853).
Plotting improvements:
mapclassify classification schemes and addition of the classification_kwds keyword in the plot method to specify options for the scheme (#876).cax keyword, in order to have more control over the color bar placement (#894).Changed the default provider in geopandas.tools.geocode from Google (now requires an API key) to Geocode.Farm (#907, #975).
Bug fixes:
align method to preserve the CRS (#829).geopandas.testing.assert_geodataframe_equal to correctly compare left and right dataframes (#810).sjoin if the input is not a GeoDataFrame (#842).read_postgis to handle nullable (missing) geometries (#856).parse_dates keyword in read_postgis to the underlying pandas method (#860).Small bug-fix release for compatibility with the latest Fiona and PySAL releases:
mapclassify instead of PySAL as
dependency for choropleth mapping with the scheme keyword (#872).overlay implementation in case the intersection is empty (#800).Improvements:
overlay function (better performance, several incorrect behaviours fixed) (#429)legend_kwds) to plot (#434)read_file (#531)buffer operation on GeoSeries (#535)read_file filtering with a bounding box from a GeoDataFrame (#613)read_postgis (#627)assert_geodataframe_equal) is now publicly exposed (#707)explode method to GeoDataFrame (similar to the GeoSeries method) (#671)plot (#770)Bug fixes:
sjoin handling for pandas>=0.23 (#762)Improvements:
matplotlib.collections (#267)geopandas.datasets (#384)sjoin on non-integer-index GeoDataFrames (#422)cx indexer to GeoDataFrame (#482)GeoDataFrame.from_features now also accepts a Feature Collection (#225, #507)iterfeatures and
to_json (#421)Bug fixes:
fiona.filter results when bbox is not None (#372)dissolve to retain CRS (#389)cx behavior when using index of 0 (#478)Improvements:
overlay to perform spatial overlays with polygons (#142)sjoin to perform spatial joins (#115, #145, #188)__geo_interface__ that returns a python data structure
to represent the GeoSeries as a GeoJSON-like FeatureCollection (#116)
and iterfeatures method (#178)explode (#146) and dissolve (#310, #311) methods.sindex attribute, a Spatial Index using the optional
dependency rtree (libspatialindex) that can be used to speed up
certain operations such as overlays (#140, #141).GeoSeries.cx coordinate indexer to slice a GeoSeries based
on a bounding box of the coordinates (#55).vmin, vmax, figsize, linewidth keywords (#207), legends
for chloropleth plots (#210), color points by specifying a colormap (#186) or
a single color (#238).to_crs, accepting both dicts and proj strings (#289)geopandas.datasets.get_path.API changes:
plot method, the axes keyword is renamed to ax for
consistency with pandas, and the colormap keyword is renamed to cmap
for consistency with matplotlib (#208, #228, #240).Bug fixes:
GeoSeries.to_json (#263).merge and concat to return correct GeoDataFrame (#247, #320, #322).Deprecations and compatibility notes:
Highlights of this release:
geopandas.read_file() and GeoDataFrame.to_file() methods to read and write GIS file formats can now optionally use the 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).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):
DataFrame containing the active geometry column, a GeoDataFrame is returnedDataFrame 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())DataFrame containing no GeometryDtype columns, a DataFrame is returned (this can be upcast again by calling set_geometry() or the GeoDataFrame constructor)Series of GeometryDtype, a GeoSeries is returned, otherwise Series is returned.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:
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).explicit_crs_from_epsg(), epsg_from_crs() and get_epsg_file_contents() were removed (#2340).GeoSeries.isna() with empty geometries present has been removed (#2349).GeoDataFrame/GeoSeries constructor which contradicted the underlying GeometryArray now raises a ValueError (#2100).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)GeoSeries constructor is now fully deprecated and will raise a TypeError (#2314). Previously, a pandas.Series was returned for non-geometry data.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.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)UnboundLocalError in GeoDataFrame.plot() using legend=True and missing_kwds (#2281).explode() incorrectly relating index to columns, including where the input index is not unique (#2292)GeoSeries.[xyz] raising an IndexError when the underlying GeoSeries contains empty points (#2335). Rows corresponding to empty points now contain np.nan.GeoDataFrame.iloc raising a TypeError when indexing a GeoDataFrame with only a single column of GeometryDtype (#1970).GeoDataFrame.iterfeatures() not returning features with the same field order as GeoDataFrame.columns (#2396).GeoDataFrame.from_features() to support reading GeoJSON with null properties (#2243).GeoDataFrame.to_parquet() not intercepting engine keyword argument, breaking consistency with pandas (#2227)GeoDataFrame.explore() producing an error when column is of boolean dtype (#2403).GeoDataFrame.to_postgis() output the wrong SRID for ESRI authority CRS (#2414).GeoDataFrame.from_dict/from_features classmethods using GeoDataFrame rather than cls as the constructor.GeoDataFrame.plot() producing incorrect colors with mixed geometry types when colors keyword is provided. (#2420)Notes on (optional) dependencies:
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.
Avoid internal deprecation warning in clip() (#2179).
Small bug-fix release:
overlay() in case no geometries are intersecting (but have overlapping total bounds) (#2172).overlay() with keep_geom_type=True in case the overlay of two geometries in a GeometryCollection with other geometry types (#2177).overlay() to honor the keep_geom_type keyword for the op="differnce" case (#2164).plot() with a mapclassify scheme in case the formatted legend labels have duplicates (#2166).explore() method ignoring the vmin and vmax keywords in case they are set to 0 (#2175).unary_union to correctly handle a GeoSeries with missing values (#2181).clip() (#2179).Fix regression in overlay() with non-overlapping geometries and a non-default how (i.e. not "intersection") (#2157).
Small bug-fix release:
overlay() with non-overlapping geometries and a non-default how (i.e. not "intersection") (#2157).Deprecations and compatibility notes:
Highlights of this release:
sjoin_nearest() method to join based on proximity, with the
ability to set a maximum search radius (#1865). In addition, the sindex
attribute gained a new method for a "nearest" spatial index query (#1865,
#2053).explore() method on GeoDataFrame and GeoSeries with native support
for interactive visualization based on folium / leaflet.js (#1953)geopandas.sjoin()/overlay()/clip() functions are now also
available as methods on the GeoDataFrame (#2141, #1984, #2150).New features and improvements:
value_counts() method for geometry dtype (#2047).explode() method has a new ignore_index keyword (consistent with
pandas' explode method) to reset the index in the result, and a new
index_parts keywords to control whether a cumulative count indexing the
parts of the exploded multi-geometries should be added (#1871).points_from_xy() is now available as a GeoSeries method from_xy (#1936).to_file() method will now attempt to detect the driver (if not
specified) based on the extension of the provided filename, instead of
defaulting to ESRI Shapefile (#1609).storage_options keyword in read_parquet() for
specifying filesystem-specific options (e.g. for S3) based on fsspec (#2107).~ (user home directory) expansion (#1876).convert_dtypes() method from pandas to preserve the
GeoDataFrame class (#2115).GeoSeries.from_wkb() (#2106).estimate_utm_crs() method to handle crossing the antimeridian
with pyproj 3.1+ (#2049).geocode() from GeoCode.Farm to the Photon
geocoding API (https://photon.komoot.io) (#2007).Deprecations and compatibility notes:
op= keyword of sjoin() to indicate which spatial predicate to use
for joining is being deprecated and renamed in favor of a new predicate=
keyword (#1626).cascaded_union attribute is deprecated, use unary_union instead (#2074).pd.concat(.., axis=1)
function if this results in duplicated active geometry columns (#2046).explode() method currently returns a GeoSeries/GeoDataFrame with a
MultiIndex, with an additional level with indices of the parts of the
exploded multi-geometries. For consistency with pandas, this will change in
the future and the new index_parts keyword is added to control this.Bug fixes:
clip() function to correctly clip MultiPoints instead of
leaving them intact when partly outside of the clip bounds (#2148).GeoSeries.isna() to correctly return a boolean Series in case of an
empty GeoSeries (#2073).GeoDataFrame(gdf)) (#2138).GeoDataFrame.__setitem__) (#1963)GeoDataFrame.apply() to preserve the active geometry column name
(#1955).sjoin() to not ignore the suffixes in case of a right-join
(how="right) (#2065).GeoDataFrame.explode() with a MultiIndex (#1945).to/from_wkb and to_from_wkt (#1891).to_file() and to_json() when DataFrame has duplicate columns to
raise an error (#1900).path_effects keyword in plot() (#2127).GeoDataFrame.explode() to preserve attrs (#1935)Notes on (optional) dependencies:
Acknowledgments
Thanks to everyone who contributed to this release! A total of 29 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Deprecations and compatibility notes:
GeoPandas 0.9.0 features a long list of new features, enhancements and bug fixes, see the full list below. In addition, there are many documentation improvements and a restyled and restructured website with a new logo (#1564, #1579, #1617, #1668, #1731, #1750, #1757, #1759).
New features and improvements:
geopandas.read_file function now accepts more general file-like objects (e.g. fsspec open file objects). It will now also automatically recognize zipped files (#1535).GeoDataFrame.plot() method now provides access to the pandas plotting functionality for the non-geometry columns, either using the kind keyword or the accessor method (e.g. gdf.plot(kind="bar") or gdf.plot.bar()) (#1465).from_wkt(), from_wkb(), to_wkt(), to_wkb() methods for GeoSeries to construct a GeoSeries from geometries in WKT or WKB representation, or to convert a GeoSeries to a pandas Seriew with WKT or WKB values (#1710).GeoSeries.z attribute to access the z-coordinates of Point geometries (similar to the existing .x and .y attributes) (#1773).to_crs() method now handles missing values (#1618)..attrs functionality (#1658).dissolve() method now allows dissolving by no column (by=None) to create a union of all geometries (single-row GeoDataFrame) (#1568).estimate_utm_crs() method on GeoSeries/GeoDataFrame to determine the UTM CRS based on the bounds (#1646).GeoDataFrame.from_dict() now accepts geometry and crs keywords (#1619).GeoDataFrame.to_postgis() and geopandas.read_postgis() now supports both sqlalchemy engine and connection objects (#1638).GeoDataFrame.explode() method now allows exploding based on a non-geometry column, using the pandas implementation (#1720).GeoDataFrame/GeoSeries.explode() when using the PyGEOS backend (#1693).intersection(), intersects()) have a new align keyword which allows optionally not aligning on the index before performing the operation with align=False (#1668).GeoDataFrame.dissolve() method now supports all relevant keywords of groupby(), i.e. the level, sort, observed and dropna keywords (#1845).geopandas.overlay() function now accepts make_valid=False to skip the step to ensure the input geometries are valid using buffer(0) (#1802).GeoDataFrame.to_json() method gained a drop_id keyword to optionally not write the GeoDataFrame's index as the "id" field in the resulting JSON (#1637).aspect keyword in the plotting methods to optionally allow retaining the original aspect (#1512)interval keyword in the legend_kwds group of the plot() method to control the appearance of the legend labels when using a classification scheme (#1605).sindex attribute) is now stored on the underlying array. This ensures that the spatial index is preserved in more operations where possible, and that multiple geometry columns of a GeoDataFrame can each have a spatial index (#1444).has_sindex attribute on the GeoSeries/GeoDataFrame to check if a spatial index has already been initialized (#1627).geopandas.testing.assert_geoseries_equal() and assert_geodataframe_equal() testing utilities now have a normalize keyword (False by default) to normalize geometries before comparing for equality (#1826). Those functions now also give a more informative error message when failing (#1808).Deprecations and compatibility notes:
is_ring attribute currently returns True for Polygons. In the future, this will be False (#1631). In addition, start to check it for LineStrings and LinearRings (instead of always returning False).objects keyword in the intersection() method of the GeoDataFrame/GeoSeries.sindex spatial index object has been removed (#1444).Bug fixes:
plot() method raising an error with empty geometries (#1702, #1828).geopandas.overlay() to preserve geometries of the correct type which are nested within a GeometryCollection as a result of the overlay operation (#1582). In addition, a warning will now be raised if geometries of different type are dropped from the result (#1554)..crs for empty GeoDataFrames (#1560).geopandas.clip to preserve the correct geometry column name (#1566).plot() method when using legend_kwds with multiple subplots (#1583)missing_kwds keyword of the plot() method when there are no areas with missing data (#1600).plot() method to correctly align values passed to the column keyword as a pandas Series (#1670).rename_geometry() method now raises a more informative error message when a duplicate column name is used (#1602).explode() method to preserve the CRS (#1655)GeoSeries.apply() method to again accept the convert_dtype keyword to be consistent with pandas (#1636).GeoDataFrame.apply() to preserve the CRS when possible (#1848).geom in geoseries (#1753).shift() method of a GeoSeries/GeoDataFrame now preserves the CRS (#1744).GeoSeries constructor without passing data but only an index (#1798).Notes on (optional) dependencies:
descartes package is no longer required for plotting polygons. This functionality is now included by default in GeoPandas itself, when matplotlib is available (#1677).read_file/to_file. This means you can now force geopandas to install without fiona installed (although it is still a default requirement) (#1775).Acknowledgments
Thanks to everyone who contributed to this release! A total of 29 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Small bug-fix release for compatibility with PyGEOS 0.9
Small bug-fix release for compatibility with PyGEOS 0.9
Fix a regression in the plot() method when visualizing with a JenksCaspallSampled or FisherJenksSampled scheme (#1486).
Small bug-fix release:
plot() method when visualizing with a
JenksCaspallSampled or FisherJenksSampled scheme (#1486).GeoDataFrame.to_postgis (#1497).pd.read_pickle of files written with older
GeoPandas versions (#1511).Thanks to Ian Rose, Joris Van den Bossche and Martin Fleischmann for their contributions!
When constructing a GeoSeries or GeoDataFrame from data that already has a CRS, a deprecation warning is raised when both CRS don't match, and in the…
Experimental: optional use of PyGEOS to speed up spatial operations (#1155). PyGEOS is a faster alternative for Shapely (being contributed back to a future version of Shapely), and is used in element-wise spatial operations and for spatial index in e.g. sjoin (#1343, #1401, #1421, #1427, #1428). See the installation docs for more info and how to enable it.
New features and improvements:
GeoDataFrame.to_postgis() method to write to PostGIS database (#1248).GeoDataFrame.to_file (#1229).ignore_geometry keyword in read_file to only read the attribute data. If set to True, a pandas DataFrame without geometry is returned (#1383).geopandas.read_file now supports reading from file-like objects (#1329).GeoDataFrame.to_file now supports specifying the CRS to write to the file (#802). By default it still uses the CRS of the GeoDataFrame.chunksize keyword in geopandas.read_postgis to read a query in chunks (#1123).gdf["other_geom_column"]) gives a GeoSeries (#1336).gdf.crs attribute continues to returns the CRS of the "active" geometry column. The CRS of other geometry columns can be accessed from the column itself (eg gdf["other_geom_column"].crs) (#1339).set_crs() method on GeoDataFrame/GeoSeries to set the CRS of naive geometries (#747).column= keyword of the GeoDataFrame plot(), we now honor all categories and its order (#1483). In addition, a new categories keyword allows to specify all categories and their order otherwise (#1173).scheme=), the legend_kwds accept two new keywords to control the formatting of the legend: fmt with a format string for the bin edges (#1253), and labels to pass fully custom class labels (#1302).covers() and covered_by() methods on GeoSeries/GeoDataframe for the equivalent spatial predicates (#1460, #1462).Deprecations:
set_crs method to override an existing CRS. See the docs.geopandas.plotting module are deprecated for public usage (#656).geopandas.io functions are deprecated, use the top-level read_file and to_file instead (#1407).&, |, ^, -) are deprecated, use the intersection(), union(), symmetric_difference(), difference() methods instead (#1255).sindex for empty dataframe will in the future return an empty spatial index instead of None (#1438).objects keyword in the intersection method of the spatial index returned by the sindex attribute is deprecated and will be removed in the future (#1440).Bug fixes:
total_bounds() method to ignore missing and empty geometries (#1312).geopandas.clip when masking with non-overlapping area resulting in an empty GeoDataFrame (#1309, #1365).geopandas.sjoin when joining on an empty geometry column (#1318).pandas.concat preserves CRS when concatenating GeoSeries objects (#1340), preserve the CRS in geopandas.clip (#1362) and in GeoDataFrame.astype (#1366).GeoDataFrame.explode() when 'level_1' is one of the column names (#1445).GeoSeries.equals() (#1451).And we now have a Code of Conduct!
GeoPandas 0.8.0 is the last release to support Python 3.5. The next release will require Python 3.6, pandas 0.24, numpy 1.15 and shapely 1.6 or higher.
Acknowledgments
Thanks to everyone who contributed to this release! A total of 28 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Support for Python 2.7 has been dropped. GeoPandas now works with Python >= 3.5.
Support for Python 2.7 has been dropped. GeoPandas now works with Python >= 3.5.
The important API change of this release is that GeoPandas now requires PROJ > 6 and pyproj > 2.2, and that the .crs attribute of a GeoSeries and GeoDataFrame no longer stores the CRS information as a proj4 string or dict, but as a pyproj.CRS object (#1101).
This gives a better user interface and integrates improvements from pyproj and PROJ 6, but might also require some changes in your code. Check the migration guide in the documentation.
Other API changes:
GeoDataFrame.to_file method will now also write the GeoDataFrame index to the file, if the index is named and/or non-integer. You can use the index=True/False keyword to overwrite this default inference (#1059).New features and improvements:
geopandas.clip function to clip a GeoDataFrame to the spatial extent of another shape (#1128).geopandas.overlay function now works for all geometry types, including points and linestrings in addition to polygons (#1110).plot() method gained support for missing values (in the column that determines the colors). By default it doesn't plot the corresponding geometries, but using the new missing_kwds argument you can specify how to style those geometries (#1156).plot() method now also supports plotting GeometryCollection and LinearRing objects (#1225).geopandas.read_file (#1160).GeoDataFrame.to_file (#1220).Bug fixes:
GeoSeries.reset_index() now correctly results in a GeoDataFrame instead of DataFrame (#1252).geopandas.sjoin function to handle MultiIndex correctly (#1159).geopandas.sjoin function to preserve the index name of the left GeoDataFrame (#1150).Acknowledgments
Thanks to everyone who contributed to this release! A total of 12 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Compatibility with Shapely 1.7 and pandas 1.0 (#1244).
Small bug-fix release:
GeoDataFrame.fillna to accept non-geometry values again when there are
no missing values in the geometry column. This should make it easier to fill
the numerical columns of the GeoDataFrame (#1279).Small bug-fix release fixing a few regressions:
Small bug-fix release fixing a few regressions:
.plot()
method (#1178, #1211).bounds and total_bounds attributes for empty GeoSeries, which
also fixes the repr of an empty or all-NA GeoSeries (#1184, #1195).Small bug-fix release fixing a few regressions:
Small bug-fix release fixing a few regressions:
astype when converting to string with Multi geometries (#1145) or when converting a dataframe without geometries (#1144).GeoSeries.fillna to accept np.nan again (#1149).GeoPandas 0.6.0 features a refactor of the internals based on the new pandas ExtensionArray interface, for better integration with pandas. Although th
GeoPandas 0.6.0 features a refactor of the internals based on the new pandas ExtensionArray interface, for better integration with pandas. Although this change should keep the user interface mostly stable, there are a few changes summarized below. Further, this release includes a nice set of other improvements and bug fixes.
Important note! This will be the last release to support Python 2.7 (#1031)
API changes:
.dtype of a GeoSeries is now a 'geometry' dtype (and no longer a numpy object dtype)..values of a GeoSeries now returns a custom GeometryArray, and no longer a numpy array. To get back a numpy array of Shapely scalars, you can convert explicitly using np.asarray(..).GeoSeries constructor now raises a warning when passed non-geometry data. Currently the constructor falls back to return a pandas Series, but in the future this will raise an error (#1085).GeoSeries.isna now considers only missing values, and if you want to check for empty geometries, you can use GeoSeries.is_empty (GeoDataFrame.isna already only looked at missing values).GeoSeries.dropna now actually drops missing values (before it didn't drop either missing or empty geometries)GeoSeries.fillna only fills missing values (behaviour unchanged).GeoSeries.align uses missing values instead of empty geometries by default to fill non-matching index entries.New features and improvements:
GeoSeries.affine_transform method, equivalent of Shapely's function (#1008).GeoDataFrame.rename_geometry method to easily rename the active geometry column (#1053).geopandas.show_versions() function, which can be used to give an overview of the installed libraries in bug reports (#899).legend_kwds keyword of the plot() method can now also be used to specify keywords for the color bar (#1102).sjoin() operation by re-using existing spatial index of the input dataframes, if available (#789).geopandas.options configuration, with currently a single option to control the display precision of the coordinates (options.display_precision). The default is now to show less coordinates (3 for projected and 5 for geographic coordinates), but the default can be overridden with the option.Bug fixes:
pysal instead of mapclassify if available (#1082).GeoDataFrame.astype() method now correctly returns a GeoDataFrame if the geometry column is preserved (#1009).to_crs method now uses always_xy=True to ensure correct lon/lat order handling for pyproj>=2.2.0 (#1122).plot() method in case of "multi" geometries (#1119).norm in the plot() method (#1091, #1089).GeoDataFrame.to_file to preserve VFS file paths (e.g. when a "s3://" path is specified) (#1124).geopandas.sjoin with empty geometries (#1138).In addition, the minimum required versions of some dependencies have been increased: GeoPandas now requires pandas >=0.23.4 and matplotlib >=2.0.1 (#1002).
Acknowledgments
Thanks to everyone who contributed to this release! A total of 20 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.
Nothing published for this version
Compatibility with latest mapclassify version 2.1.0 (#1025).
GeoPandas 0.5.0 includes some improvements for writing files with fiona (better performance, better support for data types and mixed geometry types),
GeoPandas 0.5.0 includes some improvements for writing files with fiona (better performance, better support for data types and mixed geometry types), along with many other new features and bug fixes, see the full list below.
Improvements:
GeoDataFrame.iterfeatures,
which also improves GeoDataFrame.to_file (#864).geopandas.points_from_xy() helper function to convert x and y coordinates to Point objects (#896).buffer and interpolate methods now accept an array-like to specify a variable distance for each geometry (#781).relate method, corresponding to the shapely method that returns the DE-9IM matrix (#853).mapclassify classification schemes and addition of the classification_kwds keyword in the plot method to specify options for the scheme (#876).cax keyword, in order to have more control over the color bar placement (#894).geopandas.tools.geocode from Google (now requires an API key) to Geocode.Farm (#907, #975).Bug fixes:
align method to preserve the CRS (#829).geopandas.testing.assert_geodataframe_equal to correctly compare left and right dataframes (#810).sjoin if the input is not a GeoDataFrame (#842).read_postgis to handle nullable (missing) geometries (#856).parse_dates keyword in read_postgis to the underlying pandas method (#860).Acknowledgments
Thanks to everyone who contributed to this release! A total of 33 people contributed to this release. People with a "+" by their names contributed a patch for the first time.
Compatibility with Fiona 1.8: fix deprecation warning (#854 and #916).
Small bug-fix release for compatibility with the latest Fiona and PySAL releases:
mapclassify instead of PySAL as
dependency for choropleth mapping with the scheme keyword (#872).overlay implementation in case the intersection is empty (#800).Acknowledgments
A total of 7 people contributed to this release. People with a "+" by their names contributed a patch for the first time.
GeoPandas 0.4.0 improves the overlay functionality (much better performance, and fixed behaviour for certain cases). This can possibly change results
GeoPandas 0.4.0 improves the overlay functionality (much better performance, and fixed behaviour for certain cases). This can possibly change results you obtained before, but likely more correct now. But given this change, please test and feedback welcome! Further, there is a long list of other new features and bug fixes, see below.
GeoPandas can be installed with conda from the conda-forge channel (conda install -c conda-forge geopandas) or with pip assuming the dependencies are available for your platform (pip install geopandas).
Improvements:
overlay function (better performance, several incorrect behaviours fixed) (#429)legend_kwds) to plot (#434)read_file (#531)buffer operation on GeoSeries (#535)read_file filtering with a bounding box from a GeoDataFrame (#613)read_postgis (#627)assert_geodataframe_equal) is now publicly exposed (#707)explode method to GeoDataFrame (similar to the GeoSeries method) (#671)plot (#770)Bug fixes:
sjoin handling for pandas>=0.23 (#762)Acknowledgments
Thanks to everyone who contributed to this release! A total of 26 people contributed to this release. People with a "+" by their names contributed a patch for the first time.
Improve plotting performance using matplotlib.collections
Improvements:
matplotlib.collections (#267)geopandas.datasets (#384)sjoin on non-integer-index GeoDataFrames (#422)cx indexer to GeoDataFrame (#482)GeoDataFrame.from_features now also accepts a Feature Collection (#225, #507)iterfeatures and
to_json (#421)Bug fixes:
fiona.filter results when bbox is not None (#372)dissolve to retain CRS (#389)cx behavior when using index of 0 (#478)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →