# Getting polygon areas using GeoPandas

Given a GeoPandas's `GeoDataFrame` containing a series of polygons, I would like to get the area in km sq of each feature in my list.

This is a pretty common problem, and the usual suggested solution in the past has been to use `shapely` and `pyproj` directly (e.g. Calculating area in km² for Polygon in WKT using Python and robinkraft/projected_area.py).

Is there a way to do this in pure GeoPandas?

If the crs of the GeoDataFrame is known (EPSG:4326 unit=degree, here), you don't need Shapely, nor pyproj in your script because GeoPandas uses them).

``````import geopandas as gpd
print test.crs
``````

Now copy your GeoDataFrame and change the projection to a Cartesian system (EPSG:3857, unit= m as in the answer of ResMar)

``````tost = test.copy()
tost= tost.to_crs({'init': 'epsg:3857'})
print tost.crs
``````

Now the area in square kilometers

``````tost["area"] = tost['geometry'].area/ 10**6
``````

But the surfaces in the Mercator projection are not correct, so with other projection in meters.

``````tost= tost.to_crs({'init': 'epsg:32633'})
tost["area"] = tost['geometry'].area/ 10**6
``````

Yes, simply be sure to reproject your shape in Cylindrical equal-area format with `{'proj':'cea'}` that preserve area measure.

Then you can use `.area` method of your GeoDataFrame.

Your also need to divide by 1000000 because `.area` method give area in square meters.

``````import geopandas as gpd

gdf = gdf['geometry'].to_crs({'proj':'cea'})

gdf.area / 10**6
``````

I believe yes. The following ought to work:

``````gdf['geometry'].to_crs({'init': 'epsg:3395'})\
.map(lambda p: p.area / 10**6)
``````

This converts the geometry to an equal-area projection, fetches the `shapely` area (returned in m^2), and maps that to a km^2 (this last step is optional).

Just a quick thought on the appropriate EPSG code for an equal-area estimation - 6933 may be a better "generic" solution (see https://epsg.io/6933 / https://www.mdpi.com/2220-9964/1/1/32)

No perfect solution for obvious reasons, but 6933 does seem to nicely merge the benefits of a cea and Lambert equal area.

• it actually works pretty fine, thanks for the suggestion Commented Apr 13, 2023 at 14:08