フィールド演算 (Calculate Field) (データ管理)

サマリー

フィーチャクラス、フィーチャ レイヤー、またはラスターのフィールドの値を計算します。

使用法

    注意:

    このツールを実行すると、入力データが変更されます。 詳細と不要なデータの変更を回避するための方法については、「入力データを変更または更新するツール」をご参照ください。

  • Python 式の詳細については、「フィールド演算の Python の例」をご参照ください。

    Arcade 式の詳細については、開発者ヘルプの「ArcGIS Arcade」をご参照ください。

    SQL 式の詳細については、「フィールドの計算」をご参照ください。

    VBScript 式の詳細については、「フィールド演算の VBScript の例」をご参照ください。

  • このツールの Arcade 式は フィールド演算の Arcade プロファイルを使用します。 Arcade プロファイルは、Arcade 式が評価および理解されるコンテキストです。 Arcade 式を評価すると、戻り値は出力値のフィールド タイプにキャストされます。

  • [フィーチャ レイヤーの作成 (Make Feature Layer)] ツールや [属性検索 (Select Layer By Attribute)] ツールでクエリから作成されたフィーチャなど、選択されている一連のフィーチャに対してこのツールを使用すると、選択されているレコードのみが更新されます。

  • 1 回の操作につき、1 つのフィールドにのみ演算を適用できます。 複数の計算を適用するには、[フィールド演算 (複数) (Calculate Fields)] ツールを使用します。

  • 既存のフィールドの値は上書きされます。 元の値を維持するには、バックアップとして入力テーブルのコピーを作成するか、[ジオプロセシング] ウィンドウの「[元に戻す] の有効化」オプションを使用します。

  • Python の演算の場合、フィールド名は感嘆符で囲まれている必要があります (!fieldname! など)。

    Arcade の演算の場合、フィールド名に接頭辞 $feature. が付与されている必要があります ($feature.fieldname など)。

  • 注意:

    フィールド タイプ (Date、Date Only、Time Only、Timestamp Offset、Text) 間で時間値を転送するには、代わりに [時間フィールドの変換 (Convert Temporal Field)] ツールを使用します。

  • テキスト フィールドまたは文字フィールドの文字列の演算を行う場合、ダイアログ ボックスでは、文字列を二重引用符で囲む必要があり (例: "string")、スクリプトでは、二重引用符で囲まれた文字列をさらに一重引用符で囲む必要があります (例: '"string"')。

  • 数値を指定するフィールドの演算を行うには、[式] パラメーターに数値を引用符で囲まずに入力します。

  • レガシー:

    arcgis.rand() は、ArcGIS Pro 2.0 以降サポートされなくなりました。代わりに、Python の random モジュールを使用する、同等の関数を使用する必要があります。random モジュールを正常に使用するには、[コード ブロック] パラメーターにインポートとして追加します。

  • [コード ブロック] パラメーターを使用すると、複雑な式を作成できます。 コード ブロックは、ダイアログ ボックスに直接入力するか、スクリプトで文字列として入力します。 式とコード ブロックは接続されています。 コード ブロックの結果が式に渡される必要があるため、コード ブロックが式に関連付けられている必要もあります。

    [コード ブロック] パラメーターは Python 式でのみサポートされています。

  • [コード ブロック] パラメーターでは、Pythonmath モジュールおよび形式を使用できます。 追加のモジュールをインポートすることもできます。 math モジュールは、数論的関数と表現関数、べき関数と対数関数、三角関数、角度変換関数、双曲線関数、および数学定数を提供します。 math モジュールの詳細については、「Python」のヘルプをご参照ください。

  • Python でジオメトリ情報を計算するには、Geometry オブジェクト プロパティを使用します。 たとえば、!shape.pointCount! の式を使用して、フィーチャ内の頂点の数を計算します。

    注意:

    [ジオメトリ属性の計算 (Calculate Geometry Attributes)] ツールでも、同様の計算を実行できます。

    Python で面積と長さを計算するには、getArea メソッドと getLength メソッドをメソッドおよび単位タイプと組み合わせて使用します。

    • ポリゴンの測地線の面積を平方キロメートル単位で計算するには、次の式を使用します。
      !shape.getArea('GEODESIC', 'SQUAREKILOMETERS')!
    • ポリライン (またはポリゴン) の平面の長さをヤード単位で計算するには、次の式を使用します。
      !shape.getLength('PLANAR', 'YARDS')

    詳細については、ArcPy Polygon オブジェクトと Polyline オブジェクトをご参照ください。

    ジオプロセシング ツールと距離および面積単位の詳細

  • ArcGIS アプリケーションは、.cal ファイルの読み書きに UTF-16-LE エンコードを使用します。 ファイルが UTF-16-LE エンコードを使用して書き込まれている限り、その他のアプリケーション (Notepad など) を使用して、.cal ファイルを作成または変更できます。 他のエンコードを使用したファイルは、コード ブロックに読み込まれません。

  • 結合されたデータを操作する場合は、結合元のテーブル内のフィールドのみ更新できます。 結合先のテーブル内のフィールドは更新できません。 結合されたテーブルで計算を実行する場合は、そのテーブルで直接計算を実行できます。

  • NULL を含む文字列フィールドの連結やゼロ値除算を試みる Python 式は、このフィールドの値として NULL を返します。

  • SQL 式は、フィーチャ サービスやエンタープライズ ジオデータベースの高速な計算をサポートします。 一度に 1 つのフィーチャまたは行を計算する代わりに、サーバーまたはデータベースに 1 つのリクエストが送信されるので、計算が高速化します。

    フィーチャ サービスとエンタープライズ ジオデータベースだけが SQL 式をサポートしています。 他の形式では、Python または Arcade 式を使用します。

    [式の種類] パラメーターの [SQL] オプションの使用には、次の制限があります。

    • このオプションは、Db2OraclePostgreSQLSAP HANA、および SQL Server のエンタープライズ ジオデータベースのみでサポートされています。
    • 結合テーブルのフィールド値の計算はサポートされていません。
    • バージョン対応登録され、履歴管理が有効になっているエンタープライズ ジオデータベース データはサポートされていません。
    • ジオプロセシング操作を元に戻すことはできません。

    SQL 式のヘルプは、データベース ベンダーのドキュメントをご参照ください。

  • ツール ダイアログ ボックスの [式] パラメーターには [値の挿入] ドロップダウン リストがあり、[フィールド] リストで選択したフィールドのフィールド値、または選択したフィールドのドメインのドメイン値を追加できます。 ドメイン値を使用して、フィールド ドメインの有効な値のみがフィールドに挿入されるようにします。

