Se os CRs do GeoDataFrame são conhecidos (EPSG: 4326 unit = degree, aqui), você não precisa do Shapely, nem do pyproj em seu script, porque o GeoPandas os usa).
import geopandas as gpd
test = gpd.read_file("test_wgs84.shp")
print test.crs
test.head(2)
Agora copie seu GeoDataFrame e altere a projeção para um sistema cartesiano (EPSG: 3857, unit = m, como na resposta de ResMar)
tost = test.copy()
tost= tost.to_crs({'init': 'epsg:3857'})
print tost.crs
tost.head(2)
Agora a área em quilômetros quadrados
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)
Mas as superfícies na projeção Mercator não estão corretas, assim como outras projeções em metros.
tost= tost.to_crs({'init': 'epsg:32633'})
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)
epsg:3857
, mas seu código éepsg:3395
, qual dos dois está correto?