删除字段 (数据管理)

摘要

可从表、要素类、要素图层或栅格数据集中删除一个或多个字段。

使用情况

    警告:

    此工具会修改输入数据。 有关详细信息以及避免数据被意外更改的策略,请参阅修改或更新输入数据的工具

  • 您可以指定要删除的字段或要保留的字段。

    • 要删除字段,请使用字段参数指定要删除的字段,并将方法参数设置为删除字段选项。
    • 要保留字段,请使用字段参数指定要保留的字段,并将方法参数设置为保留字段选项。

  • 在 ArcGIS 中,无法从只读的非原生数据格式(如 VPF 和 CAD 数据集)中删除字段。

参数

标注说明数据类型
输入表

包含要删除字段的表。 现有输入表将被修改。

Mosaic Layer; Raster Layer; Table View
字段

通过方法参数指定的要从输入表中删除或保留的字段。 仅可删除非必填字段。

Field
方法
(可选)

用于指定字段参数中指定的字段是否将被删除或保留。

  • 删除字段将删除由字段参数指定的字段。 这是默认设置。
  • 保留字段将保留由字段参数指定的字段;所有其他字段将被删除。
  • 删除字段将删除由 drop_field 参数指定的字段。 这是默认设置。
  • 保留字段将保留由 drop_field 参数指定的字段;所有其他字段将被删除。
String

派生输出

标注说明数据类型
更新输入表

已更新的数据集。

Table View; Raster Layer; Mosaic Layer

arcpy.management.DeleteField(in_table, drop_field, {method})
名称说明数据类型
in_table

包含要删除字段的表。 现有输入表将被修改。

Mosaic Layer; Raster Layer; Table View
drop_field
[drop_field,...]

通过 method 参数指定的要删除或保留的字段。 仅可删除非必填字段。

Field
method
(可选)

用于指定 drop_field 参数中指定的字段是否将被删除或保留。

  • DELETE_FIELDS将删除由 drop_field 参数指定的字段。 这是默认设置。
  • KEEP_FIELDS将保留由 drop_field 参数指定的字段;所有其他字段将被删除。
String

派生输出

名称说明数据类型
out_table

已更新的数据集。

Table View; Raster Layer; Mosaic Layer

代码示例

DeleteField 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何使用 DeleteField 函数删除指定字段。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.CopyFeatures("majorrds.shp", "C:/output/majorrds_copy.shp")
arcpy.management.DeleteField("C:/output/majorrds_copy.shp", 
                             ["STREET_NAM", "LABEL", "CLASS"])
DeleteField 示例 2(Python 窗口)

以下 Python 窗口脚本演示了如何使用 DeleteField 函数来仅保留指定字段。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.CopyFeatures("majorrds.shp", "C:/output/majorrds_copy.shp")

arcpy.management.DeleteField("C:/output/majorrds_copy.shp", 
                             ["STREET_ALIAS", "DISTRICT_ID"], "KEEP_FIELDS")
DeleteField 示例 3(独立脚本)

以下独立脚本演示了如何使用 DeleteField 函数。

# Name: DeleteField_Example3.py
# Description: Keep several fields from a feature class and delete all the rest of the fields
  
# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data"
 
# Set local variables
inFeatures = "accident.dbf"
outFeatureClass = "C:/output/new_accident.dbf"
fields = ["STREET_NAM", "LABEL", "CLASS"]
method = "KEEP_FIELDS"
 
# Run CopyFeatures to make a new copy of the feature class
#  Use CopyRows if you have a table
arcpy.management.CopyFeatures(inFeatures, outFeatureClass)
 
# Run DeleteField
arcpy.management.DeleteField(outFeatureClass, fields, method)
DeleteField 示例 4(独立脚本)

可以使用 DeleteField 函数从要素类或表中删除所有不需要的字段。

# Description: Delete unnecessary fields from a feature class or table.
 
# Import system modules
import arcpy
 
# Get user-supplied input and output arguments
inTable = arcpy.GetParameterAsText(0)
updatedTable = arcpy.GetParameterAsText(1)

# Describe the input (need to test the dataset and data types)
desc = arcpy.Describe(inTable)

# Make a copy of the input (so you can maintain the original as is)
if desc.datasetType == "FeatureClass":
    arcpy.management.CopyFeatures(inTable, updatedTable)
else:
    arcpy.management.CopyRows(inTable, updatedTable)

# Use ListFields to get a list of field objects
fieldObjList = arcpy.ListFields(updatedTable)

# Create an empty list that will be populated with field names        
fieldNameList = []

# For each field in the object list, add the field name to the
# name list. Exclude required fields to prevent errors
for field in fieldObjList:
    if not field.required:
        fieldNameList.append(field.name)

# dBASE tables require a field other than an OID and Shape. If this is
# the case, retain an extra field (the first one in the original list)
if desc.dataType in ["ShapeFile", "DbaseTable"]:
    fieldNameList = fieldNameList[1:]

# Run DeleteField to delete all fields in the field list. 
arcpy.management.DeleteField(updatedTable, fieldNameList)