web-dev-qa-db-fra.com

Conversion d'un cadre de géodonnées géopandas en un cadre de données pandas

Quelle est la façon la plus efficace de convertir une géodonnées de géopandas en une base de données pandas? Ci-dessous la méthode que j'utilise, existe-t-il une autre méthode plus efficace ou meilleure en général pour ne pas générer d'erreurs?

import geopandas as gpd
import pandas as pd

# assuming I have a shapefile named shp1.shp
gdf1 = gpd.read_file('shp1.shp')

# then for the conversion, I drop the last column (geometry) and specify the column names for the new df
df1 = pd.DataFrame(gdf1.iloc[:,:-1].values, columns = list(gdf1.columns.values)[:-1] )
10
jberrio

Vous n'avez pas besoin de convertir le GeoDataFrame en un tableau de valeurs, vous pouvez le passer directement au constructeur DataFrame:

df1 = pd.DataFrame(gdf)

Ce qui précède conservera la colonne "géométrie", ce qui n'est pas un problème pour l'avoir comme DataFrame normal. Mais si vous voulez réellement supprimer cette colonne, vous pouvez le faire (en supposant que la colonne est appelée "géométrie"):

df1 = pd.DataFrame(gdf.drop(columns='geometry'))
# for older versions of pandas (< 0.21), the drop part: gdf.drop('geometry', axis=1)

Deux notes:

  • Il n'est souvent pas nécessaire de convertir un GeoDataFrame en un DataFrame normal, car la plupart des méthodes que vous connaissez à partir d'un DataFrame fonctionneront également. Bien sûr, il y a quelques cas où cela est effectivement nécessaire (par exemple pour tracer les données sans les géométries), puis la méthode ci-dessus est la meilleure façon.
  • La première façon (df1 = pd.DataFrame(gdf)) ne prendra pas une copie des données dans GeoDataFrame. Ce sera souvent bon du point de vue de l'efficacité, mais selon ce que vous voulez faire avec le DataFrame, vous voudrez peut-être une copie réelle: df1 = pd.DataFrame(gdf, copy=True)
14
joris