* WIP: initial migration of geofeather into geopandas * WIP: initial implementation of parquet support for geometries * Refactored approach to retain same geometry column names * fix CI errors * Fix CI errors, improve test coverage * Py2.7 CI fix for decoding binary strings * Remove feather support (for now) and address PR comments * Make primary geometry column more clear * Address PR comments, allow parameter overrides * Refactor to_paquet(), read_parquet() per PR feedback * Migrate to column-level CRS metadata * Refactored parqut I/O to align with latest parquet metadata spec * Use GeometryArray in read_parquet to set crs directly * Updated parquet I/O per PR feedback * Update parquet I/O per PR feedback * Fix fstrings in compat * Undo whitespace autoformatting in .travis.yml * Add stability warning for parquet metadata spec * Revert pyarrow version for travis * Add classmethod from_parquet and fix skips for pyarrow * TEMP: add test for pandas parquet I/O for appveyor * Add test for parquet columns parameter repeated column names * try to fix appveyor * add to reference * add pyarrow to show_versins * skip parquet tests on windows * try again to skip parquet tests on windows * remove from_parquet classmethod * undo space * Updates per metadata spec PR feedback * Update parquet metadata to match spec, make io methods private * Add warning for initial parquet implementation * Add basic read / write benchmarks for parquet * Add whitespace to make CI happy * Ignore parquet warnings in tests except where testing the warnings Co-authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com> Co-authored-by: Martin Fleischmann <martin@martinfleischmann.net>
GeoPandas

Python tools for geographic data
Introduction
GeoPandas is a project to add support for geographic data to
pandas objects. It currently implements
GeoSeries and GeoDataFrame types which are subclasses of
pandas.Series and pandas.DataFrame respectively. GeoPandas
objects can act on shapely
geometry objects and perform geometric operations.
GeoPandas geometry operations are cartesian. The coordinate reference
system (crs) can be stored as an attribute on an object, and is
automatically set when loading from a file. Objects may be
transformed to new coordinate systems with the to_crs() method.
There is currently no enforcement of like coordinates for operations,
but that may change in the future.
Documentation is available at geopandas.org (current release) and Read the Docs (release and development versions).
Install
See the installation docs for all details. GeoPandas depends on the following packages:
pandasshapelyfionapyproj
Further, descartes and matplotlib are optional dependencies, required
for plotting, and rtree is an optional
dependency, required for spatial joins. rtree requires the C library libspatialindex.
Those packages depend on several low-level libraries for geospatial analysis, which can be a challenge to install. Therefore, we recommend to install GeoPandas using the conda package manager. See the installation docs for more details.
Get in touch
- Ask usage questions ("How do I?") on StackOverflow or GIS StackExchange.
- Report bugs, suggest features or view the source code on GitHub.
- For a quick question about a bug report or feature request, or Pull Request, head over to the gitter channel.
- For less well defined questions or ideas, or to announce other projects of interest to GeoPandas users, ... use the mailing list.
Examples
>>> import geopandas
>>> from shapely.geometry import Polygon
>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = geopandas.GeoSeries([p1, p2, p3])
>>> g
0 POLYGON ((0 0, 1 0, 1 1, 0 0))
1 POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))
2 POLYGON ((2 0, 3 0, 3 1, 2 1, 2 0))
dtype: geometry
Some geographic operations return normal pandas object. The area property of a GeoSeries will return a pandas.Series containing the area of each item in the GeoSeries:
>>> print(g.area)
0 0.5
1 1.0
2 1.0
dtype: float64
Other operations return GeoPandas objects:
>>> g.buffer(0.5)
0 POLYGON ((-0.3535533905932737 0.35355339059327...
1 POLYGON ((-0.5 0, -0.5 1, -0.4975923633360985 ...
2 POLYGON ((1.5 0, 1.5 1, 1.502407636663901 1.04...
dtype: geometry
GeoPandas objects also know how to plot themselves. GeoPandas uses descartes to generate a matplotlib plot. To generate a plot of our GeoSeries, use:
>>> g.plot()
GeoPandas also implements alternate constructors that can read any data format recognized by fiona. To read a zip file containing an ESRI shapefile with the boroughs boundaries of New York City (GeoPandas includes this as an example dataset):
>>> nybb_path = geopandas.datasets.get_path('nybb')
>>> boros = geopandas.read_file(nybb_path)
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort_index(inplace=True)
>>> boros
BoroName Shape_Leng Shape_Area \
BoroCode
1 Manhattan 359299.096471 6.364715e+08
2 Bronx 464392.991824 1.186925e+09
3 Brooklyn 741080.523166 1.937479e+09
4 Queens 896344.047763 3.045213e+09
5 Staten Island 330470.010332 1.623820e+09
geometry
BoroCode
1 MULTIPOLYGON (((981219.0557861328 188655.31579...
2 MULTIPOLYGON (((1012821.805786133 229228.26458...
3 MULTIPOLYGON (((1021176.479003906 151374.79699...
4 MULTIPOLYGON (((1029606.076599121 156073.81420...
5 MULTIPOLYGON (((970217.0223999023 145643.33221...
>>> boros['geometry'].convex_hull
BoroCode
1 POLYGON ((977855.4451904297 188082.3223876953,...
2 POLYGON ((1017949.977600098 225426.8845825195,...
3 POLYGON ((988872.8212280273 146772.0317993164,...
4 POLYGON ((1000721.531799316 136681.776184082, ...
5 POLYGON ((915517.6877458114 120121.8812543372,...
dtype: geometry



