Si se conocen los crs del GeoDataFrame (EPSG: 4326 unit = degree, aquí), no necesita Shapely, ni pyproj en su script porque GeoPandas los usa).
import geopandas as gpd
test = gpd.read_file("test_wgs84.shp")
print test.crs
test.head(2)
Ahora copie su GeoDataFrame y cambie la proyección a un sistema cartesiano (EPSG: 3857, unit = m como en la respuesta de ResMar)
tost = test.copy()
tost= tost.to_crs({'init': 'epsg:3857'})
print tost.crs
tost.head(2)
Ahora el área en kilómetros cuadrados
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)
Pero las superficies en la proyección de Mercator no son correctas, así que con otras proyecciones en metros.
tost= tost.to_crs({'init': 'epsg:32633'})
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)
epsg:3857
, pero su código esepsg:3395
, ¿cuál de los dos es correcto?