パラメーター

ラベル説明データ タイプ
入力テーブル

新しい演算で更新されるフィールドを含んでいるテーブル。

Mosaic Layer; Raster Layer; Table View
フィールド名 (既存または新規)

新しい演算で更新するフィールド。

指定された名前のフィールドが入力テーブルに存在しない場合は、フィールドが追加されます。

Field

選択されている行を設定する値を作成するために使用される単純な演算式。

SQL Expression
式の種類
(オプション)

使用される式のタイプを指定します。

入力値がフィーチャ サービスの場合、デフォルトの式タイプは [SQL] になります。 それ以外の入力タイプでは、デフォルトの式タイプが [Python] になります。

Python 式の詳細については、「フィールド演算の Python の例」をご参照ください。

Arcade 式の詳細については、開発者ヘルプの「ArcGIS Arcade」をご参照ください。

SQL 式の詳細については、「フィールドの計算」をご参照ください。

SQL 式は、フィーチャ サービスやエンタープライズ ジオデータベースの高速な計算をサポートします。 一度に 1 つのフィーチャまたは行を計算する代わりに、サーバーまたはデータベースに 1 つのリクエストが設定されるので、計算が大幅に高速化します。

フィーチャ サービスとエンタープライズ ジオデータベースだけが SQL 式をサポートしています。 他の形式では、Python または Arcade 式を使用します。

