पंडों से डेटाफ्रेम बनाना डेटाफ़्रेम?


12

मैं अकेला पंडित डेटा फ्रेम से एक आकार निर्माण करना पसंद करता हूं, जिसमें लोन और लेट रो का उपयोग किया जाता है।

मुझे एक सीएसवी फ़ाइल मिली है और मैं इसे एक डेटा फ्रेम बनाने के लिए पांडा के साथ संसाधित करता हूं जिसे संभालना आसान है

क्या यह ऐसा करने के लिए पॉसिबल है जो लाइन के बिना लूप लाइन बनाता है?


यदि यह csv है, तो क्या आप एक परत बनाने के लिए ArcMap में Add XY डेटा का उपयोग कर सकते हैं, तो एक आकार-प्रकार (rt-click लेयर और डेटा, निर्यात डेटा का चयन करें) के रूप में निर्यात करें?
mkennedy

धन्यवाद.लेकिन मैं ऐसा करना चाहता हूँ कि एक अजगर स्क्रिप्ट बना। कोई जरूरत नहीं जीआईएस
kamome


आह, समझ गया। शायद मैं अपनी टिप्पणी हटा दूंगा!
mkennedy

जवाबों:


17

थोड़ी देर लेकिन शायद दूसरों के लिए भी उपयोगी है। हाँ, कि के साथ किया जा सकता है shapelyऔर geopandas

माना जाता है कि आपका पांडा डेटाफ़्रेम तरह का दिखता है:

import pandas as pd
data = [
        {'some_attribute': 'abc', 'lat': '50.1234', 'lon': '10.4023'},
        {'some_attribute': 'def', 'lat': '40.5678', 'lon': '8.3365'},
        {'some_attribute': 'ghi', 'lat': '60.9012', 'lon': '6.2541'},
        {'some_attribute': 'jkl', 'lat': '45.3456', 'lon': '12.5478'},
        {'some_attribute': 'mno', 'lat': '35.7890', 'lon': '14.3957'},
        ]

df = pd.DataFrame(data)
print(df)

=>

       lat      lon some_attribute
0  50.1234  10.4023            abc
1  40.5678   8.3365            def
2  60.9012   6.2541            ghi
3  45.3456  12.5478            jkl
4  35.7890  14.3957            mno

पहले, सुनिश्चित करें कि geopandasऔर shapelyठीक से स्थापित हैं जो कभी-कभी आसान नहीं होता है क्योंकि वे कुछ निर्भरता (जैसे GEOS और GDAL) के साथ आते हैं। यदि पहली बार के माध्यम से काम नहीं करता है pip install geopandas shapely, तो Google या StackOverflow / Gis.Stackexchange पर त्रुटि की खोज करें क्योंकि संभवतः संभवतः आपके लिए उस समस्या को हल करने वाला उत्तर उपलब्ध होगा।

फिर, यह आपके डेटाफ़्रेम में एक नया ज्यामिति स्तंभ बनाने की बात है जो एक shapely Point()वस्तु में अव्यक्त और एकाकी मूल्यों को जोड़ता है । ध्यान दें कि Point()कंस्ट्रक्टर को फ्लोट मानों के एक टपल की उम्मीद है, इसलिए यदि डेटाफ़्रेम के कॉलम dtypes पहले से सेट नहीं हैं, तो रूपांतरण को शामिल किया जाना चाहिए float

from shapely.geometry import Point

# combine lat and lon column to a shapely Point() object
df['geometry'] = df.apply(lambda x: Point((float(x.lon), float(x.lat))), axis=1)

अब, पांडा DataFrame को a में बदलें GeoDataFrame। जियोपैन्डस कंस्ट्रक्टर को एक ज्यामिति स्तंभ की उम्मीद होती है, जिसमें आकारहीन ज्यामिति ऑब्जेक्ट शामिल हो सकते हैं, इसलिए हमने जो कॉलम बनाया है वह केवल निम्न है:

import geopandas
df = geopandas.GeoDataFrame(df, geometry='geometry')

इस GeoDataFrame को एक आकृति के रूप में डंप करने के लिए, जियोपैन्डस to_file()विधि ( फियोना द्वारा समर्थित अन्य ड्राइवर जैसे कि GeoJSONकाम भी करना चाहिए) का उपयोग करें:

df.to_file('MyGeometries.shp', driver='ESRI Shapefile')

और वह वही है जिसके परिणामस्वरूप आकृति का आकार QGIS के साथ कल्पना करने पर दिखता है :

परिणामी आकृति


2
नमस्ते, मेरे पास एक समान स्थिति है, लेकिन अंकों के बजाय, मेरे पास बहुभुज हैं। कुछ इसी तरह के df ['ज्यामिति'] करना संभव है।
वेलेरियो डी। सियोटी

4

आर्केप के लिए आपको शेपफाइल को निर्यात करने से पहले प्रोजेक्शन को परिभाषित करना होगा।

import geopandas
df = geopandas.GeoDataFrame(df, geometry='geometry')

# proj WGS84

df.crs= "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

df.to_file('MyGeometries.shp', driver='ESRI Shapefile')

मैंने कुछ ऐसा ही किया, df.crs= "+init=epsg:27700"ब्रिटिश नेशनल ग्रिड के अनुसार अपने शेपफाइल को प्रोजेक्ट करने के लिए। हालाँकि, जब मैं इसे आर्कजीआईएस में खोलता हूं, तो समन्वय प्रणाली अज्ञात है। मैं क्या गलत कर रहा हूं?
फाकॉफी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.