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