How to copy / replace the first letter in a column if that letter is "N" and replace with "C" in the field name "DISTRICT" inside the attribute table in ArcMap using Python inside the field calculator?


The general format for overall string replace in Python in the Field Calculator is

= !stringvar!.replace("substring to find", "new substring")

If you want to only change the first initial for all records, you could build this based on a slice of the string.

= "C" + !stringvar![1:]

If you only want to change the first initial if it starts with a "N", then you're getting into conditional statements (if/then) and should wrap this in a function for use within the Field Calculator. Build this in the codebook/pre-Logic script code.

def replaceIfN(fieldtochange):
    if fieldtochange.lower().startswith("n"):  # handles both n and N
        return "C" + fieldtochange[1:]
    else: # no change made
        return fieldtochange

Run this with

 = replaceIfN(!DISTRICT!) 

See http://desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/calculate-field-examples.htm

  • The conditional statement is the solution I was looking for. – Anthony Stokes Apr 4 '19 at 16:32

You don't even have to write any code!

Simply edit the table and do a find and replace on the selected field.

Find and replace

Example of replacing B with XXX.


Result of replacement

  • I need to know how to copy / replace the first letter in a column if that letter is "N" and replace with "C" using python inside the field calculator. I don't want to replace every instance of "N". This would require some code. – Anthony Stokes Apr 4 '19 at 16:38
  • 1
    Well... if you look at the image, what does Text match say... You can use @Jackson_Dunn's approach if you intend to wrap the field calculate in say modelbuilder. If you just want to replace the first N with C then my approach is less painful and quicker. – Hornbydd Apr 4 '19 at 16:45
  • 1
    I see what you mean. This is the fastest way without code but I like to always know the python equivalent. – Anthony Stokes Apr 4 '19 at 17:12
  • Are imgur images always going to be on the site, or is there a risk of them not loading at some distant point in the future? If the latter, please elaborate on your answer (e.g. Select "Start of Field" for Text match) – smiller Apr 4 '19 at 18:01
  • 2
    I didnt know of find and replace, nice! – BERA Apr 4 '19 at 18:53

You can add a number to the python replace code to determine how many instances to change (in your case just one):

!District!.replace("C", "N", 1)
  • Thanks @Jackson Dunn. I'd be curious as to performance between the string replace number of instances vs. string slicing. I suspect in this case it's minimal but may be worth testing on larger fields or more complex replacements. – smiller Apr 4 '19 at 19:52

Using vbscript instead if you're working in ArcGIS Desktop, The code is:


Where :

  • the first 1 equals the line position (first character)
  • and the second 1 is amount of characters to change (only need to change one letter per row, not all C's and N's).
  • This is the VB script solution so thank you for that but I was wondering how to solve it using python in the field calculator. – Anthony Stokes Apr 4 '19 at 16:12

Not the answer you're looking for? Browse other questions tagged or ask your own question.