Repository: geopandas/geopandas

Issue:
BUG: CRS property is not pyproj.CRS object in empty GeoDataFrame
```python
import geopandas
import pyproj

df = geopandas.geodataframe.GeoDataFrame(crs='epsg:32638')
# this does not work in versions above 0.8.0
assert type(df.crs) is pyproj.crs.crs.CRS 

df.crs = 'epsg:32638'
# this works in both versions  0.8.0 and 0.7.0
assert type(df.crs) is pyproj.crs.crs.CRS 
```
Expected behavior: everything ok
Actual behavior: AssertionError

This is relevant for version above 0.8.0, for previous version 0.7.0 this code did not raise exception. In according with description for `crs` property return value should be  ``pyproj.CRS``object. As I understand was lost string `self.crs = crs` that invoked corresponded setter for parsing input string.

Discussion:
jorisvandenbossche: Test on appveyor was failing (restarted it now), seems an issue with mapclassify -> https://github.com/geopandas/geopandas/issues/1561

Patch:
diff --git a/geopandas/geodataframe.py b/geopandas/geodataframe.py
index de1ca272..8b2e089a 100644
--- a/geopandas/geodataframe.py
+++ b/geopandas/geodataframe.py
@@ -90,7 +90,7 @@ class GeoDataFrame(GeoPandasBase, DataFrame):
 
         # need to set this before calling self['geometry'], because
         # getitem accesses crs
-        self._crs = crs if crs is not None else None
+        self._crs = CRS.from_user_input(crs) if crs else None
 
         # set_geometry ensures the geometry data have the proper dtype,
         # but is not called if `geometry=None` ('geometry' column present


Test patch:
diff --git a/geopandas/tests/test_crs.py b/geopandas/tests/test_crs.py
index 222b3ba2..2936d00b 100644
--- a/geopandas/tests/test_crs.py
+++ b/geopandas/tests/test_crs.py
@@ -529,12 +529,18 @@ class TestGeometryArrayCRS:
     # CRS should be assigned to geometry
     def test_deprecation(self):
         with pytest.warns(FutureWarning):
-            GeoDataFrame([], crs=27700)
+            df = GeoDataFrame([], crs=27700)
+
+        # https://github.com/geopandas/geopandas/issues/1548
+        # ensure we still have converted the crs value to a CRS object
+        assert isinstance(df.crs, pyproj.CRS)
 
         with pytest.warns(FutureWarning):
             df = GeoDataFrame([])
             df.crs = 27700
 
+        assert isinstance(df.crs, pyproj.CRS)
+
     # make sure that geometry column from list has CRS (__setitem__)
     def test_setitem_geometry(self):
         arr = from_shapely(self.geoms, crs=27700)