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?

closed as off-topic by Dan C, Kadir Şahbaz, csk, BERA, ahmadhanb Apr 5 at 1:08

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "When seeking help to debug/write/improve code always provide the desired behavior, a specific problem/error and the shortest code (as formatted text, not pictures) needed to reproduce it in the question body. Providing a clear problem statement and a code attempt helps others to help you." – Dan C, Kadir Şahbaz, csk, BERA, ahmadhanb
If this question can be reworded to fit the rules in the help center, please edit the question.


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 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 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 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 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 at 18:01
  • 2
    I didnt know of find and replace, nice! – BERA Apr 4 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 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 at 16:12

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