RLS: 0.11 release notes (#2462)

* DOC: draft 0.11 release notes

* finish all commit

* code review suggestions

Co-Authored-By: rraymondgh <42769112+rraymondgh@users.noreply.github.com>

* reword geodataframe downcasting changes

* cln

* review, formatting, cleanup

* Apply suggestions from code review

Co-authored-by: rraymondgh <42769112+rraymondgh@users.noreply.github.com>
Co-authored-by: Martin Fleischmann <martin@martinfleischmann.net>
Co-authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
This commit is contained in:
Matt Richards
2022-06-20 16:38:54 +02:00
committed by GitHub
co-authored by rraymondgh Martin Fleischmann Joris Van den Bossche
parent b28faaf521
commit f0c36fe24f
+353 -242
View File
@@ -1,24 +1,139 @@
Changelog
=========
Version 0.11 (June 20, 2022)
----------------------------
Highlights of this release:
- GeoParquet support updated to implement
[v0.4.0](https://github.com/opengeospatial/geoparquet/releases/tag/v0.4.0) of the
OpenGeospatial/GeoParquet specification (#2441). Backwards compatibility with v0.1.0 of
the metadata spec (implemented in the previous releases of GeoPandas) is guaranteed,
and reading and writing Parquet and Feather files will no longer produce a ``UserWarning``
(#2327).
New features and improvements:
- Improved handling of GeoDataFrame when the active geometry column is
lost from the GeoDataFrame. Previously, square bracket indexing ``gdf[[...]]`` returned
a GeoDataFrame when the active geometry column was retained and a DataFrame was
returned otherwise. Other pandas indexing methods (``loc``, ``iloc``, etc) did not follow
the same rules. The new behaviour for all indexing/reshaping operations is now as
follows (#2329, #2060):
- If operations produce a ``DataFrame`` containing the active geometry column, a
GeoDataFrame is returned
- If operations produce a ``DataFrame`` containing ``GeometryDtype`` columns, but not the
active geometry column, a ``GeoDataFrame`` is returned, where the active geometry
column is set to ``None`` (set the new geometry column with ``set_geometry()``)
- If operations produce a ``DataFrame`` containing no ``GeometryDtype`` columns, a
``DataFrame`` is returned (this can be upcast again by calling ``set_geometry()`` or the
``GeoDataFrame`` constructor)
- If operations produce a ``Series`` of ``GeometryDtype``, a ``GeoSeries`` is returned,
otherwise ``Series`` is returned.
- Error messages for having an invalid geometry column
have been improved, indicating the name of the last valid active geometry column set
and whether other geometry columns can be promoted to the active geometry column
(#2329).
- Datetime fields are now read and written correctly for GIS formats which support them
(e.g. GPKG, GeoJSON) with fiona 1.8.14 or higher. Previously, datetimes were read as
strings (#2202).
- ``folium.Map`` keyword arguments can now be specified as the ``map_kwds`` argument to
``GeoDataFrame.explore()`` method (#2315).
- Add a new parameter ``style_function`` to ``GeoDataFrame.explore()`` to enable plot styling
based on GeoJSON properties (#2377).
- It is now possible to write an empty ``GeoDataFrame`` to a file for supported formats
(#2240). Attempting to do so will now emit a ``UserWarning`` instead of a ``ValueError``.
- Fast rectangle clipping has been exposed as ``GeoSeries/GeoDataFrame.clip_by_rect()``
(#1928).
- The ``mask`` parameter of ``GeoSeries/GeoDataFrame.clip()`` now accepts a rectangular mask
as a list-like to perform fast rectangle clipping using the new
``GeoSeries/GeoDataFrame.clip_by_rect()`` (#2414).
- Bundled demo dataset ``naturalearth_lowres`` has been updated to version 5.0.1 of the
source, with field ``ISO_A3`` manually corrected for some cases (#2418).
Deprecations and compatibility notes:
- The active development branch of geopandas on GitHub has been renamed from master to
main (#2277).
- Deprecated methods ``GeometryArray.equals_exact()`` and ``GeometryArray.almost_equals()``
have been removed. They should
be replaced with ``GeometryArray.geom_equals_exact()`` and
``GeometryArray.geom_almost_equals()`` respectively (#2267).
- Deprecated CRS functions ``explicit_crs_from_epsg()``, ``epsg_from_crs()`` and
``get_epsg_file_contents()`` were removed (#2340).
- Warning about the behaviour change to ``GeoSeries.isna()`` with empty
geometries present has been removed (#2349).
- Specifying a CRS in the ``GeoDataFrame/GeoSeries`` constructor which contradicted the
underlying ``GeometryArray`` now raises a ``ValueError`` (#2100).
- Specifying a CRS in the ``GeoDataFrame`` constructor when no geometry column is provided
and calling ``GeoDataFrame. set_crs`` on a ``GeoDataFrame`` without an active geometry
column now raise a ``ValueError`` (#2100)
- Passing non-geometry data to the``GeoSeries`` constructor is now fully deprecated and
will raise a ``TypeError`` (#2314). Previously, a ``pandas.Series`` was returned for
non-geometry data.
- Deprecated ``GeoSeries/GeoDataFrame`` set operations ``__xor__()``,
``__or__()``, ``__and__()`` and ``__sub__()``, ``geopandas.io.file.read_file``/``to_file`` and
``geopandas.io.sql.read_postgis`` now emit ``FutureWarning`` instead of
``DeprecationWarning`` and will be completely removed in a future release.
- Accessing the ``crs`` of a ``GeoDataFrame`` without active geometry column is deprecated and will be removed in GeoPandas 0.12 (#2373).
Bug fixes:
- ``GeoSeries.to_frame`` now creates a ``GeoDataFrame`` with the geometry column name set
correctly (#2296)
- Fix pickle files created with pygeos installed can not being readable when pygeos is
not installed (#2237).
- Fixed ``UnboundLocalError`` in ``GeoDataFrame.plot()`` using ``legend=True`` and
``missing_kwds`` (#2281).
- Fix ``explode()`` incorrectly relating index to columns, including where the input index
is not unique (#2292)
- Fix ``GeoSeries.[xyz]`` raising an ``IndexError`` when the underlying GeoSeries contains
empty points (#2335). Rows corresponding to empty points now contain ``np.nan``.
- Fix ``GeoDataFrame.iloc`` raising a ``TypeError`` when indexing a ``GeoDataFrame`` with only
a single column of ``GeometryDtype`` (#1970).
- Fix ``GeoDataFrame.iterfeatures()`` not returning features with the same field order as
``GeoDataFrame.columns`` (#2396).
- Fix ``GeoDataFrame.from_features()`` to support reading GeoJSON with null properties
(#2243).
- Fix ``GeoDataFrame.to_parquet()`` not intercepting ``engine`` keyword argument, breaking
consistency with pandas (#2227)
- Fix ``GeoDataFrame.explore()`` producing an error when ``column`` is of boolean dtype
(#2403).
- Fix an issue where ``GeoDataFrame.to_postgis()`` output the wrong SRID for ESRI
authority CRS (#2414).
- Fix ``GeoDataFrame.from_dict/from_features`` classmethods using ``GeoDataFrame`` rather
than ``cls`` as the constructor.
- Fix ``GeoDataFrame.plot()`` producing incorrect colors with mixed geometry types when
``colors`` keyword is provided. (#2420)
Notes on (optional) dependencies:
- GeoPandas 0.11 drops support for Python 3.7 and pandas 0.25 (the minimum supported
pandas version is now 1.0.5). Further, the minimum required versions for the listed
dependencies have now changed to shapely 1.7, fiona 1.8.13.post1, pyproj 2.6.1.post1,
matplotlib 3.2, mapclassify 2.4.0 (#2358, #2391)
Version 0.10.2 (October 16, 2021)
---------------------------------
Small bug-fix release:
- Fix regression in `overlay()` in case no geometries are intersecting (but
- Fix regression in ``overlay()`` in case no geometries are intersecting (but
have overlapping total bounds) (#2172).
- Fix regression in `overlay()` with `keep_geom_type=True` in case the
- Fix regression in ``overlay()`` with ``keep_geom_type=True`` in case the
overlay of two geometries in a GeometryCollection with other geometry types
(#2177).
- Fix `overlay()` to honor the `keep_geom_type` keyword for the
`op="differnce"` case (#2164).
- Fix regression in `plot()` with a mapclassify `scheme` in case the
- Fix ``overlay()`` to honor the ``keep_geom_type`` keyword for the
``op="differnce"`` case (#2164).
- Fix regression in ``plot()`` with a mapclassify ``scheme`` in case the
formatted legend labels have duplicates (#2166).
- Fix a bug in the `explore()` method ignoring the `vmin` and `vmax` keywords
- Fix a bug in the ``explore()`` method ignoring the ``vmin`` and ``vmax`` keywords
in case they are set to 0 (#2175).
- Fix `unary_union` to correctly handle a GeoSeries with missing values (#2181).
- Avoid internal deprecation warning in `clip()` (#2179).
- Fix ``unary_union`` to correctly handle a GeoSeries with missing values (#2181).
- Avoid internal deprecation warning in ``clip()`` (#2179).
Version 0.10.1 (October 8, 2021)
@@ -26,8 +141,8 @@ Version 0.10.1 (October 8, 2021)
Small bug-fix release:
- Fix regression in `overlay()` with non-overlapping geometries and a
non-default `how` (i.e. not "intersection") (#2157).
- Fix regression in ``overlay()`` with non-overlapping geometries and a
non-default ``how`` (i.e. not "intersection") (#2157).
Version 0.10.0 (October 3, 2021)
@@ -35,74 +150,74 @@ Version 0.10.0 (October 3, 2021)
Highlights of this release:
- A new `sjoin_nearest()` method to join based on proximity, with the
ability to set a maximum search radius (#1865). In addition, the `sindex`
- A new ``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).
- A new `explore()` method on GeoDataFrame and GeoSeries with native support
- A new ``explore()`` method on GeoDataFrame and GeoSeries with native support
for interactive visualization based on folium / leaflet.js (#1953)
- The `geopandas.sjoin()`/`overlay()`/`clip()` functions are now also
- The ``geopandas.sjoin()``/``overlay()``/``clip()`` functions are now also
available as methods on the GeoDataFrame (#2141, #1984, #2150).
New features and improvements:
- Add support for pandas' `value_counts()` method for geometry dtype (#2047).
- The `explode()` method has a new `ignore_index` keyword (consistent with
- Add support for pandas' ``value_counts()`` method for geometry dtype (#2047).
- The ``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
``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).
- The `to_file()` method will now attempt to detect the driver (if not
- ``points_from_xy()`` is now available as a GeoSeries method ``from_xy`` (#1936).
- The ``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).
- Support for the `storage_options` keyword in `read_parquet()` for
- Support for the ``storage_options`` keyword in ``read_parquet()`` for
specifying filesystem-specific options (e.g. for S3) based on fsspec (#2107).
- The read/write functions now support `~` (user home directory) expansion (#1876).
- Support the `convert_dtypes()` method from pandas to preserve the
- The read/write functions now support ``~`` (user home directory) expansion (#1876).
- Support the ``convert_dtypes()`` method from pandas to preserve the
GeoDataFrame class (#2115).
- Support WKB values in the hex format in `GeoSeries.from_wkb()` (#2106).
- Update the `estimate_utm_crs()` method to handle crossing the antimeridian
- Support WKB values in the hex format in ``GeoSeries.from_wkb()`` (#2106).
- Update the ``estimate_utm_crs()`` method to handle crossing the antimeridian
with pyproj 3.1+ (#2049).
- Improved heuristic to decide how many decimals to show in the repr based on
whether the CRS is projected or geographic (#1895).
- Switched the default for `geocode()` from GeoCode.Farm to the Photon
- Switched the default for ``geocode()`` from GeoCode.Farm to the Photon
geocoding API (https://photon.komoot.io) (#2007).
Deprecations and compatibility notes:
- The `op=` keyword of `sjoin()` to indicate which spatial predicate to use
for joining is being deprecated and renamed in favor of a new `predicate=`
- The ``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).
- The `cascaded_union` attribute is deprecated, use `unary_union` instead (#2074).
- The ``cascaded_union`` attribute is deprecated, use ``unary_union`` instead (#2074).
- Constructing a GeoDataFrame with a duplicated "geometry" column is now
disallowed. This can also raise an error in the `pd.concat(.., axis=1)`
disallowed. This can also raise an error in the ``pd.concat(.., axis=1)``
function if this results in duplicated active geometry columns (#2046).
- The `explode()` method currently returns a GeoSeries/GeoDataFrame with a
- The ``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.
the future and the new ``index_parts`` keyword is added to control this.
Bug fixes:
- Fix in the `clip()` function to correctly clip MultiPoints instead of
- Fix in the ``clip()`` function to correctly clip MultiPoints instead of
leaving them intact when partly outside of the clip bounds (#2148).
- Fix `GeoSeries.isna()` to correctly return a boolean Series in case of an
- Fix ``GeoSeries.isna()`` to correctly return a boolean Series in case of an
empty GeoSeries (#2073).
- Fix the GeoDataFrame constructor to preserve the geometry name when the
argument is already a GeoDataFrame object (i.e. `GeoDataFrame(gdf)`) (#2138).
argument is already a GeoDataFrame object (i.e. ``GeoDataFrame(gdf)``) (#2138).
- Fix loss of the values' CRS when setting those values as a column
(`GeoDataFrame.__setitem__`) (#1963)
- Fix in `GeoDataFrame.apply()` to preserve the active geometry column name
(``GeoDataFrame.__setitem__``) (#1963)
- Fix in ``GeoDataFrame.apply()`` to preserve the active geometry column name
(#1955).
- Fix in `sjoin()` to not ignore the suffixes in case of a right-join
(`how="right`) (#2065).
- Fix `GeoDataFrame.explode()` with a MultiIndex (#1945).
- Fix the handling of missing values in `to/from_wkb` and `to_from_wkt` (#1891).
- Fix `to_file()` and `to_json()` when DataFrame has duplicate columns to
- Fix in ``sjoin()`` to not ignore the suffixes in case of a right-join
(``how="right``) (#2065).
- Fix ``GeoDataFrame.explode()`` with a MultiIndex (#1945).
- Fix the handling of missing values in ``to/from_wkb`` and ``to_from_wkt`` (#1891).
- Fix ``to_file()`` and ``to_json()`` when DataFrame has duplicate columns to
raise an error (#1900).
- Fix bug in the colors shown with user-defined classification scheme (#2019).
- Fix handling of the `path_effects` keyword in `plot()` (#2127).
- Fix `GeoDataFrame.explode()` to preserve `attrs` (#1935)
- Fix handling of the ``path_effects`` keyword in ``plot()`` (#2127).
- Fix ``GeoDataFrame.explode()`` to preserve ``attrs`` (#1935)
Notes on (optional) dependencies:
@@ -125,110 +240,110 @@ a new logo (#1564, #1579, #1617, #1668, #1731, #1750, #1757, #1759).
New features and improvements:
- The `geopandas.read_file` function now accepts more general
file-like objects (e.g. `fsspec` open file objects). It will now also
- The ``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).
- The `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()`)
- The ``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).
- New `from_wkt()`, `from_wkb()`, `to_wkt()`, `to_wkb()` methods for
- New ``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).
- New `GeoSeries.z` attribute to access the z-coordinates of Point geometries
(similar to the existing `.x` and `.y` attributes) (#1773).
- The `to_crs()` method now handles missing values (#1618).
- Support for pandas' new `.attrs` functionality (#1658).
- The `dissolve()` method now allows dissolving by no column (`by=None`) to
- New ``GeoSeries.z`` attribute to access the z-coordinates of Point geometries
(similar to the existing ``.x`` and ``.y`` attributes) (#1773).
- The ``to_crs()`` method now handles missing values (#1618).
- Support for pandas' new ``.attrs`` functionality (#1658).
- The ``dissolve()`` method now allows dissolving by no column (``by=None``) to
create a union of all geometries (single-row GeoDataFrame) (#1568).
- New `estimate_utm_crs()` method on GeoSeries/GeoDataFrame to determine the
- New ``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
- ``GeoDataFrame.from_dict()`` now accepts ``geometry`` and ``crs`` keywords
(#1619).
- `GeoDataFrame.to_postgis()` and `geopandas.read_postgis()` now supports
- ``GeoDataFrame.to_postgis()`` and ``geopandas.read_postgis()`` now supports
both sqlalchemy engine and connection objects (#1638).
- The `GeoDataFrame.explode()` method now allows exploding based on a
- The ``GeoDataFrame.explode()`` method now allows exploding based on a
non-geometry column, using the pandas implementation (#1720).
- Performance improvement in `GeoDataFrame/GeoSeries.explode()` when using
- Performance improvement in ``GeoDataFrame/GeoSeries.explode()`` when using
the PyGEOS backend (#1693).
- The binary operation and predicate methods (eg `intersection()`,
`intersects()`) have a new `align` keyword which allows optionally not
aligning on the index before performing the operation with `align=False`
- The binary operation and predicate methods (eg ``intersection()``,
``intersects()``) have a new ``align`` keyword which allows optionally not
aligning on the index before performing the operation with ``align=False``
(#1668).
- The `GeoDataFrame.dissolve()` method now supports all relevant keywords of
`groupby()`, i.e. the `level`, `sort`, `observed` and `dropna` keywords
- The ``GeoDataFrame.dissolve()`` method now supports all relevant keywords of
``groupby()``, i.e. the ``level``, ``sort``, ``observed`` and ``dropna`` keywords
(#1845).
- The `geopandas.overlay()` function now accepts `make_valid=False` to skip
the step to ensure the input geometries are valid using `buffer(0)` (#1802).
- The `GeoDataFrame.to_json()` method gained a `drop_id` keyword to
- The ``geopandas.overlay()`` function now accepts ``make_valid=False`` to skip
the step to ensure the input geometries are valid using ``buffer(0)`` (#1802).
- The ``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).
- A new `aspect` keyword in the plotting methods to optionally allow retaining
- A new ``aspect`` keyword in the plotting methods to optionally allow retaining
the original aspect (#1512)
- A new `interval` keyword in the `legend_kwds` group of the `plot()` method
- A new ``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).
- The spatial index of a GeoSeries (accessed with the `sindex` attribute) is
- The spatial index of a GeoSeries (accessed with the ``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).
- Addition of a `has_sindex` attribute on the GeoSeries/GeoDataFrame to check
- Addition of a ``has_sindex`` attribute on the GeoSeries/GeoDataFrame to check
if a spatial index has already been initialized (#1627).
- The `geopandas.testing.assert_geoseries_equal()` and `assert_geodataframe_equal()`
testing utilities now have a `normalize` keyword (False by default) to
- The ``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:
- The `is_ring` attribute currently returns True for Polygons. In the future,
- The ``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).
- The deprecated `objects` keyword in the `intersection()` method of the
`GeoDataFrame/GeoSeries.sindex` spatial index object has been removed
- The deprecated ``objects`` keyword in the ``intersection()`` method of the
``GeoDataFrame/GeoSeries.sindex`` spatial index object has been removed
(#1444).
Bug fixes:
- Fix regression in the `plot()` method raising an error with empty
- Fix regression in the ``plot()`` method raising an error with empty
geometries (#1702, #1828).
- Fix `geopandas.overlay()` to preserve geometries of the correct type which
- Fix ``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).
- Fix the repr of an empty GeoSeries to not show spurious warnings (#1673).
- Fix the `.crs` for empty GeoDataFrames (#1560).
- Fix `geopandas.clip` to preserve the correct geometry column name (#1566).
- Fix bug in `plot()` method when using `legend_kwds` with multiple subplots
- Fix the ``.crs`` for empty GeoDataFrames (#1560).
- Fix ``geopandas.clip`` to preserve the correct geometry column name (#1566).
- Fix bug in ``plot()`` method when using ``legend_kwds`` with multiple subplots
(#1583)
- Fix spurious warning with `missing_kwds` keyword of the `plot()` method
- Fix spurious warning with ``missing_kwds`` keyword of the ``plot()`` method
when there are no areas with missing data (#1600).
- Fix the `plot()` method to correctly align values passed to the `column`
- Fix the ``plot()`` method to correctly align values passed to the ``column``
keyword as a pandas Series (#1670).
- Fix bug in plotting MultiPoints when passing values to determine the color
(#1694)
- The `rename_geometry()` method now raises a more informative error message
- The ``rename_geometry()`` method now raises a more informative error message
when a duplicate column name is used (#1602).
- Fix `explode()` method to preserve the CRS (#1655)
- Fix the `GeoSeries.apply()` method to again accept the `convert_dtype`
- Fix ``explode()`` method to preserve the CRS (#1655)
- Fix the ``GeoSeries.apply()`` method to again accept the ``convert_dtype``
keyword to be consistent with pandas (#1636).
- Fix `GeoDataFrame.apply()` to preserve the CRS when possible (#1848).
- Fix bug in containment test as `geom in geoseries` (#1753).
- The `shift()` method of a GeoSeries/GeoDataFrame now preserves the CRS
- Fix ``GeoDataFrame.apply()`` to preserve the CRS when possible (#1848).
- Fix bug in containment test as ``geom in geoseries`` (#1753).
- The ``shift()`` method of a GeoSeries/GeoDataFrame now preserves the CRS
(#1744).
- The PostGIS IO functionality now quotes table names to ensure it works with
case-sensitive names (#1825).
- Fix the `GeoSeries` constructor without passing data but only an index (#1798).
- Fix the ``GeoSeries`` constructor without passing data but only an index (#1798).
Notes on (optional) dependencies:
- GeoPandas 0.9.0 dropped support for Python 3.5. Further, the minimum
required versions are pandas 0.24, numpy 1.15 and shapely 1.6 and fiona 1.8.
- The `descartes` package is no longer required for plotting polygons. This
- The ``descartes`` package is no longer required for plotting polygons. This
functionality is now included by default in GeoPandas itself, when
matplotlib is available (#1677).
- Fiona is now only imported when used in `read_file`/`to_file`. This means
- Fiona is now only imported when used in ``read_file``/``to_file``. This means
you can now force geopandas to install without fiona installed (although it
is still a default requirement) (#1775).
- Compatibility with the upcoming Shapely 1.8 (#1659, #1662, #1819).
@@ -245,10 +360,10 @@ Version 0.8.1 (July 15, 2020)
Small bug-fix release:
- Fix a regression in the `plot()` method when visualizing with a
- Fix a regression in the ``plot()`` method when visualizing with a
JenksCaspallSampled or FisherJenksSampled scheme (#1486).
- Fix spurious warning in `GeoDataFrame.to_postgis` (#1497).
- Fix the un-pickling with `pd.read_pickle` of files written with older
- Fix spurious warning in ``GeoDataFrame.to_postgis`` (#1497).
- Fix the un-pickling with ``pd.read_pickle`` of files written with older
GeoPandas versions (#1511).
@@ -258,7 +373,7 @@ Version 0.8.0 (June 24, 2020)
**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
spatial index in e.g. ``sjoin`` (#1343, #1401, #1421, #1427, #1428). See the
[installation docs](https://geopandas.readthedocs.io/en/latest/install.html#using-the-optional-pygeos-dependency)
for more info and how to enable it.
@@ -266,16 +381,16 @@ New features and improvements:
- IO enhancements:
- New `GeoDataFrame.to_postgis()` method to write to PostGIS database (#1248).
- New ``GeoDataFrame.to_postgis()`` method to write to PostGIS database (#1248).
- New Apache Parquet and Feather file format support (#1180, #1435)
- Allow appending to files with `GeoDataFrame.to_file` (#1229).
- Add support for the `ignore_geometry` keyword in `read_file` to only read
- Allow appending to files with ``GeoDataFrame.to_file`` (#1229).
- Add support for the ``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
- ``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.
- New `chunksize` keyword in `geopandas.read_postgis` to read a query in
- New ``chunksize`` keyword in ``geopandas.read_postgis`` to read a query in
chunks (#1123).
- Improvements related to geometry columns and CRS:
@@ -283,29 +398,29 @@ New features and improvements:
- Any column of the GeoDataFrame that has a "geometry" dtype is now returned
as a GeoSeries. This means that when having multiple geometry columns, not
only the "active" geometry column is returned as a GeoSeries, but also
accessing another geometry column (`gdf["other_geom_column"]`) gives a
accessing another geometry column (``gdf["other_geom_column"]``) gives a
GeoSeries (#1336).
- Multiple geometry columns in a GeoDataFrame can now each have a different
CRS. The global `gdf.crs` attribute continues to returns the CRS of the
CRS. The global ``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).
- New `set_crs()` method on GeoDataFrame/GeoSeries to set the CRS of naive
from the column itself (eg ``gdf["other_geom_column"].crs``) (#1339).
- New ``set_crs()`` method on GeoDataFrame/GeoSeries to set the CRS of naive
geometries (#747).
- Improvements related to plotting:
- The y-axis is now scaled depending on the center of the plot when using a
geographic CRS, instead of using an equal aspect ratio (#1290).
- When passing a column of categorical dtype to the `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
- When passing a column of categorical dtype to the ``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).
- For choropleths using a classification scheme (using `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`
- For choropleths using a classification scheme (using ``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
- 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).
@@ -314,35 +429,35 @@ Deprecations:
- 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
future an error will be raised in such a case. You can use the new `set_crs`
future an error will be raised in such a case. You can use the new ``set_crs``
method to override an existing CRS. See
[the docs](https://geopandas.readthedocs.io/en/latest/projections.html#projection-for-multiple-geometry-columns).
- The helper functions in the `geopandas.plotting` module are deprecated for
- The helper functions in the ``geopandas.plotting`` module are deprecated for
public usage (#656).
- The `geopandas.io` functions are deprecated, use the top-level `read_file` and
`to_file` instead (#1407).
- The set operators (`&`, `|`, `^`, `-`) are deprecated, use the
`intersection()`, `union()`, `symmetric_difference()`, `difference()` methods
- The ``geopandas.io`` functions are deprecated, use the top-level ``read_file`` and
``to_file`` instead (#1407).
- The set operators (``&``, ``|``, ``^``, ``-``) are deprecated, use the
``intersection()``, ``union()``, ``symmetric_difference()``, ``difference()`` methods
instead (#1255).
- The `sindex` for empty dataframe will in the future return an empty spatial
index instead of `None` (#1438).
- The `objects` keyword in the `intersection` method of the spatial index
returned by the `sindex` attribute is deprecated and will be removed in the
- The ``sindex`` for empty dataframe will in the future return an empty spatial
index instead of ``None`` (#1438).
- The ``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:
- Fix the `total_bounds()` method to ignore missing and empty geometries (#1312).
- Fix `geopandas.clip` when masking with non-overlapping area resulting in an
- Fix the ``total_bounds()`` method to ignore missing and empty geometries (#1312).
- Fix ``geopandas.clip`` when masking with non-overlapping area resulting in an
empty GeoDataFrame (#1309, #1365).
- Fix error in `geopandas.sjoin` when joining on an empty geometry column (#1318).
- CRS related fixes: `pandas.concat` preserves CRS when concatenating GeoSeries
objects (#1340), preserve the CRS in `geopandas.clip` (#1362) and in
`GeoDataFrame.astype` (#1366).
- Fix bug in `GeoDataFrame.explode()` when 'level_1' is one of the column names
- Fix error in ``geopandas.sjoin`` when joining on an empty geometry column (#1318).
- CRS related fixes: ``pandas.concat`` preserves CRS when concatenating GeoSeries
objects (#1340), preserve the CRS in ``geopandas.clip`` (#1362) and in
``GeoDataFrame.astype`` (#1366).
- Fix bug in ``GeoDataFrame.explode()`` when 'level_1' is one of the column names
(#1445).
- Better error message when rtree is not installed (#1425).
- Fix bug in `GeoSeries.equals()` (#1451).
- Fix bug in ``GeoSeries.equals()`` (#1451).
- Fix plotting of multi-part geometries with additional style keywords (#1385).
And we now have a [Code of Conduct](https://github.com/geopandas/geopandas/blob/main/CODE_OF_CONDUCT.md)!
@@ -357,7 +472,7 @@ Version 0.7.0 (February 16, 2020)
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
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).
@@ -368,32 +483,32 @@ in the documentation.
Other API changes;
- The `GeoDataFrame.to_file` method will now also write the GeoDataFrame index
- The ``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).
``index=True/False`` keyword to overwrite this default inference (#1059).
New features and improvements:
- A new `geopandas.clip` function to clip a GeoDataFrame to the spatial extent
- A new ``geopandas.clip`` function to clip a GeoDataFrame to the spatial extent
of another shape (#1128).
- The `geopandas.overlay` function now works for all geometry types, including
- The ``geopandas.overlay`` function now works for all geometry types, including
points and linestrings in addition to polygons (#1110).
- The `plot()` method gained support for missing values (in the column that
- The ``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
geometries, but using the new ``missing_kwds`` argument you can specify how to
style those geometries (#1156).
- The `plot()` method now also supports plotting GeometryCollection and
- The ``plot()`` method now also supports plotting GeometryCollection and
LinearRing objects (#1225).
- Added support for filtering with a geometry or reading a subset of the rows in
`geopandas.read_file` (#1160).
``geopandas.read_file`` (#1160).
- Added support for the new nullable integer data type of pandas in
`GeoDataFrame.to_file` (#1220).
``GeoDataFrame.to_file`` (#1220).
Bug fixes:
- `GeoSeries.reset_index()` now correctly results in a GeoDataFrame instead of DataFrame (#1252).
- Fixed the `geopandas.sjoin` function to handle MultiIndex correctly (#1159).
- Fixed the `geopandas.sjoin` function to preserve the index name of the left GeoDataFrame (#1150).
- ``GeoSeries.reset_index()`` now correctly results in a GeoDataFrame instead of DataFrame (#1252).
- Fixed the ``geopandas.sjoin`` function to handle MultiIndex correctly (#1159).
- Fixed the ``geopandas.sjoin`` function to preserve the index name of the left GeoDataFrame (#1150).
Version 0.6.3 (February 6, 2020)
@@ -402,7 +517,7 @@ Version 0.6.3 (February 6, 2020)
Small bug-fix release:
- Compatibility with Shapely 1.7 and pandas 1.0 (#1244).
- Fix `GeoDataFrame.fillna` to accept non-geometry values again when there are
- Fix ``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).
@@ -425,8 +540,8 @@ Version 0.6.1 (October 12, 2019)
Small bug-fix release fixing a few regressions:
- Fix `astype` when converting to string with Multi geometries (#1145) or when converting a dataframe without geometries (#1144).
- Fix `GeoSeries.fillna` to accept `np.nan` again (#1149).
- Fix ``astype`` when converting to string with Multi geometries (#1145) or when converting a dataframe without geometries (#1144).
- Fix ``GeoSeries.fillna`` to accept ``np.nan`` again (#1149).
Version 0.6.0 (September 27, 2019)
@@ -438,35 +553,35 @@ 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 numpy `object` dtype).
- The `.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 ``.dtype`` of a GeoSeries is now a ``'geometry'`` dtype (and no longer a numpy ``object`` dtype).
- The ``.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 ``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](https://geopandas.readthedocs.io/en/v0.6.0/missing_empty.html) 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.
- ``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:
- 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).
- The `legend_kwds` keyword of the `plot()` method can now also be used to specify keywords for the color bar (#1102).
- Performance improvement in the `sjoin()` operation by re-using existing spatial index of the input dataframes, if available (#789).
- 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).
- The ``legend_kwds`` keyword of the ``plot()`` method can now also be used to specify keywords for the color bar (#1102).
- Performance improvement in the ``sjoin()`` operation by re-using existing spatial index of the input dataframes, if available (#789).
- Updated documentation to work with latest version of geoplot and contextily (#1044, #1088).
- A new ``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:
- Also try to use `pysal` instead of `mapclassify` if available (#1082).
- The `GeoDataFrame.astype()` method now correctly returns a `GeoDataFrame` if the geometry column is preserved (#1009).
- The `to_crs` method now uses `always_xy=True` to ensure correct lon/lat order handling for pyproj>=2.2.0 (#1122).
- Fixed passing list-like colors in the `plot()` method in case of "multi" geometries (#1119).
- Fixed the coloring of shapes and colorbar when passing a custom `norm` in the `plot()` method (#1091, #1089).
- Fixed `GeoDataFrame.to_file` to preserve VFS file paths (e.g. when a "s3://" path is specified) (#1124).
- Also try to use ``pysal`` instead of ``mapclassify`` if available (#1082).
- The ``GeoDataFrame.astype()`` method now correctly returns a ``GeoDataFrame`` if the geometry column is preserved (#1009).
- The ``to_crs`` method now uses ``always_xy=True`` to ensure correct lon/lat order handling for pyproj>=2.2.0 (#1122).
- Fixed passing list-like colors in the ``plot()`` method in case of "multi" geometries (#1119).
- Fixed the coloring of shapes and colorbar when passing a custom ``norm`` in the ``plot()`` method (#1091, #1089).
- Fixed ``GeoDataFrame.to_file`` to preserve VFS file paths (e.g. when a "s3://" path is specified) (#1124).
- Fixed failing case in ``geopandas.sjoin`` with empty geometries (#1138).
@@ -483,140 +598,136 @@ Version 0.5.0 (April 25, 2019)
Improvements:
* Significant performance improvement (around 10x) for `GeoDataFrame.iterfeatures`,
which also improves `GeoDataFrame.to_file` (#864).
* File IO enhancements based on Fiona 1.8:
- Significant performance improvement (around 10x) for ``GeoDataFrame.iterfeatures``,
which also improves ``GeoDataFrame.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).
- 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` 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:
- 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:
* 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 the `classification_kwds` keyword in the `plot` 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).
- 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 the ``classification_kwds`` keyword in the ``plot`` 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).
- 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 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 in `read_postgis` to the underlying pandas method (#860).
- 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 in ``read_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).
Version 0.4.1 (March 5, 2019)
-----------------------------
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 of `PySAL` as
dependency for choropleth mapping with the `scheme` keyword (#872).
* Fix for new `overlay` implementation in case the intersection is empty (#800).
- Compatibility with Fiona 1.8: fix deprecation warning (#854).
- Compatibility with PySAL 2.0: switched to ``mapclassify`` instead of ``PySAL`` as
dependency for choropleth mapping with the ``scheme`` keyword (#872).
- Fix for new ``overlay`` implementation in case the intersection is empty (#800).
Version 0.4.0 (July 15, 2018)
-----------------------------
Improvements:
* Improved `overlay` function (better performance, several incorrect behaviours fixed) (#429)
* Pass keywords to control legend behavior (`legend_kwds`) to `plot` (#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 functionality (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)
- Improved ``overlay`` function (better performance, several incorrect behaviours fixed) (#429)
- Pass keywords to control legend behavior (``legend_kwds``) to ``plot`` (#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 functionality (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)
- 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)
Version 0.3.0 (August 29, 2017)
-------------------------------
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`` and
- 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`` and
``to_json`` (#421)
* Return empty data frame rather than raising an error when performing a spatial join with non overlapping geodataframes (#335)
- 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)
- 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)
Version 0.2.0
-------------
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
- 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 the ``GeoSeries`` as a GeoJSON-like ``FeatureCollection`` (#116)
and ``iterfeatures`` method (#178)
* Addition of the ``explode`` (#146) and ``dissolve`` (#310, #311) methods.
* Addition of the ``sindex`` attribute, a Spatial Index using the optional
- Addition of the ``explode`` (#146) and ``dissolve`` (#310, #311) methods.
- Addition of the ``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).
* Addition of the ``GeoSeries.cx`` coordinate indexer to slice a GeoSeries based
- 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
- 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
- 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, the ``axes`` keyword is renamed to ``ax`` for
- In the ``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:
* Properly handle rows with missing geometries (#139, #193).
* Fix ``GeoSeries.to_json`` (#263).
* Correctly serialize metadata when pickling (#199, #206).
* Fix ``merge`` and ``concat`` to return correct GeoDataFrame (#247, #320, #322).
- Properly handle rows with missing geometries (#139, #193).
- Fix ``GeoSeries.to_json`` (#263).
- Correctly serialize metadata when pickling (#199, #206).
- Fix ``merge`` and ``concat`` to return correct GeoDataFrame (#247, #320, #322).