Feld berechnen: Python-Beispiele

Die Eingabe von Werten über die Tastatur ist nicht die einzige Möglichkeit zum Bearbeiten von Werten in einer Tabelle. Sie können eine mathematische Berechnung zur Festlegung eines Feldwerts für einen einzelnen Datensatz oder für alle Datensätze durchführen. Sie können einfache und erweiterte Berechnungen für alle oder ausgewählte Datensätze durchführen. Darüber hinaus können Sie Fläche, Länge, Umfang und andere geometrische Eigenschaften von Feldern in Attributtabellen bearbeiten. Die Abschnitte unten enthalten Beispiele für die Verwendung der Feldberechnung. Die Berechnungen werden mit Python, SQL und Arcade durchgeführt.

Dieses Thema konzentriert sich auf Python-basierte Beispiele für Feld berechnen. Weitere Informationen über Arcade-Ausdrücke finden Sie in der ArcGIS Arcade-Dokumentation. Weitere Informationen zu SQL-Ausdrücken finden Sie unter Berechnen von Feldwerten. Weitere Informationen zu VBScript-Beispielen finden Sie unter Feld berechnen – VBScript-Beispiele.

Hinweis:
  • Python erfordert eine Einrückung als Teil der Syntax. Verwenden Sie zwei oder vier Leerzeichen zur Definition jeder strukturellen Ebene. Richten Sie den Anfang und das Ende von Anweisungsblöcken aneinander aus, gehen Sie einheitlich vor.
  • Python-Berechnungsausdrucksfelder werden in Ausrufezeichen (!!) eingeschlossen.
  • Beachten Sie beim Benennen von Variablen, dass in Python die Groß- und Kleinschreibung relevant ist. value ist daher nicht identisch mit Value.
  • Nachdem Sie Anweisungen eingegeben haben, klicken Sie auf die Schaltfläche Exportieren Exportieren, um diese in eine Datei zu schreiben. Mit der Schaltfläche Importieren Import kann eine vorhandene Berechnungsdatei gefunden und ausgewählt werden.

Einfache Berechnungen

Mit nur einem kurzen Ausdruck kann eine Vielzahl von Berechnungen durchgeführt werden.

Einfache Zeichenfolgenbeispiele

Zeichenfolgen werden von einer Reihe von Python-Zeichenfolgefunktionen unterstützt, einschließlich capitalize, rstrip und replace.

Schreibt das erste Zeichen der Zeichenfolge im Feld CITY_NAME groß.

!CITY_NAME!.capitalize()

Entfernt alle Leerstellen am Ende der Zeichenfolge im Feld CITY_NAME.

!CITY_NAME!.rstrip()

Ersetzt alle Vorkommen von "california" im Feld STATE_NAME durch "California".

!STATE_NAME!.replace("california", "California")

Sie können in Python durch Indizieren und Aufteilen auf Zeichen in einem Zeichenfolgenfeld zugreifen. Bei der Indizierung werden Zeichen an einer Indexposition abgerufen; beim Aufteilen wird eine Gruppe von Zeichen abgerufen. Nehmen Sie in der folgenden Tabelle an, dass !fieldname! ein Zeichenfolgenfeld mit dem Wert "abcde" ist.

BeispielErläuterungErgebnis

!fieldname![0]

Das erste Zeichen

"a"

!fieldname![-2]

Das vorletzte Zeichen

"d"

!fieldname![1:4]

Das zweite, dritte und vierte Zeichen

"bcd"

Python unterstützt auch die Formatierung von Zeichenfolgen mit der Methode format().

Kombiniert "FieldA" und "FieldB" mit Doppelpunkt getrennt.

"{}:{}".format(!FieldA!, !FieldB!)

Einfache mathematische Beispiele

Python stellt Werkzeuge zum Verarbeiten von Zahlen bereit. Python unterstützt außerdem eine Reihe von numerischen und mathematischen Funktionen einschließlich math, cmath, decimal, random, itertools, functools und operator.

OperatorErläuterungBeispielErgebnis

x + y

x plus y

1,5 + 2,5

4,0

x - y

x minus y

3,3 - 2,2

1.1

x * y

x mal y

2,0 * 2,2

4,4

x / y

