Cela semble être une question assez simple, mais je ne vois pas comment convertir un pandas DataFrame en GeoDataFrame pour une jointure spatiale.
Voici un exemple de l'utilisation de mes données df.head()
:
Date/Time Lat Lon ID
0 4/1/2014 0:11:00 40.7690 -73.9549 140
1 4/1/2014 0:17:00 40.7267 -74.0345 NaN
En fait, ce cadre de données a été créé à partir d’un fichier CSV. Par conséquent, s’il est plus facile de lire le fichier CSV directement en tant que GeoDataFrame, c’est très bien aussi.
Réponses:
Convertissez d'abord le contenu (par exemple
Lat
, lesLon
colonnes) du DataFrame en géométries Shapely appropriées , puis utilisez-les avec le DataFrame d'origine pour créer un GeoDataFrame.Résultat:
Comme les géométries sont souvent au format WKT, j'ai pensé inclure un exemple pour ce cas également:
la source
Une ligne! De plus, des indicateurs de performance pour les utilisateurs de Big Data.
Soit a
pandas.DataFrame
qui a x longitude et y latitude comme suit:Convertissons le
pandas.DataFrame
en ungeopandas.GeoDataFrame
comme suit:Importations de bibliothèques et améliorations rapides :
Code + temps de référence sur un jeu de données de test que j'ai traîné:
L'utilisation
pandas.apply
est étonnamment lente, mais peut être mieux adaptée à d'autres flux de travail (par exemple, sur des jeux de données plus volumineux utilisant la bibliothèque de masques):Crédits à:
Quelques références de Work-In-Progress (à partir de 2017) pour la gestion de grands
dask
ensembles de données:la source