To wydaje się dość proste pytanie, ale nie mogę wymyślić, jak przekonwertować pandę DataFrame na GeoDataFrame dla połączenia przestrzennego.
Oto przykład tego, jak wyglądają moje dane przy użyciu 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
W rzeczywistości ta ramka danych została utworzona z pliku CSV, więc jeśli łatwiej jest odczytać plik CSV bezpośrednio jako GeoDataFrame, to też jest w porządku.
Odpowiedzi:
Konwersja zawartości w DataFrame (np
Lat
iLon
kolumny) do odpowiednich zgrabna geometrii, a potem używać ich razem z oryginalnym DataFrame stworzyć GeoDataFrame.Wynik:
Ponieważ geometrie często występują w formacie WKT, pomyślałem, że dołączę również przykład dla tego przypadku:
źródło
Jednowarstwowe! Plus niektóre wskaźniki wydajności dla osób korzystających z dużych zbiorów danych.
Biorąc pod uwagę,
pandas.DataFrame
że ma x Longitude i y Latitude tak:Przekształćmy
pandas.DataFrame
wgeopandas.GeoDataFrame
następujący sposób:Import biblioteki i zgrabne przyspieszenia :
Kod + czasy testu porównawczego w zestawie danych testowych, które mam:
Korzystanie
pandas.apply
jest zaskakująco wolniejsze, ale może lepiej pasować do niektórych innych przepływów pracy (np. W większych zestawach danych przy użyciu biblioteki dask):Kredyty dla:
Niektóre odniesienia do pracy w toku (od 2017 r.) Do obsługi dużych
dask
zestawów danych:źródło