0

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.

4

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
7

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.

Replaced

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
2

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
0

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

REPLACE ([DISTRICT],"C","N",1,1)

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.