Это df1:
indexID detail object
0 0 [{'y2': 627, 'frame': 1, 'visibility': 0, 'y1'... Pedestrian
1 3 [{'y2': 699, 'frame': 1, 'visibility': 0, 'y1'... Pedestrian
2 6 [{'y2': 852, 'frame': 1, 'visibility': 0, 'y1'... Pedestrian
3 9 [{'y2': 595, 'frame': 1, 'visibility': 0, 'y1'... Pedestrian
4 12 [{'y2': 629, 'frame': 1, 'visibility': 0, 'y1'... Pedestrian
5 14 [{'y2': 586, 'frame': 7385, 'visibility': 0, '... Pedestrian
Внимательно посмотрите на первую ячейку в «детализации»:
[{'y2': 627, 'frame': 1, 'visibility': 0, 'y1': 603, 'score': 1, 'x2': 770, 'x1': 759, 'class': 1}, {'y2': 623, 'frame': 2, 'visibility': 0, 'y1': 599, 'score': 1, 'x2': 777, 'x1': 766, 'class': 1}]
Я пытаюсь преобразовать df1 в новый фрейм данных, где каждая строкановый фрейм данных соответствует одному словарю из списка словарей в df1, сохраняя при этом indexID.
Предполагая, что функция для преобразования кадра данных была применена к первой строке df1, преобразованный кадр данных будет выглядеть следующим образом:
frame indexID x1 y1 x2 y2 score class visibility
1 0 759 603 770 627 1 1 0
2 0 766 599 777 623 1 1 0
ВНИМАНИЕ :
- Когда я печатаю кадр данных на свой терминал, он показывает, что столбец сведений представляет собой список словарей, как показано выше.Однако, когда я запускаю
type(df1['detail'][0])
, он возвращает <type 'str'>
. - В столбце сведений для каждой строки имеется намного больше двух словарей.
Что-то я пытался преобразовать строку в список словарей:
for index,row in df1.iterrows():
print ast.literal_eval(row['detail'])
Однако я получил эту ошибку:
Traceback (most recent call last):
File "main.py", line 283, in <module>
print ast.literal_eval(row['detail'])
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
Ссылка для CSV