1 votos

Intentando convertir GeoPandas Dataframe con fecha a ESRI Shapefile

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 enter image description here . 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'>

0voto

Anton8000 Puntos 165

Convierte las fechas en cadenas/objetos.

Tengo un campo datetime llamado date :

import geopandas as gpd

df = gpd.read_file('/home/bera/GIS/Data/lämningar_sverige.gpkg', layer='lämningar_sverige_point')
df['date'] = df['date'].dt.strftime('%Y-%m-%d') #Convert the datetimes to strings
df.to_file('/home/bera/Desktop/GIStest/datetimes.shp')

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X