원 라이너! 빅 데이터 사용자를위한 몇 가지 성능 지침.
주어진 pandas.DataFrame
x 경도와 y 위도는 다음과 같습니다.
df.head()
x y
0 229.617902 -73.133816
1 229.611157 -73.141299
2 229.609825 -73.142795
3 229.607159 -73.145782
4 229.605825 -73.147274
를 다음과 같이 pandas.DataFrame
로 변환 해 봅시다 geopandas.GeoDataFrame
:
라이브러리 가져 오기 및 매끈한 속도 향상 :
import geopandas as gpd
import shapely
shapely.speedups.enable() # enabled by default from version 1.6.0
내가 둘러 본 테스트 데이터 세트의 코드 + 벤치 마크 시간 :
#Martin's original version:
#%timeit 1.87 s ± 7.03 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
gdf = gpd.GeoDataFrame(df.drop(['x', 'y'], axis=1),
crs={'init': 'epsg:4326'},
geometry=[shapely.geometry.Point(xy) for xy in zip(df.x, df.y)])
#Pandas apply method
#%timeit 8.59 s ± 60.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
gdf = gpd.GeoDataFrame(df.drop(['x', 'y'], axis=1),
crs={'init': 'epsg:4326'},
geometry=df.apply(lambda row: shapely.geometry.Point((row.x, row.y)), axis=1))
사용 pandas.apply
은 놀랍게도 느리지 만 다른 워크 플로에 더 적합 할 수 있습니다 (예 : dask 라이브러리를 사용하는 더 큰 데이터 세트에서).
크레딧 :
빅 dask
데이터 세트 를 처리하기위한 일부 진행중인 참조 (2017 년 기준) :