docs: def geo(self):
          """Return a geopandas dataframe"""
          import geopandas as gpd
          from shapely.geometry.polygon import BaseGeometry
          from shapely.wkt import loads
  
          gdf = gpd.GeoDataFrame(self)
  
          first = next(gdf.iterrows())[1].geometry
  
          if isinstance(first, str):
              # We have a GeoDataframe, but the geometry column is still strings, so
              # it must be converted
              shapes = [ loads(row['geometry']) for i, row in gdf.iterrows()]
  
          elif not isinstance(first, BaseGeometry):
              # If we are reading a metatab package, the geometry column's type should be
              # 'geometry' which will give the geometry values class type of
              # rowpipe.valuetype.geo.ShapeValue. However, there are other
              # types of objects that have a 'shape' property.
  
              shapes = [row['geometry'].shape for i, row in gdf.iterrows()]
  
          else:
              shapes = gdf['geometry']
  
          gdf['geometry'] = gpd.GeoSeries(shapes)
          gdf.set_geometry('geometry')
          return gdf