X dividiert durch Y

4,0 / 1,25

3.2

x // y

X dividiert durch Y (Division ohne Rest)

4,0 // 1,25

3.0

x % y

x modulo y

8 % 3

2

-x

negativer Ausdruck für x

x = 5

-x

-5

+x

x ist unverändert

x = 5

+x

5

x ** y

x potenziert mit y

2 ** 3

8

Multipliziert die Werte eines Feldes mit 2.

!Rank! * 2

Berechnet das Volumen einer Kugel mit einem Radiusfeld.

4.0 / 3.0 * math.pi * !Radius! ** 3
Hinweis:

Ganzzahlige Felder vom Typ "Short", "Long" und "Big Integer" unterscheiden sich in den folgenden Bereichen der unterstützten ganzen Zahlen:

  • Short (16-Bit-Integer): Unterstützt ganze Zahlen zwischen -(215) und 215 (-32.768 und 32.767)
  • Long (32-Bit-Integer): Unterstützt ganze Zahlen zwischen -(231) und 231 (-2.147.483.648 und 2.147.483.647)
  • Big Integer (64-Bit-Integer): Unterstützt ganze Zahlen zwischen -(253) und 253 (-9.007.199.254.740.992 und 9.007.199.254.740.991)

Vorversion:

In ArcGIS Pro wird Python 3 verwendet, und in ArcGIS Desktop wird Python 2 verwendet. Python 2 verwendet Ganzzahl-Mathematik, was bedeutet, dass die Division von zwei ganzzahligen Werten immer einen ganzzahligen Wert ergibt (3 / 2 = 1). In Python 3 ergibt die Division zweier ganzzahliger Werte einen Gleitkommawert (3 / 2 = 1.5).

Integrierte Python-Funktionen

Python enthält eine Reihe von integrierten Funktionen, z. B. max, min, round und sum.

Berechnet den Maximalwert für jeden Datensatz aus einer Liste mit Feldern.

Expression:
max([!field1!, !field2!, !field3!])

Berechnet die Summe für jeden Datensatz aus einer Liste mit Feldern.

Expression:
sum([!field1!, !field2!, !field3!])

Verwenden von Codeblöcken

Mit Python-Ausdrücken und dem Parameter Codeblock haben Sie folgende Möglichkeiten:

  • Verwenden alle Python-Funktionen im Ausdruck
  • Zugreifen auf Geoverarbeitungsfunktionen und -objekte
  • Zugreifen auf Eigenschaften der Feature-Geometrie
  • Zugreifen auf den neuen Zufallswertoperator
  • Reklassifizieren von Werten mit If-Then-Else-Logik

AusdruckstypCode-Block

Python (PYTHON3-Schlüsselwort)

Unterstützt Python-Funktionalität. Der Codeblock wird mit Python-Funktionen (def) ausgedrückt. Geometrieeigenschaften werden mit Geoverarbeitungsobjekten, z. B. ggf. Punktobjekten, ausgedrückt.

Arcade

Unterstützt Arcade-Funktionalität.

SQL

Unterstützt SQL-Ausdrücke.

SQL-Ausdrücke wurden implementiert, um Berechnungen, die Features-Services und Enterprise-Geodatabases verwenden, insbesondere im Hinblick auf die Performance zu unterstützen. Statt Features oder Zeilen einzeln nacheinander zu berechnen, wird eine einzelne Anforderung an den Feature-Service oder die Datenbank gesendet.

Vorversion:

In ArcGIS Desktop unterstützt das Werkzeug Feld berechnen VB, PYTHON und PYTHON_9.3 als Ausdruckstypen. Der VB-Ausdruckstyp, der in einigen Produkten unterstützt wird, wird in 64-Bit-Produkten nicht unterstützt, einschließlich ArcGIS Pro.

Die Schlüsselwörter PYTHON und PYTHON_9.3 werden in ArcGIS Pro aus Gründen der Abwärtskompatibilität noch unterstützt, werden aber nicht mehr als Auswahlmöglichkeiten aufgeführt. Python-Skripte, in denen diese Schlüsselwörter verwendet werden, funktionieren auch weiterhin.

