Hello again!
I'm still relatively new to Python and it's my first time implementing it in the Field Calculator. What I am trying to accomplish is the reclassification of one field "CAUSE" into a new blank field named "CAUSE_RGR". I was given a script that I would have to adapt to this current project.
Basically I need to reclassify the numbers in the "CAUSE" column to be new numbers in the "CAUSE_RGR" as so:
1 --> 7
3 --> 2
4 --> 1
I was given a script that I would have to adapt to this current project, so I watched a tutorial on using python in the field calculator and came up with this script in the field calculator:
Pre-Logic Script Code:
def Reclass (CAUSE):
if CAUSE == 1:
return 7
elif CAUSE == 3:
return 2
elif CAUSE == 4:
return 1
else:
return 0
CAUSE_RGR =
def Reclass(!CAUSE!)
However I keep getting errors. Is it a syntax issue? I can't see why something as this isn't working.
Solved! Go to Solution.
You should probably only use
CAUSE_RGR =
def Reclass(!CAUSE!)
... so without the "def"
Thanks for the advice, but there still seems to be an issue. I removed it, but I'm still getting no result in my attribute table. I also checked the Geoprocessing Results window and it's telling me my script ran successfully, but it's not reflected in the table at all.
... and you don't have a small selection activated of your table? (Field Calculator works on selections). I am going to create a test dataset with some value to see if I can reproduce this. What version of ArcGIS for Desktop are you using?
Actually, I just figured it out! The problem is that although I was using numbers from the original "CAUSE" field, I forgot I had set the entire field to be a string, so it should look like
def Reclass (CAUSE):
if CAUSE == "1":
return 7
elif CAUSE == "3":
return 2
elif CAUSE == "4":
return 1
else:
return 0
With quotation marks. Silly me! Thank you for your help!
Glad you resolved it. The datatype of the field has a large influence over the interpretation of the values (strings in this case).
Strange... seems to work just fine:
... with this result:
Xander is correct, you never call a function with 'def' attached. It is also a good idea to check your syntax and issues by running a script outside of arcmap in an python IDE. Substitute possible values in your test def using the fieldname as the incrementer remembering to add ! before and after in the field calculator. Now here is your example...but you will see that it will soon become ridiculous in length if there are many cases in your CAUSE's and you would be advised to examine other data structures to facilitate logic and access to reclassification (for example dictionaries etc etc). BUT that is not the issue here... Just make sure that you don't get Lost in your CAUSE syntax
def fld_reclass (case): if case == 1: return 7 elif case == 3: return 2 elif case == 4: return 1 else: return 0 possible = [-1,0,1,2,3,4,5] for CAUSE in possible: # if it helps, use your fieldname as the incrementer result = fld_reclass(CAUSE) # now don't forget the !_before&after_! print("case {} result {}".format(CAUSE,result)) #