पंक्तियों में एक तालिका में शून्य मान कैसे गिनें और इसे नए क्षेत्र में कैसे लिखें?


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

धन्यवाद blah238 , अब मैं अजगर खा सकता हूं!

जवाबों:


8

यहाँ एक तरीका यह करने की रूपरेखा है। मैं एक अभ्यास के रूप में आपको कोडिंग छोड़ दूंगा।

  1. इस तरह के इनपुट के रूप में आप की जरूरत है, पैरामीटर पढ़ें table
  2. वैकल्पिक रूप से गुजर रहा है , उदाहरण के लिए, जैसे लंबी , एक fieldsचर का उपयोग करेंListFields()field_type
  3. एक नया फ़ील्ड, " NUM", का tableउपयोग करके जोड़ेंAddField()
  4. एक cursorचर का उपयोग कर बनाएँUpdateCursor()
  5. प्रत्येक rowके लिए cursor:
    • एक countवैरिएबल को निष्क्रिय करें
    • प्रत्येक fieldके लिए fields:
      • valueका fieldउपयोग कर जाओrow.getValue()
      • यदि value0 के बराबर है, count1 से वृद्धि
    • countउपयोग करने के लिए जोड़ा फ़ील्ड का मान सेट करेंrow.setValue()
    • कॉल करें cursor.updateRow(), करंट में गुजरनाrow
  6. rowऔर cursorचर हटाएं

3

ऐसा करने के लिए आप एक UpdateCursor को खोल सकते हैं और प्रत्येक पंक्ति के माध्यम से इस तरह कोड (अछूता) का उपयोग करके चला सकते हैं।

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.getValue () और row.setValue () का उपयोग करना होगा।

अपडेट करें

शायद @ Blah238 के अभ्यास को पूरा करने के लिए संकेत के रूप में मेरे उत्तर का उपयोग करें :-)


2
मुझे और अधिक "पाइथोनिक" की अभिव्यक्ति पसंद है: गिनती = गिनती + 1 के बजाय गिनती + = 1 लेकिन यह सिर्फ मेरे लिए है।
Fezter

blah238 मुझे प्रताड़ित कर रहा है !!!
वासिया

मैं अधिक "पाइथोनिक" होने की आकांक्षा रखता हूं, इसलिए अगली बार याद करने की कोशिश करूंगा - जो कि मैंने पिछली बार इरादा किया था, मैंने उस वाक्य रचना को देखा - धन्यवाद!
PolyGeo

@Vasiya इसके बारे में खेद है, लेकिन मुझे यकीन है कि आपने कहावत सुनी होगी "एक आदमी को मछली दो और वह एक दिन खाए, एक आदमी को मछली सिखाए और वह जीवन भर खाए" :)
blah238

@ blah238 समस्या यह है कि मैं शाकाहारी हूं और अजगरों को नहीं खाऊंगा !!! =)
वासिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.