如果在 geopandas 中使用 if 语句不存在,如何添加几个新列

How to add several new columns if not already present using if statement in geopandas

编码新手和第一次发帖所以如果有什么我没有包括在内,请告诉我。 我正在尝试向 shapefile 添加新列。我有一个所需列的列表,有时 shapefile 只会包含其中的一些列。所以我需要检查哪些存在并添加那些不存在。我尝试使用以下代码实现此目的:

import geopandas as gpd
shape = gpd.read_file("shapefile.shp")
add_fields = [['GUI',
           'POLYGON',
           'ORIG_HAB',
           'ORIG_CLASS',
           'EUNIS_L3',
           'HAB_TYPE',
           'VERSION',
           'DET_MTHD',
           'DET_NAME',
           'TRAN_COM',
           'T_RELATE',
           'VAL_COMM',
           'DataAccess',
           'Three_Step',
           'MESH_Confi']]
field_name_list = shape.columns.tolist()
for fieldToAdd in add_fields:
    if fieldToAdd not in field_name_list:
        shape.reindex(shape.columns.tolist() + fieldToAdd, axis=1)
shape.to_file("outputshapefile.shp")

当我 运行 代码时没有错误,但是 shapefile 看起来没有改变。我已经搜索了论坛以查看接下来要尝试什么,这部分是我找到 .reindex 的地方。我认为我实际上并没有添加新列,但不确定如何执行此操作。如果有人能指出我正确的方向,将不胜感激。

我想你正在寻找这样的东西:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
add_fields = ['GUI',
           'POLYGON',
           'ORIG_HAB',
           'ORIG_CLASS',
           'EUNIS_L3',
           'HAB_TYPE',
           'VERSION',
           'DET_MTHD',
           'DET_NAME',
           'TRAN_COM',
           'T_RELATE',
           'VAL_COMM',
           'DataAccess',
           'Three_Step',
           'MESH_Confi']
field_name_list = shapefile.columns.tolist()
for fieldToAdd in add_fields:
    if fieldToAdd not in field_name_list:
        #shapefile.reindex(shapefile.columns.tolist().append(fieldToAdd), axis=1)
        shapefile[fieldToAdd]=None
shapefile.to_file("outputshapefile.shp")

请注意,我已将 add_fields 更改为 1D 而不是 2D(删除了外括号) 此外,我将名称更改为 shapefile 而不是 shape,以免与 df 属性.

混淆