পান্ডাস ডেটাফ্রেম থেকে শেফফাইল তৈরি করছেন?


12

আমি দীর্ঘ ও ল্যাটের সারি ব্যবহার করে একটি পান্ডাস ডেটা ফ্রেম থেকে একটি শেফফিল তৈরি করতে চাই।

আমি একটি সিএসভি ফাইল পেয়েছি এবং হ্যান্ডেল করা সহজতর একটি ডেটা ফ্রেম তৈরি করতে আমি পান্ডাস দিয়ে এটি প্রক্রিয়া করি

লাইন দ্বারা লুপ লাইন না করে কি এটি করা সম্ভব?


যদি এটি সিএসভি হয়, আপনি কি একটি স্তর তৈরি করতে আর্কম্যাপে এক্সওয়াই ডেটা যুক্ত করতে পারেন, তারপরে শেফফাইল হিসাবে রফতানি করুন (আরটি-ক্লিক স্তর এবং নির্বাচন করুন ডেটা, এক্সপোর্ট ডেটা)?
মেকনেডি

ধন্যবাদ। তবে আমি এটি করতে চাই একটি অজগর স্ক্রিপ্ট তৈরি করা। জিআইএস দরকার নেই
কামোমে


আহ, বুঝেছি আমি আমার মন্তব্য মুছতে পারে!
মেকনেডি

উত্তর:


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সঠিকভাবে ইনস্টল করা হয়েছে যা কখনও কখনও সহজ হয় না কারণ তারা কিছু নির্ভরতা (যেমন জিওওএস এবং জিডিএল) নিয়ে আসে। যদি প্রথমে মাধ্যমে কাজ না pip install geopandas shapelyকরে তবে গুগল বা স্ট্যাকওভারফ্লো / গিস.স্ট্যাকেক্সচেঞ্জ এ ত্রুটিটি অনুসন্ধান করুন কারণ সম্ভবত আপনার পক্ষে সেই সমস্যার সমাধান করার জন্য কোনও উত্তর উপলব্ধ থাকবে।

তারপরে, এটি আপনার ডেটাফ্রেমে একটি নতুন জ্যামিতি কলাম তৈরি করার বিষয় যা ল্যাট এবং লম্বা মানগুলিকে একটি shapely Point()বস্তুর সাথে সংযুক্ত করে। নোট করুন যে Point()কনস্ট্রাক্টর ভাসমান মানগুলির একটি দ্বিগুণ প্রত্যাশা করে, তাই ডেটাফ্রেমের কলামের টাইপগুলি ইতিমধ্যে সেট না করা থাকলে রূপান্তরটি অবশ্যই অন্তর্ভুক্ত করতে হবে 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)

এখন, পান্ডাস ডেটা ফ্রেমকে একটি তে রূপান্তর করুন GeoDataFrame। জিওপ্যান্ডাস কনস্ট্রাক্টর এমন জ্যামিতি কলামটি প্রত্যাশা করে যা সুদৃ ge় জ্যামিতি অবজেক্ট নিয়ে গঠিত হতে পারে, সুতরাং আমরা যে কলামটি তৈরি করেছি তা ঠিক আছে:

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

একটি shapefile এই GeoDataFrame ডাম্প করার জন্য ব্যবহার করুন geopandas ' to_file()পদ্ধতি (অন্যান্য ড্রাইভার দ্বারা সমর্থিত Fiona, যেমন GeoJSONএছাড়াও কাজ করা উচিত):

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

কিউজিআইএস-এর সাথে ভিজ্যুয়ালাইজ করা হলে ফলস্বরূপ শেফফাইলটি দেখতে একই রকম হয় :

শেফফিলের ফলাফল


2
হাই, আমারও একই অবস্থা, তবে পয়েন্টগুলির পরিবর্তে আমার বহুভুজ রয়েছে। অনুরূপ ডিএফ ['জ্যামিতি'] = df.apply (ল্যাম্বডা এক্স: পয়েন্ট ((ভাসা (x.lon), ভাসা (x.lat))), অক্ষ = 1) তবে বহুভুজ সহ কিছু করা সম্ভব?
ভ্যালেরিও ডি সিওটি

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"ব্রিটিশ ন্যাশনাল গ্রিড অনুযায়ী আমার শেফফিলটি প্রজেক্ট করতে ব্যবহার করে অনুরূপ কিছু করেছি। যাইহোক, আমি যখন এটি আরকজিআইএস এ খুলি, স্থানাঙ্ক ব্যবস্থাটি অজানা। আমি কি ভুল করছি?
ফ্যাকফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.