猿问

枚举 Pandas 数据框后,字典条目都相同

我正在使用 enumerate 获取每行的行号以用作image_id但它一直返回行的长度而不是索引。


def get_detectron_format(self):

  """Returns the dataset in the Detectron2 list(dict) format"""

  csv = self.get_data_csv()

  dataset_dicts = []

  record = dict()

  for i, (index, data) in enumerate(csv.iterrows()):

    record['file_name'] = os.path.join(self.data_root, data['Path'])

    record['image_id'] = i

    record['height'] = data['Height']

    record['width'] = data['Width']

    

    objs = []

    obj= {

      'bbox': [data['Roi.X1'], data['Roi.Y1'], data['Roi.X2'], data['Roi.Y2']],

      'bbox_mode': BoxMode.XYXY_ABS,

      'category_id': data['Roi.X1'] - 1,

      'iscrowd': 0

    }

  

    objs.append(obj)

    record['annotations'] = objs

    dataset_dicts.append(record)

  return dataset_dicts

当我打印出数据集中的第一项时:


gtsr = GTSR_Dataset()

dataset = gtsr.get_detectron_format()[0]

print(dataset)

我得到:


{

'file_name': '/content/drive/My Drive/Datasets/german_traffic_sign_recognition/Train/42/00042_00007_00029.png', 

'image_id': 39208, 

'height': 69, 

'width': 68, 

'annotations': [{'bbox': [7, 6, 62, 63], 

                 'bbox_mode': <BoxMode.XYXY_ABS: 0>, 

                 'category_id': 6, 

                 'iscrowd': 0}]}

..image_id应该在哪里0。为什么是这样?如何获取行号(索引)?


呼如林
浏览 128回答 2
2回答

慕田峪9158850

字典在 for 循环(第 5 行record:)之前被初始化。同一条记录被多次更新。这将需要在 for 循环内移动。record = dict()完成后dataset_dicts.append(record),将附加相同的记录地址,dataset_dicts因此基本上您有最后一条记录的多个条目。

守候你守候我

使用objs.append(obj.copy())这将存储数据而不是id(obj)您的问题将得到解决。
随时随地看视频慕课网APP

相关分类

Python
我要回答