Der einzige Unterschied zwischen dem Ausdruckstyp PYTHON3 und dem veralteten PYTHON_9.3-Schlüsselwort besteht darin, dass PYTHON3 Werte in Datumsfeldern als datetime-Objekte von Python zurückgibt.

Hinweis:

Der Ausdruckstyp PYTHON3 bezieht sich nicht auf die mit ArcGIS Pro installierte Python-Version. Er ist das frühere dritte Python-bezogene Schlüsselwort (nach den nun ausgeblendeten Schlüsselwörtern PYTHON und PYTHON_9.3).

Python-Funktionen werden mit dem Schlüsselwort def definiert, auf das der Name der Funktion und die Eingabeargumente der Funktion folgen. Eine Python-Funktion kann so erstellt werden, dass sie eine beliebige Anzahl von Eingabeargumenten akzeptiert (einschließlich keiner Argumente). Ein Wert wird von der Funktion mit einer return-Anweisung zurückgegeben. Der Funktionsname bleibt Ihnen überlassen (darf jedoch keine Leerzeichen oder führenden Zahlen enthalten).

Hinweis:

Wird ein Wert nicht explizit von einer Funktion mit einer return-Anweisung zurückgegeben, gibt die Funktion den Wert None zurück.

Hinweis:

Python erfordert eine Einrückung als Teil der Syntax. Verwenden Sie vier Leerzeichen zur Definition jeder strukturellen Ebene. Richten Sie den Anfang und das Ende von Anweisungsblöcken aneinander aus, gehen Sie einheitlich vor.

Codebeispiele: "math"

Einfache mathematische Ausdrücke können mit dem Parameter Ausdruck hinzugefügt werden, und komplexere Beispiele können mit den Parametern Ausdruck und Code-Block erstellt werden.

Rundet den Wert eines Feldes auf zwei Dezimalstellen.

Expression:
round(!area!, 2)

Verwendet das Modul "math" zum Konvertieren von Meter in Fuß. Die Konvertierung wird mit 2 potenziert und mit der Fläche multipliziert.

Expression:
MetersToFeet((float(!shape.area!)))

Code Block:
import math
def MetersToFeet(area):
    return math.pow(3.2808, 2) * area

Berechnen von Feldern mithilfe von Logik mit Python

Logische Muster können mit if-, else- und elif-Anweisungen in einen Codeblock aufgenommen werden.

Es wird auf Grundlage von Feldwerten klassifiziert.

Expression:
Reclass(!WELL_YIELD!)

Code Block:
def Reclass(WellYield):
    if (WellYield >= 0 and WellYield <= 10):
        return 1
    elif (WellYield > 10 and WellYield <= 20):
        return 2
    elif (WellYield > 20 and WellYield <= 30):
        return 3
    elif (WellYield > 30):
        return 4

Codebeispiele: Geometrie

Ergänzend zu den folgenden Codebeispielen finden Sie im nachfolgenden Abschnitt "Konvertierung von Geometrieeinheiten" weitere Informationen zum Konvertieren von Geometrieeinheiten.

Berechnet die Fläche eines Features.

Expression:
!shape.area!

Berechnet die maximale X-Koordinate eines Features.

Expression:
!shape.extent.XMax!

Berechnet die Stützpunktanzahl eines Features.

Expression:
getVertexCount(!shape!)

Code Block:
def getVertexCount(feat):    
    partnum = 0

    # Count the number of points in the current multipart feature
    partcount = feat.partCount
    pntcount = 0

    # Enter while loop for each part in the feature (if a singlepart 
    # feature, this will occur only once)
    while partnum < partcount:
        part = feat.getPart(partnum)
        pnt = part.next()

        # Enter while loop for each vertex
        while pnt:
            pntcount += 1   
            pnt = part.next()
   
            # If pnt is null, either the part is finished or there 
            # is an interior ring
            if not pnt: 
                pnt = part.next()
        partnum += 1
    return pntcount

Versetzt für eine Point-Feature-Class die X-Koordinate jedes Punktes um 100.

Expression:
shiftXCoordinate(!SHAPE!)

Code Block:
def shiftXCoordinate(shape):
    shiftValue = 100
    point = shape.getPart(0)
    point.X += shiftValue
    return point

Konvertierung von Geometrieeinheiten

