एक-लाइनर्स! प्लस बड़े डेटा वाले लोगों के लिए कुछ प्रदर्शन संकेत।
यह देखते हुए 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
डेटासेट को संभालने के लिए कुछ कार्य-प्रगति के संदर्भ (2017 के अनुसार) :