You should ideally pass columns to geopandas.GeoDataFrame to create an empty one and include “geometry” among them so that GeoPandas understands where the geometry will be. Ideally, you should also specify a CRS.
df = gpd.GeoDataFrame(columns=["foo", "bar", "geometry"], crs="EPSG:4326”)
You can also use a different name for a geometry column but in that case you need to specify which of them will be an active geometry column.
df = gpd.GeoDataFrame(columns=["foo", "bar", "geom"], crs="EPSG:4326", geometry="geom")
M.