VBScript 式の詳細については、「フィールド演算の VBScript の例」をご参照ください。

  • PythonPython 式の種類が使用されます。
  • ArcadeArcade 式の種類が使用されます。
  • SQLSQL 式の種類が使用されます。
  • VBScriptVBScript 式の種類が使用されます。
String
コード ブロック
(オプション)

複雑な Python 式または VBScript 式に使用するコードのブロック。

String
フィールド タイプ
(オプション)

新しいフィールドのフィールド タイプを指定します。 フィールド名が入力テーブルに存在しない場合にのみ、このパラメーターが使用されます。

フィールドのタイプがテキストの場合、フィールドの長さは 512 になります。ただし、入力がシェープファイルまたは dBASE ファイルの場合、長さは 254 になります。長さを調整するには、[フィールドの変更 (Alter Field)] ツールを使用します。

  • Short (16 ビット整数)フィールド タイプが Short になります。 Short フィールドには、-32,768 ~ 32,767 の整数を指定できます。
  • Long (32 ビット整数)フィールド タイプが Long になります。 Long フィールドには、-2,147,483,648 ~ 2,147,483,647 の整数を指定できます。
  • Big Integer (64 ビット整数)フィールド タイプが Big Integer になります。 Big Integer フィールドには、-(253) ~ 253 の整数を指定できます。
  • Float (32 ビット浮動小数点)フィールド タイプが Float になります。 Float フィールドには、-3.4E38 ~ 1.2E38 の有理数を指定できます。
  • Double (64 ビット浮動小数点)フィールド タイプが Double になります。 Double フィールドには、-2.2E308 ~ 1.8E308 の有理数を指定できます。
  • Textフィールド タイプが Text になります。 Text フィールドには、文字列を指定できます。
  • Dateフィールド タイプが Date になります。 Date フィールドには、日付値と時間値を指定できます。
  • Date (高精度)フィールド タイプが高精度の日付になります。 高精度の日付フィールドでは、ミリ秒の日付と時刻の値がサポートされます。
  • Date Onlyフィールド タイプが日付のみになります。 Date Only フィールドには、日付値を指定できます。時間値は指定できません。
  • Time Onlyフィールド タイプが時間のみになります。 Time only フィールドには、時間値を指定できます。日付値は指定できません。
  • Timestamp Offsetフィールド タイプが Timestamp Offset になります。 Timestamp Offset フィールドは、日付、時刻、および UTC 値からのオフセットを指定できます。
  • BLOB (バイナリ データ)フィールド タイプが BLOB になります。 BLOB フィールドには、長いバイナリ数値列として格納されるデータを指定できます。 BLOB フィールドにアイテムを読み込む、または BLOB フィールドの内容を参照するには、カスタム ローダー、カスタム ビューアー、またはサードパーティ アプリケーションが必要です。
  • GUID (Globally Unique Identifier)フィールド タイプが GUID になります。 GUID フィールドには、中括弧 ({}) で囲まれた 36 文字のレジストリ形式の文字列が格納されます。
  • Rasterフィールド タイプがラスターになります。 ラスター フィールドでは、ラスター データをジオデータベースの内部またはジオデータベースと一緒に格納できます。 ArcGIS ソフトウェアでサポートされているラスター データセット形式はすべて格納できますが、小さい画像のみを使用することをお勧めします。
String
ドメインを設定
(オプション)

フィールド ドメイン ルールが適用されるかどうかを指定します。

  • オン - フィールド ドメイン ルールが適用されます。 フィールドを更新できない場合、フィールド値は変更されず、ツール メッセージに警告メッセージが含まれます。
  • オフ - フィールド ドメイン ルールは適用されません。 これがデフォルトです。
Boolean

派生した出力

ラベル説明データ タイプ
更新された入力テーブル

更新されたテーブル。

Table View; Raster Layer; Mosaic Layer

arcpy.management.CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type}, {enforce_domains})
名前説明データ タイプ
in_table

新しい演算で更新されるフィールドを含んでいるテーブル。

