2

私は Python の初心者で、ArcGIS 10.1 (arcpy) で使用するスクリプトを作成しようとしています。基本的な考え方は、新しいフィールド (フランシス) を追加し、他のいくつかのフィールドの値をチェックし、ヌル (-99) の場合はフランシスに 0 を出力し、それ以外の場合は単純な計算を実行することです。ただし、このエラーが発生し、それを超えて移動するのに問題があります:

トレースバック (最新の呼び出しが最後):

ファイル "C:\gislab2\Python\take_home\part1\prelim_if2.py"、28 行目、arcpy.CalculateField_management(Output_Feature_Class, "Francis", "", "PYTHON_9.3", "") 内

ファイル「C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy\management.py」の 3128 行目、CalculateField で e を発生させます

ExecuteError: 実行に失敗しました。パラメータが無効です。エラー 000735: 式: 値が必要です 実行に失敗しました (CalculateField)。

これがコードです

# Import arcpy module
import arcpy

print "start your engines"
# Script arguments
Shapefile = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

Field_Name = Francis

Output_Feature_Class = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

# Local variables:
USCancer2000__2_ = Output_Feature_Class

# Process: Add Field
arcpy.AddField_management(Shapefile, "Francis", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

# Process: Calculate Field
arcpy.CalculateField_management(Output_Feature_Class, "Francis", "", "PYTHON_9.3", "")
##
### Process: If-then check for missing values
##
if "Cnt1"==-99:
    Field_name=7
elif "Cnt2"==-99:
    Field_name=7
elif "Cnt3"==-99:
    Field_name=7
elif "Pop1"==-99:
    Field_name==7
elif "Pop2"==-99:
    Field_name=7
elif "Pop3"==-99:
    Field_name=7
else:
        Field_name=("Cnt1"+"Cnt2"+"Cnt3")/("Pop1"+"Pop2"+"Pop3")
print "done"

よろしくお願いします!デビッド

4

1 に答える 1

3

の 3 番目のパラメーターarcpy.CalculateField_managementは、何を計算するかを指定します。あなたはそこに何も渡していません。テストとして、その行を に置き換えて、 arcpy.CalculateField_management(Output_Feature_Class, "Francis", 5, "PYTHON_9.3", "")評価されるかどうかを確認します。

正常に実行されたら、式とコードブロックを使用して必要な計算を行うことを検討する必要があります。ここで、範囲の計算 (3 番目) の例を参照してください

- 別 -

updateCursorを使用する方が簡単な場合もあります。calculateField を使用するよりも手間がかかるように思えますが、はるかに高速で、複雑なコードブロックを書き出す手間を省くことができます。

# Import arcpy module
import arcpy

print "start your engines"
# Script arguments
Shapefile = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

Field_Name = "Francis"

# Process: Add Field
arcpy.AddField_management(Shapefile, "Francis", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

fields = ["Cnt1", "Cnt2", "Cnt3", "Pop1", "Pop2", "Pop3", "Francis"] # the fields you want available to you in the cursor

with arcpy.da.UpdateCursor(shapefile, fields) as cursor:
    for row in cursor: # step through each row
        if not -99 in row: # Check for nulls
            # none found, do the math
            row[6] = (row[0] + row[1] + row[2]) / (row[3] + row[4] + row[5])
        else:
            # nulls found, zero out the result
            row[6] = 0
        cursor.updateRow(row) # save it

print "done"
于 2013-04-05T17:57:40.423 に答える