পাইথন ব্যবহার করে কোনও ক্ষেত্র থেকে অনন্য মূল্যবোধের একটি তালিকা বের করার চেষ্টা করা হচ্ছে


11

আমার এফজিডিবি-র মধ্যে বেশ কয়েকটি টেবিলের অনেকগুলি কলাম রয়েছে যেখানে প্রতিটি কলামের জন্য আমার অনন্য মানগুলি বের করতে হবে।

উদাহরণস্বরূপ: মানগুলি [1,2,2,2,3,4] হতে পারে এবং আমি [1,2,3,4] ফেরত দেওয়ার চেষ্টা করছি

আমি আরসিজিআইএসে এই কাজটি বেশ কয়েকটি অন্যান্য উপায়ে করতে পারি তবে আমি নিজেকে বাড়ানোর চেষ্টা করছি।

ওয়েবে আমি পাইথনের একটি টুকরো পেয়েছি যা আমার মনে হয় কাজটি করবে তবে আমি এটি চালানোর জন্য লড়াই করে যাচ্ছি (আমি একটি অবৈধ সিনট্যাক্স ত্রুটি পেতে থাকি কারণ আমি লাইনে 3 তে সিনট্যাক্স ত্রুটি পেতে থাকি) এতে সন্দেহ নেই একটি সত্যই সাধারণ ব্যবহারকারীর ত্রুটি।

নীচে কোড স্নিপেট

import arcpy

