সারিগুলিতে একটি সারণীতে শূন্য মানগুলি কীভাবে গণনা করা যায় এবং এটি নতুন ক্ষেত্রে লিখতে হয়?


9

এটি করা খুব সহজ কাজ তবে আমি সঠিক বাক্য গঠন বুঝতে পারি না।

আমার একটি শেফফাইল রয়েছে যার বৈশিষ্ট্যগুলি নীচের মতো:

FID Shape   FIELD1 FIELD2 FIELD3 ...
0   Polygon 0      1      0
1   Polygon 3      0      7
2   Polygon 3      4      7
...

ক্ষেত্রের সংখ্যা এবং তাদের নাম সর্বদা পৃথক।

আমাকে একটি নতুন ক্ষেত্র তৈরি করতে হবে (আসুন এটির নাম দিন NUM) এবং প্রতিটি সারিতে শূন্যের সংখ্যা গণনা করুন।

উদাহরণ আউটপুট:

FID Shape   FIELD1 FIELD2 FIELD3 NUM
0   Polygon 0      1      0      2
1   Polygon 3      0      7      1
2   Polygon 3      4      7      0

আমি কীভাবে একটি নতুন ক্ষেত্র তৈরি করতে জানি, তবে পরবর্তী পদক্ষেপগুলিতে আমি পরিষ্কার নই।


কাজের কোড:

#path is path to shape file
def a(path):
  fields = arcpy.ListFields(path,"FID_*") #FID_* is wildcard to select a fields name 
  arcpy.AddField_management(path, "NUM", "SHORT") #create a field with name NUM
  cursor= arcpy.UpdateCursor(path) 
  for row in cursor:
    count=0
    for field in fields: 
      a= row.getValue(field.name) #take a value 
      if a==0: #if value=0 then value=value+1
        count+=1
    row.setValue("NUM", count)
    cursor.updateRow(row)
  del row 
  del cursor

ধন্যবাদ ব্লাহ 238 , এখন আমি অজগর খেতে পারি!

উত্তর:


8

এটি করার এক উপায়ের একটি রূপরেখা এখানে দেওয়া হল। আমি কোডিংটি অনুশীলন হিসাবে ছেড়ে দেব।

  1. আপনার প্রয়োজনীয় প্যারামিটারগুলি পড়ুন, যেমন ইনপুট table
  2. Expectedচ্ছিকভাবে প্রত্যাশিত ক্ষেত্রে যেমন লম্বাfields করে ব্যবহার করে একটি পরিবর্তনশীল তৈরি করুনListFields()field_type
  3. একটি নতুন ক্ষেত্র যুক্ত করুন, " NUMকরার", tableব্যবহারAddField()
  4. cursorব্যবহার করে একটি ভেরিয়েবল তৈরি করুনUpdateCursor()
  5. প্রতিটি rowজন্য cursor:
    • একটি countভেরিয়েবল ইনিটালাইজ করুন
    • প্রতিটি fieldজন্য fields:
      • পান valueএর fieldব্যবহারrow.getValue()
      • যদি value0 এর সমান countহয় তবে 1 দ্বারা বর্ধিত হবে
    • countব্যবহারের জন্য যুক্ত ক্ষেত্রের মান সেট করুনrow.setValue()
    • কল cursor.updateRow(), বর্তমানের মধ্যে পাসrow
  6. মুছুন rowএবং cursorভেরিয়েবল

3

এটি করার জন্য আপনি একটি আপডেট কার্সার খুলতে এবং এই জাতীয় কোড (অরীক্ষিত) ব্যবহার করে প্রতিটি সারি পেরিয়ে যেতে পারেন।

rows = arcpy.UpdateCursor(path)   # path is your shapefile
for row in rows:
  count = 0
  if row.field1 == 0:
    count = count + 1
  if row.field2 == 0:
    count = count + 1
  if row.field3 == 0:
    count = count + 1
  row.num = count

যদি আপনার ফিল্ড 1 থেকে ফিল্ডএন থাকে তবে আপনার হার্ডওরেড ফিল্ডের নামের পরিবর্তে ভেরিয়েবলের সাথে কাজ করতে ক্ষেত্রগুলি থেকেও লুপ করতে হবে এবং রো.সেটভ্যালু () এবং row.setValue () ব্যবহার করতে হবে।

হালনাগাদ

@ উত্তরঃ 238 ​​এর অনুশীলনটি সম্পূর্ণ করতে আমার উত্তরগুলি ইঙ্গিত হিসাবে ব্যবহার করুন :-)


2
আমি আরও "পাইথোনিক" প্রকাশটি পছন্দ করি: গণনা = গণনা + 1 এর পরিবর্তে গণনা + = 1 তবে এটি কেবল আমার me
ফেজার

blah238 আমাকে নির্যাতন করছে !!!
ভাসিয়া

আমি আরও "পাইথোনিক" হওয়ার আকাঙ্ক্ষা করেছি তাই পরবর্তী সময়ের জন্য মনে রাখার চেষ্টা করব - যা আমি শেষ বারের মতো এই সিনট্যাক্সটি দেখেছিলাম - ধন্যবাদ!
পলিজিও

@ ভাসিয়া এ সম্পর্কে দুঃখিত, তবে আমি নিশ্চিত আপনি এই প্রবাদটি শুনেছেন "" একজন লোককে একটি মাছ দিন এবং সে একদিনের জন্য খায়, একজনকে মাছ ধরতে শেখায় এবং সে আজীবন খায় ":)
ব্লাহ 238

@ ব্লাহ 238 সমস্যা হ'ল আমি নিরামিষাশী এবং অজগর না খাওয়া !!! =)
ভাসিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.