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:
- The
.dtype
of a GeoSeries is now a'geometry'
dtype (and no longer a numpyobject
dtype). - The
.values
of a GeoSeries now returns a customGeometryArray
, and no longer a numpy array. To get back a numpy array of Shapely scalars, you can convert explicitly usingnp.asarray(..)
.
- The
- The
GeoSeries
constructor now raises a warning when passed non-geometry data. Currently the constructor falls back to return a pandasSeries
, 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:
GeoSeries.isna
now considers only missing values, and if you want to check for empty geometries, you can useGeoSeries.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.
Other improvements:
- Addition of a
GeoSeries.affine_transform
method, equivalent of Shapely's function (#1008) - Addition of a
GeoDataFrame.rename_geometry
method to easily rename the active geometry column (#1053). - Addition of
geopandas.show_versions()
function, which can be used to give an overview of the installed libraries in bug reports (#899). - Updated documentation to work with latest version of geoplot and contextily (#1044, #1088)
Bug fixes:
- Also try to use
pysal
instead ofmapclassify
if available (#1082).
In addition, the minimum required versions of some dependencies have been increased: GeoPandas now requirs pandas >=0.23.4 and matplotlib >=2.0.1 (#1002).
- Compatibility with latest mapclassify version 2.1.0 (#1025).
Improvements:
- Significant performance improvement (around 10x) for
GeoDataFrame.iterfeatures
, which also improvesGeoDataFrame.to_file
(#864). - File IO enhancements based on Fiona 1.8:
- Support for writing bool dtype (#855) and datetime dtype, if the file format supports it (#728).
- Support for writing dataframes with multiple geometry types, if the file format allows it (e.g. GeoJSON for all types, or ESRI Shapefile for Polygon+MultiPolygon) (#827, #867, #870).
- 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
andinterpolate
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:
- Performance improvement in plotting by only flattening the geometries if there are actually 'Multi' geometries (#785).
- Choropleths: access to all
mapclassify
classification schemes and addition of theclassification_kwds
keyword in theplot
method to specify options for the scheme (#876). - Ability to specify a matplotlib axes object on which to plot the color bar with the
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:
- Remove the edge in the legend marker (#807).
- Fix the
align
method to preserve the CRS (#829). - Fix
geopandas.testing.assert_geodataframe_equal
to correctly compare left and right dataframes (#810). - Fix in choropleth mapping when the values contain missing values (#877).
- Better error message in
sjoin
if the input is not a GeoDataFrame (#842). - Fix in
read_postgis
to handle nullable (missing) geometries (#856). - Correctly passing through the
parse_dates
keyword inread_postgis
to the underlying pandas method (#860). - Fixed the shape of Antarctica in the included demo dataset 'naturalearth_lowres' (by updating to the latest version) (#804).
Small bug-fix release for compatibility with the latest Fiona and PySAL releases:
- Compatibility with Fiona 1.8: fix deprecation warning (#854).
- Compatibility with PySAL 2.0: switched to
mapclassify
instead ofPySAL
as dependency for choropleth mapping with thescheme
keyword (#872). - Fix for new
overlay
implementation in case the intersection is empty (#800).
Improvements:
- Improved
overlay
function (better performance, several incorrect behaviours fixed) (#429) - Pass keywords to control legend behavior (
legend_kwds
) toplot
(#434) - Add basic support for reading remote datasets in
read_file
(#531) - Pass kwargs for
buffer
operation on GeoSeries (#535) - Expose all geopy services as options in geocoding (#550)
- Faster write speeds to GeoPackage (#605)
- Permit
read_file
filtering with a bounding box from a GeoDataFrame (#613) - Set CRS on GeoDataFrame returned by
read_postgis
(#627) - Permit setting markersize for Point GeoSeries plots with column values (#633)
- Started an example gallery (#463, #690, #717)
- Support for plotting MultiPoints (#683)
- Testing functionalty (e.g.
assert_geodataframe_equal
) is now publicly exposed (#707) - Add
explode
method to GeoDataFrame (similar to the GeoSeries method) (#671) - Set equal aspect on active axis on multi-axis figures (#718)
- Pass array of values to column argument in
plot
(#770)
Bug fixes:
- Ensure that colorbars are plotted on the correct axis (#523)
- Handle plotting empty GeoDataFrame (#571)
- Save z-dimension when writing files (#652)
- Handle reading empty shapefiles (#653)
- Correct dtype for empty result of spatial operations (#685)
- Fix empty
sjoin
handling for pandas>=0.23 (#762)
Improvements:
- Improve plotting performance using
matplotlib.collections
(#267) - Improve default plotting appearance. The defaults now follow the new matplotlib defaults (#318, #502, #510)
- Provide access to x/y coordinates as attributes for Point GeoSeries (#383)
- Make the NYBB dataset available through
geopandas.datasets
(#384) - Enable
sjoin
on non-integer-index GeoDataFrames (#422) - Add
cx
indexer to GeoDataFrame (#482) GeoDataFrame.from_features
now also accepts a Feature Collection (#225, #507)- Use index label instead of integer id in output of
iterfeatures
andto_json
(#421) - Return empty data frame rather than raising an error when performing a spatial join with non overlapping geodataframes (#335)
Bug fixes:
- Compatibility with shapely 1.6.0 (#512)
- Fix
fiona.filter
results when bbox is not None (#372) - Fix
dissolve
to retain CRS (#389) - Fix
cx
behavior when using index of 0 (#478) - Fix display of lower bin in legend label of choropleth plots using a PySAL scheme (#450)
Improvements:
- Complete overhaul of the documentation
- Addition of
overlay
to perform spatial overlays with polygons (#142) - Addition of
sjoin
to perform spatial joins (#115, #145, #188) - Addition of
__geo_interface__
that returns a python data structure to represent theGeoSeries
as a GeoJSON-likeFeatureCollection
(#116) anditerfeatures
method (#178) - Addition of the
explode
(#146) anddissolve
(#310, #311) methods. - Addition of the
sindex
attribute, a Spatial Index using the optional dependencyrtree
(libspatialindex
) that can be used to speed up certain operations such as overlays (#140, #141). - Addition of the
GeoSeries.cx
coordinate indexer to slice a GeoSeries based on a bounding box of the coordinates (#55). - Improvements to plotting: ability to specify edge colors (#173), support for
the
vmin
,vmax
,figsize
,linewidth
keywords (#207), legends for chloropleth plots (#210), color points by specifying a colormap (#186) or a single color (#238). - Larger flexibility of
to_crs
, accepting both dicts and proj strings (#289) - Addition of embedded example data, accessible through
geopandas.datasets.get_path
.
API changes:
- In the
plot
method, theaxes
keyword is renamed toax
for consistency with pandas, and thecolormap
keyword is renamed tocmap
for consistency with matplotlib (#208, #228, #240).
Bug fixes:
- Properly handle rows with missing geometries (#139, #193).
- Fix
GeoSeries.to_json
(#263). - Correctly serialize metadata when pickling (#199, #206).
- Fix
merge
andconcat
to return correct GeoDataFrame (#247, #320, #322).