def unique_values(r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj'):
with arcpy.da.SearchCursor(table, [field]) as cursor:
    return sorted({row[0] for row in cursor})

এটি হ'ল ত্রুটি বার্তাটি আমি পঠিত পাঠ্য থেকে পেয়েছি:

 File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 3
def unique_values(r'N:\GISProjects\Steve_Eastwood_Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj'):
                                                                                                                             ^
SyntaxError: invalid syntax
[Finished in 0.1s with exit code 1]

আসল প্রশ্ন থেকে আপডেট

আমি এখন নীচে প্রদত্ত জবাব দিয়ে আমার কোড আপডেট করেছি তবে গৌণ ত্রুটিটি পাচ্ছি।

নতুন কোড স্নিপেট:

import arcpy

def unique_values(table , field):
    with arcpy.da.SearchCursor(table, [field]) as cursor:
        return sorted({row[0] for row in cursor})

myValues = unique_values(r'N:\\GISProjects\\Landuse\\Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge' , 'LU_ALUMMaj')

print (myValues)

আমি রানটাইম ত্রুটি সম্পর্কিত একটি নতুন ত্রুটি বার্তা পাচ্ছি

Traceback (most recent call last):
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 7, in <module>
myValues = unique_values(r'N:\\GISProjects\\Steve_Eastwood_Landuse \Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge' , 'LU_ALUMMaj')
 File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 4, in unique_values
with arcpy.da.SearchCursor(table, [field]) as cursor:
RuntimeError: cannot open 'N:\\GISProjects\\Steve_Eastwood_Landuse\\Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge'

[প্রস্থান কোড 1 সহ 8.0 এ শেষ]

আমি যে পড়াটি করেছি তা থেকে ধরে নেওয়া যায় যে এটি এনভ. ওয়ার্কস্পেস স্থাপনের সাথে সম্পর্কিত?

এটি প্রমাণ রয়েছে যে এটি বিদ্যমান


1
আপনার সম্পূর্ণ ত্রুটি বার্তা (পাঠ্য হিসাবে) অন্তর্ভুক্ত করতে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন
মিডাভালো

env.workspaceআমার মনে হয় না যে আপনার নতুন ত্রুটির কোনও করণীয় হওয়া উচিত নয় । হয় rপথের আগে যাত্রা শুরু করার চেষ্টা করুন , বা পথটিতে \` to ` পরিবর্তন করুন (এবং rসেখানে ছেড়ে দিন )। জিওডাটাবেস কি বিদ্যমান?
Midavalo

আপনি কি কোনও ক্ষেত্রে সমস্ত অনন্য মানকে আলাদা করার চেষ্টা করছেন? উদাহরণস্বরূপ, বলুন যে আপনার নিম্নলিখিত মান রয়েছে [1,2,2,2,3,4], আপনি কি ফিরে আসার চেষ্টা করছেন [1,2,3,4]? এই তথ্য অন্তর্ভুক্ত করার জন্য পোস্ট আপডেট করুন।
হারুন

@Midavalo আপনি ভালো পথ tolook পরিবর্তন বোঝানো করেনি r'N: GISProjects _Landuse Plant_Biosecurity_Project ArcGIS_Online.gdb Holdings_Property_Merge ',' LU_ALUMMaj '
Leith হকিন্স

1
ধন্যবাদ - আরও প্রমাণ যে আমি খুব স্মার্ট নয় তবে আমি ভারী জিনিস তুলতে পারি। আমি তোমার কাছে একটি স্প্রিজি owণী !!
লেথ হকিন্স

উত্তর:


14

আপনি প্রায় কাছাকাছি বুঝেছি, আপনি শুধু আপনার প্যারামিটার নাম নির্দিষ্ট করতে হবে থাকেন tableএবং fieldআপনার ফাংশন সংজ্ঞা, এবং তারপর ঐ মান পাস যখন আপনি ফাংশন কল। পাইথনের পক্ষে এটি জরুরী হওয়ায় আপনার ইন্ডেন্টেশনটিও দেখুন।

def unique_values(table , field):
    with arcpy.da.SearchCursor(table, [field]) as cursor:
        return sorted({row[0] for row in cursor})

myValues = unique_values(r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj')

print (myValues)

মূলত এটি বলছে যে আপনি যখন ফাংশনটি কল করবেন তখন আপনি unique_values()দুটি পরামিতিগুলিতে মানগুলি পাঠাবেন, একটি বলা হয় table, অন্যটি ডাকে field। এগুলি আপনার ফাংশনে ব্যবহৃত হয়। আপনি যখন লাইনে ফাংশনটি কল করবেন

myValues = unique_values(r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj')  

আপনি এই পরামিতিগুলিতে মানগুলি পাস করছেন।

এটি আপনার প্যারামিটারগুলি পৃথকভাবে ঘোষণা করা এবং সেগুলি সরাসরি কার্সারে পৌঁছে দেওয়ার মতো:

table = r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge'
field = 'LU_ALUMMaj'

with arcpy.da.SearchCursor(table, [field]) as cursor:
    myValues = sorted({row[0] for row in cursor})

print myValues

আহ যে বোঝায়, আপনি নীচের পৃথক পরামিতি অন্তর্ভুক্ত যখন আমি থ্যাঙ্কিও আপনি কি বলছেন! । আমি জানি যে আমি ত্রুটিগুলির শৃঙ্খলাটি চালিয়ে যাচ্ছি কারণ আমি একটি রান টাইম ত্রুটি পাচ্ছি যা আমাকে বিদ্যমান ডাটাবেস খোলার অনুমতি দিচ্ছে না। আমি আমার প্রশ্ন আপডেট।
লেথ হকিন্স

বাছাই করা () লাইন কেন আপনি প্রতিটি '[' a ',' b ',' a ',' b '] এর মতো সরল তালিকায় চালিত হলে ডাবলিকেটগুলি ফেরত দেয় যখন প্রতিটি মানটির একটি মাত্র অনন্য উদাহরণ ফিরে আসে? আমি এই উত্তরটি কিছু সময়ের জন্য ব্যবহার করছি এবং বুঝতে পেরেছি কেন এটি কাজ করে তা বুঝতে পারি না।
ডিলান ওয়ারবার্গ

2
@ ডিলানবার্গবার্গ যেহেতু আপনি মানগুলির একটি তালিকা পাস করছেন না , আপনি একটি সেট পাস করছেন । আপনি যদি উপরে একটি তালিকায় আপনার তালিকা আইটেমগুলি যুক্ত করেন, যেমন set(['a', 'b', 'a', 'b']), এটি অনন্য মানগুলি ফিরিয়ে দেবে {'a', 'b'}। ব্যবহার sorted()একটি সহজ সেট হিসাবে সাজানো ক্রম ঠিক আয় তাদের পাঁচমিশালী হয়।
মিডাভালো

আপনি যে ক্ষেত্রটি থেকে অনন্য মানগুলির সন্ধান করছেন তা যদি স্ট্রিং না হয় তবে আপনার যুক্ত করা উচিত: কার্সারে সারি করার জন্য সাজানো ({str (সারি [0])
এমকেলি

8

আমি পাইথনের অন্তর্নির্মিত set()ফাংশনটি জেনারেটর এক্সপ্রেশনSearchCursor হিসাবে অনন্য মানগুলি খুঁজে পেতে ব্যবহার করার পরামর্শ দেব । বড় বা ছোট ডেটাসেটের সাহায্যে আপনি এই পদ্ধতির অত্যন্ত দক্ষ খুঁজে পাবেন:

import arcpy

fc = r'C:\path\to\your.gdb\featureclass'

unique_values = set(row[0] for row in arcpy.da.SearchCursor(fc, "some_field"))

1
এটিই মূলত @ মিডাভালোর উত্তর যা করছেন পাশাপাশি set } ব্রেসগুলি একটি সেট অবজেক্টকে সংজ্ঞায়িত করতে ব্যবহৃত হচ্ছে ।
user2856

1
আমি ঠিক একই জিনিস প্রস্তাব বিবেচনা। আপনি যা চান তা যদি আপনি চান তবে আপনি সেটটি সর্বদা দেশীয় অজগর তালিকার তালিকা () এফএক্সের সাথে তালিকায় ফিরে যেতে পারেন।
jbchurchill

3

নিম্নলিখিত পদ্ধতিটি https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/ এ প্রকাশিত হয়েছিল এটি আরকি এবং নম্পি ব্যবহার করছে এবং এর চেয়ে ছোট মেমরির পদচিহ্ন রয়েছে অনুসন্ধানকার্সার পদ্ধতি

import arcpy
import numpy

def unique_values(table , field):
    data = arcpy.da.TableToNumPyArray(table, [field])
    return numpy.unique(data[field]).tolist()

myValues = unique_values(r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj')

print (myValues)

0

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি যে কেউ এই সহায়তার সন্ধানে হোঁচট খায় তার জন্য আমি এটি এখানে রেখে দেব। ব্যবহার করে arcpy.Frequency_analysis()দ্রুত ক্ষেত্র থেকে সমস্ত অনন্য মানকে একটি নতুন টেবিলের মধ্যে রাখে, যা আপনি পরে কার্সার ক্রিয়াকলাপের জন্য ব্যবহার করতে পারেন। এই সমস্ত সমাধানগুলি কী করে তা দ্রুত এবং সহজতর করার জন্য একটি একক আদেশ। বোনাস হিসাবে, আপনি প্রতিটি মান কতবার প্রদর্শিত হয় তার একটি গণনা পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.