I need the information of the FID column from a shapefile. Somehow that column is not "shown" when you load shapefile. I need the information of that column because I need to say something like: fid id label 1 1 forest 2 1 forest 3 2 water 4 2 water 5 3 urban I need to know which fids belong to ids X,Y,Z, etc. I tried the following in geopandas. Is there a more efficient way of doing it using geopandas or OGR from osgeo? Thanks import os import geopandas as gpd import numpy as np from osgeo import ogr # open the training data train_cl_fn = os.path.join(src, "train.shp") # read the column "id" that already exists. This id column says that feature X belongs to id Y X_train_G = gpd.read_file(train_cl_fn) class_ids = X_train_G["id"].unique() print('class ids: ', class_ids) # I create an empty array for the fids class_fids = np.array([]) print('class labels: ', class_fids) # add "fidl" column, using "id" and the empty array # FID and fid are the same, therefore "fidl" X_train_G['fidl'] = X_train_G['id'].map(dict(zip(class_ids, class_fids))) print(X_train_G.head()) # export: rewrite file X_train_G.to_file(os.path.join(src, "train.shp")) # open the SAME file again, this time in ogr train_cl_fn = os.path.join(src, "train.shp") driver = ogr.GetDriverByName('ESRI Shapefile') train_ds = driver.Open(train_cl_fn, 1) # 0 means read-only. 1 means writeable. layer = train_ds.GetLayer() for Ft in layer: ThisID = int(Ft.GetFID()) #print('id is {}'.format(ThisID)) Ft.SetField('fidl',ThisID) # Write the FID to the fidl field layer.SetFeature(Ft) # update the feature dataSource = None # save/rewrite file with fid info in the fidl column Continue reading...