Mosaic Layer; Raster Layer; Table View
field

新しい演算で更新するフィールド。

指定された名前のフィールドが入力テーブルに存在しない場合は、フィールドが追加されます。

Field
expression

選択されている行を設定する値を作成するために使用される単純な演算式。

SQL Expression
expression_type
(オプション)

使用される式のタイプを指定します。

  • PYTHON3Python 式の種類が使用されます。
  • ARCADEArcade 式の種類が使用されます。
  • SQLSQL 式の種類が使用されます。
  • VBVBScript 式の種類が使用されます。

入力値がフィーチャ サービスの場合、デフォルトの式タイプは SQL になります。 それ以外の入力タイプでは、デフォルトの式タイプが PYTHON3 になります。

Python 式の詳細については、「フィールド演算の Python の例」をご参照ください。

Arcade 式の詳細については、開発者ヘルプの「ArcGIS Arcade」をご参照ください。

SQL 式の詳細については、「フィールドの計算」をご参照ください。

SQL 式は、フィーチャ サービスやエンタープライズ ジオデータベースの高速な計算をサポートします。 一度に 1 つのフィーチャまたは行を計算する代わりに、サーバーまたはデータベースに 1 つのリクエストが設定されるので、計算が大幅に高速化します。

フィーチャ サービスとエンタープライズ ジオデータベースだけが SQL 式をサポートしています。 他の形式では、Python または Arcade 式を使用します。

VBScript 式の詳細については、「フィールド演算の VBScript の例」をご参照ください。

String
code_block
(オプション)

複雑な Python 式または VBScript 式に使用するコードのブロック。

String
field_type
(オプション)

新しいフィールドのフィールド タイプを指定します。 フィールド名が入力テーブルに存在しない場合にのみ、このパラメーターが使用されます。

フィールドのタイプがテキストの場合、フィールドの長さは 512 になります。ただし、入力がシェープファイルまたは dBASE ファイルの場合、長さは 254 になります。長さを調整するには、[フィールドの変更 (Alter Field)] ツールを使用します。

  • SHORTフィールド タイプが Short になります。 Short フィールドには、-32,768 ~ 32,767 の整数を指定できます。
  • LONGフィールド タイプが Long になります。 Long フィールドには、-2,147,483,648 ~ 2,147,483,647 の整数を指定できます。
  • BIGINTEGERフィールド タイプが Big Integer になります。 Big Integer フィールドには、-(253) ~ 253 の整数を指定できます。
  • FLOATフィールド タイプが Float になります。 Float フィールドには、-3.4E38 ~ 1.2E38 の有理数を指定できます。
  • DOUBLEフィールド タイプが Double になります。 Double フィールドには、-2.2E308 ~ 1.8E308 の有理数を指定できます。
  • TEXTフィールド タイプが Text になります。 Text フィールドには、文字列を指定できます。
  • DATEフィールド タイプが Date になります。 Date フィールドには、日付値と時間値を指定できます。
  • DATEHIGHPRECISIONフィールド タイプが高精度の日付になります。 高精度の日付フィールドでは、ミリ秒の日付と時刻の値がサポートされます。
  • DATEONLYフィールド タイプが日付のみになります。 Date Only フィールドには、日付値を指定できます。時間値は指定できません。
  • TIMEONLYフィールド タイプが時間のみになります。 Time only フィールドには、時間値を指定できます。日付値は指定できません。
  • TIMESTAMPOFFSETフィールド タイプが Timestamp Offset になります。 Timestamp Offset フィールドは、日付、時刻、および UTC 値からのオフセットを指定できます。
  • BLOBフィールド タイプが BLOB になります。 BLOB フィールドには、長いバイナリ数値列として格納されるデータを指定できます。 BLOB フィールドにアイテムを読み込む、または BLOB フィールドの内容を参照するには、カスタム ローダー、カスタム ビューアー、またはサードパーティ アプリケーションが必要です。
  • GUIDフィールド タイプが GUID になります。 GUID フィールドには、中括弧 ({}) で囲まれた 36 文字のレジストリ形式の文字列が格納されます。
  • RASTERフィールド タイプがラスターになります。 ラスター フィールドでは、ラスター データをジオデータベースの内部またはジオデータベースと一緒に格納できます。 ArcGIS ソフトウェアでサポートされているラスター データセット形式はすべて格納できますが、小さい画像のみを使用することをお勧めします。