Flächen- und Längeneigenschaften des Geometriefeldes können mit Einheitentypen mit den Geometriemethoden getArea und getLength geändert werden.

Weitere Informationen zu unterstützten linearen und Flächeneinheiten bei der Geoverarbeitung

Weitere Informationen finden Sie in den Informationen zu Polygon- und Polyline-Objekten.

Vorsicht:

Die Konvertierung von Flächeneinheiten für Daten in einem geographischen Koordinatensystem führt zu fraglichen Ergebnissen, da die Dezimalgrade nicht rund um den Globus konsistent sind.

Berechnet die Länge eines Features in Yard.

Expression:
!shape@getLength('PLANAR', 'YARDS')

Berechnet die Fläche eines Features in Acres.

Expression:
!shape@getArea('PLANAR', 'ACRES')

Die geodätische Fläche und Länge kann mit der Methode vom Typ GEODESIC berechnet werden.

Weitere Informationen finden Sie in den Informationen zu Polygon- und Polyline-Objekten.

Weitere Informationen zu Geoverarbeitungswerkzeugen und linearen Einheiten sowie Flächeneinheiten

Berechnet die geodätische Länge eines Features in Yard.

Expression:
!shape@getLength('GEODESIC', 'YARDS')

Berechnet die geodätische Fläche eines Features in Acres.

Expression:
!shape@getArea('GEODESIC', 'ACRES')

Codebeispiele: Datumsfelder

Datum und Uhrzeit können mit datetime- und time-Modulen berechnet werden.

Berechnet das aktuelle Datum.

Expression:
time.strftime("%d/%m/%Y")

Berechnet das aktuelle Datum und die aktuelle Zeit.

Expression:
datetime.now()

Berechnet das Datum 15. März 2015, 1:30:00 pm.

Expression:
datetime(year=2015, month=3, day=15, hour=13, minute=30, second=0))

Berechnet die Anzahl der Tage zwischen dem aktuellen Datum und dem Wert in einem Feld.

Expression:
datetime.now().day - !OID!

Berechnet ein Datum durch Hinzufügen von 100 Tagen zu dem Datumswert in einem Feld.

Expression:
!field1! + timedelta(days=100)

Code Block:
from datetime import timedelta

Berechnet mit der Methode ctime im Modul datetime eine Zeichenfolge, die das Datum darstellt. Im Beispiel wird eine Zeichenfolge mit dem Format 'Mon Feb 22 10:15:00 2021' erstellt.

Expression:
!field1!.ctime()

Berechnet den Wochentag (z. B. Sonntag) für einen Datumswert in einem Feld.

Expression:
!field1!.strftime('%A')

Berechnet unter Verwendung der Methode strftime des Moduls datetime und einer expliziten Formatzeichenfolge eine formatierte Zeichenfolge aus einem Datumsfeld. Im Beispiel wird eine Zeichenfolge mit dem Format '02/22/2021, 10:15:00' erstellt.

Expression:
!field1!.strftime("%m/%d/%Y, %H:%M:%S")

Berechnet ein Datum mit einer nach ISO 8601 formatierten Zeichenfolge.

Expression:
'1969-07-21 02:56:00'

Berechnet ein Datum nach der Konvention für Monat, Tag, Jahr, Uhrzeit.

Expression:
'July 1 2020 12:30:45'

Codebeispiele: Felder mit reinem Uhrzeitwert

Berechnet die Zeit mit der Funktion time des Moduls datetime als "4:30:00 pm".

Expression:
time(hour=16, minute=30, second=0)

Code Block:
from datetime import time

Bei der Berechnung ein Datumsfeld in ein Feld mit reinem Uhrzeitwert wird nur der Uhrzeit-Bereich des datetime-Objekts übernommen.

Expression:
!date_field!

Codebeispiele: Felder mit reinem Datumswert

Verwendet das Datum "31. Dezember 2000" für die Berechnung.

Expression:
datetime(2000, 12, 31)

Bei der Berechnung ein Datumsfeld in ein Feld mit reinem Uhrzeitwert wird nur der Uhrzeit-Bereich des datetime-Objekts übernommen.

Expression:
!date_field!

