Creación de un marco de datos GeoPandas a partir de una hoja Excel. El esquema para el marco de datos es:
{'geometry': 'Point',
'properties': OrderedDict([
...
('DISTID', 'int'),
('PROVID', 'int'),
('date', 'datetime')])}
Edición: Pensé que debía aclarar - el campo de fecha se guarda como tipo datetime, pero sólo tiene fecha.
Pero cuando corro gdf.to_file('sample.shp', driver = "ESRI Shapefile")
Me aparece el error DriverSupportError: ESRI Shapefile does not support datetime fields
.
He intentado convertir el campo datetime a date utilizando gdf['date'] = pd.to_datetime(gdf['date']).dt.date
pero entonces eso lanza un ValueError: Invalid field type <class 'datetime.date'>
. Me gustaría mantener las fechas en el Shapefile. Estoy usando GeoPandas versión 0.11.0 y Fionas 1.8.21.
Edición 2: Debería haber sido más específico con lo que intenté. He intentado cambiar el tipo de campo utilizando las soluciones aquí ¿Cambiar el tipo de campo del shapefile con fiona? en vano. Si intento cambiar el esquema, obtengo ValueError: Record does not match collection schema:
.
A continuación, intenté utilizar el gdf['date'] = pd.to_datetime(gdf['date']).date()
pero la fucnión ni siquiera se ejecutó, dándome AttributeError: 'Series' object has no attribute 'date'
. Entonces hice gdf['date'] = pd.to_datetime(gdf['date']).dt.date
y aunque la función funcionó, obtuve ValueError: Invalid field type <class 'datetime.date'>
al intentar exportar como shapefile.
Edita 3:
todo el archivo excel, cuando se exporta como pandas dateframe, tiene un solo campo 'date' con tipo datetime64[ns]
. Las fechas son todas de la forma . No tienen ningún vínculo temporal.
Hago lo siguiente:
pdf = pd.read_excel("data.xlsx", index_col=0)
gdf = gpd.GeoDataFrame(pdf, geometry=gpd.points_from_xy(pdf.Longitude, pdf.Latitude))
Primero, lo intenté:
gdf['date'] = pd.to_datetime(gdf['date']).dt.date
Intentado exportar a shapefile utilizando gdf.to_file('sample.shp', driver = "ESRI Shapefile")
, me dio ValueError: Invalid field type <class 'datetime.date'>
Intenté simplemente convertirlo en una cadena y luego exportarlo, como se sugiere en la respuesta.
gdf['date'] = gdf['date'].dt.strftime('%Y-%m-%d')
pero tampoco funcionó. Cuando hice gdf.info()
mostraría que el tipo ya no era datetime
pero object
en su lugar. Y sin embargo, lanza ValueError: Invalid field type <class 'datetime.time'>