String
enforce_domains
(オプション)

フィールド ドメイン ルールが適用されるかどうかを指定します。

  • ENFORCE_DOMAINSフィールド ドメイン ルールが適用されます。
  • NO_ENFORCE_DOMAINSフィールド ドメイン ルールは適用されません。 これがデフォルトです。
Boolean

派生した出力

名前説明データ タイプ
out_table

更新されたテーブル。

Table View; Raster Layer; Mosaic Layer

コードのサンプル

CalculateField の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで CalculateField 関数を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.AddField("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.management.CalculateField("vegtable.dbf", "VEG_TYP2", 
                                '!VEG_TYPE!.split(" ")[-1]', "PYTHON3")
CalculateField の例 2 (スタンドアロン スクリプト)

CalculateField 関数を使用して、新しいフィールドに重心の値を割り当てます。

# Name: CalculateField_centroids.py

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inFeatures = "parcels"
fieldName1 = "xCentroid"
fieldName2 = "yCentroid"
fieldPrecision = 18
fieldScale = 11
 
# Add fields
arcpy.management.AddField(inFeatures, fieldName1, "DOUBLE", 
                          fieldPrecision, fieldScale)
arcpy.management.AddField(inFeatures, fieldName2, "DOUBLE", 
                          fieldPrecision, fieldScale)
 
# Calculate centroid
arcpy.management.CalculateField(inFeatures, fieldName1, 
                                "!SHAPE.CENTROID.X!",
                                "PYTHON3")
arcpy.management.CalculateField(inFeatures, fieldName2, 
                                "!SHAPE.CENTROID.Y!",
                                "PYTHON3")
CalculateField の例 3 (スタンドアロン スクリプト)

CalculateField 関数とコード ブロックを使用して、範囲に基づいて値の演算を行います。

# Name: CalculateField_ranges.py

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"

codeblock = """
def getClass(area):
    if area <= 1000:
        return 1
    if area > 1000 and area <= 10000:
        return 2
    else:
        return 3"""
 
# Run AddField
arcpy.management.AddField(inTable, fieldName, "SHORT")
 
# Run CalculateField 
arcpy.management.CalculateField(inTable, fieldName, expression, "PYTHON3", 
                                codeblock)
CalculateField の例 4 (スタンドアロン スクリプト)

CalculateField 関数を使用して、新しいフィールドにランダム値を割り当てます。

# Name: CalculateField_Random.py

# Import system modules
import arcpy
import random
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "random.randint(0, 10)"
code_block = "import random"
 
# Run AddField
arcpy.management.AddField(inFeatures, fieldName, "LONG")
 
# Run CalculateField 
arcpy.management.CalculateField(inFeatures, fieldName, expression, "PYTHON3", 
                                code_block)
CalculateField の例 5 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで CalculateField 関数と Arcade を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data/fgdb.gdb"
arcpy.management.CalculateField("data", "new_value", "$feature.value1 + $feature.value2", "ARCADE")
CalculateField の例 6 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで CalculateField 関数と SQL を使用する方法を示しています。

import arcpy
feature_service = "<a feature service url>"
arcpy.management.CalculateField("data", "NEW_VALUE", "SAMPLE * (BASELINE - 40)", "SQL")

環境

特殊なケース

フィールド ドメインの説明を転送

この環境が有効な場合、関連するドメインを持つすべてのフィールドは、フィールドの値の代わりにドメインの説明を使用します。 ドメインを持たないフィールドの値は影響を受けません。

ライセンス情報

  • Basic: Yes
  • Standard: Yes
  • Advanced: Yes

関連トピック