Codebeispiele: Felder des Typs "Zeitstempelversatz"

Fügt einen UTC-Zeitstempelversatz zum aktuellen Datum und der aktuellen Uhrzeit mit der Eigenschaft utc des Moduls datetime.timezone hinzu.

Expression:
datetime.now(tz=timezone.utc)

Code Block:
from datetime import timezone

Fügt einen Zeitstempelversatz zum aktuellen Datum und der aktuellen Uhrzeit hinzu, wobei die Klasse ZoneInfo des Moduls zoneinfo die Zeitzone festlegt.

Expression:
datetime.now(ZoneInfo('America/New_York'))

Code Block:
from zoneinfo import ZoneInfo

Codebeispiele: Zeichenfolgen

Zeichenfolgen können mithilfe verschiedener Python-Codierungsmuster berechnet werden.

Gibt die drei am weitesten rechts stehenden Zeichen zurück.

Expression:
!SUB_REGION![-3:]

Ersetzt beliebige Vorkommen eines großgeschriebenen "P" durch ein kleingeschriebenes "p".

Expression:
!STATE_NAME!.replace("P","p")

Verbindet zwei Felder mit einem Leerzeichen als Trennzeichen.

Expression:
!SUB_REGION! + " " + !STATE_ABBR!

Konvertieren in Groß- bzw. Kleinschreibung

In den folgenden Beispielen werden verschiedene Möglichkeiten zum Konvertieren von Wörtern veranschaulicht, um das erste Zeichen jedes Wortes in Großbuchstaben und die übrigen Zeichen in Kleinbuchstaben zu schreiben.

Expression:
' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])
Expression:
!STATE_NAME!.title()

Reguläre Ausdrücke

Das re-Modul von Python stellt Abgleichvorgänge für reguläre Ausdrücke bereit, die Sie zum Ausführen komplexer Musterabgleichs- und Ersetzungsregeln für Zeichenfolgen verwendet können.

Ersetzen Sie 'St' oder 'St.', indem Sie ein neues Wort am Ende der Zeichenfolge mit dem Wort 'Street' beginnen.

Expression:
update_street(!ADDRESS!)

Code Block:
import re
def update_street(street_name):
    return re.sub(r"""\b(St|St.)\Z""",  
                  'Street',
                  street_name)

Kumulative und sequenzielle Berechnungen

Kumulative und sequentielle Berechnungen können mit globalen Variablen ausgeführt werden.

Berechnet eine sequenzielle ID oder Zahl auf der Grundlage eines Intervalls.

Expression:
autoIncrement(10, 5)

Code Block:
rec = 0
def autoIncrement(start=1, interval=1):
    global rec
    if rec == 0:
        rec = start
    else:
        rec += interval
    return rec

Berechnet den kumulativen Wert eines Zahlenfeldes.

Expression:
accumulate(!FieldA!)

Code Block:
total = 0
def accumulate(increment):
    global total
    if total:
        total += increment
    else:
        total = increment
    return total

Berechnet die prozentuale Steigerung eines Zahlenfeldes.

Expression:
percentIncrease(float(!FieldA!))

Code Block:
lastValue = 0
def percentIncrease(newValue):
    global lastValue
    if lastValue:
        percentage = ((newValue - lastValue) / lastValue)  * 100
    else: 
        percentage = 0
    lastValue = newValue
    return percentage

Zufallswerte

Zufallswerte können mit dem random-Modul berechnet werden.

Verwendet das numpy-Site-Paket zum Berechnen von zufälligen Gleitkommawerten zwischen 0,0 und 1,0.

Expression:
getRandomValue()

Code Block:
import numpy

def getRandomValue():
    return numpy.random.random()

Verwendet das Modul random, um zufällige ganzzahlige Werte zwischen 0 und 10 zu berechnen.

Expression:
random.randint(0, 10)

Code Block:
import random

Berechnen von NULL-Werten

In einem Python-Ausdruck können NULL-Werte mit dem Python-Schlüsselwort None berechnet werden.

Hinweis:

Die folgende Berechnung funktioniert nur, wenn NULL-Werte für das Feld zulässig sind.

Verwenden Sie Python-None, um NULL-Werte zu berechnen.

Expression:
None

Verwandte Themen