как разбить несколько списков в столбце и создать новый фрейм данных и карту для определенного значения в python?

avatar
Engr Ali
9 августа 2021 в 06:14
101
1
0

Я работаю с фреймом данных, содержащим несколько столбцов. Один из столбцов с несколькими списками, например: [[[0.0, 0.0, 1024.0, 1024.0], [0.0, 0.0, 1024.0, 1024.0], [0.0, 0.0, 1024.0, 1024.0], [0.0, 0.0, 1024.0, 1024.0]], ['Effusion', 'Emphysema', 'Infiltration', 'Pneumothorax']]. Если вы не понимаете форму данных, найдите общий файл по ссылке на диск

Каждая строка имеет один или несколько списков списков, причем первый список указывает на первое заболевание, которое упоминается в строковом формате во втором списке и т. д.

Что я ищу:

Я хочу разделить этот столбец, чтобы создать новые столбцы для каждого заболевания, чтобы создать такой фрейм данных:

['Effusion'][[[0.0, 0.0, 1024.0, 1024.0] для каждого упомянутого заболевания. ИЛИ хотите, чтобы это было из загруженных данных кадр данных, например: img_name, class, xmin = 0.0 , ymin= 0.0, xmax = 1024, ymax = 1024

Если возможно, то выполняется итерация по всем строкам и для всех изображений и печать всех координат ограничивающей рамки на изображении, как показано ниже. ИЛИ

Я хочу создать такой фрейм данных из ссылки на загруженный файл, как вы видите в конце:

img_name  label           xmin        ymin       xmax      ymax
001       Effusion        0.0         0.0        1024      1024
001       Emphysema       0.0         0.0        1024      1024
001       Infiltration    0.0         0.0        1024      1024
001       Effusion        595.97      601.39     776.93    817.03
002       Mass            0.0         0.0        1024      1024
002       Cardiomagly     0.0         0.0        1024      1024
002       any disease     395.97      351.39     866.93    917.03
002       any disease     0.0         0.0        1024      1024

Здесь приведенный выше стиль фрейма данных изменен, так как я хочу использовать функцию разнесения данных pandas.

Вы также можете использовать свой опыт, чтобы просто согласовать их с упомянутым именем изображения и напечатать на изображении. Я загружаю образец фрейма данных здесь, по этой ссылке: Dataframe

Спасибо

Источник

Ответы (1)

avatar
mozway
9 августа 2021 в 06:20
1

Трудно дать вам точный код для запуска без минимального воспроизводимого примера, но при условии ввода:

list_of_list = [[[0.0, 0.0, 1024.0, 1024.0],
                 [0.0, 0.0, 1024.0, 1024.0],
                 [0.0, 0.0, 1024.0, 1024.0],
                 [0.0, 0.0, 1024.0, 1024.0]],
                ['Effusion', 'Emphysema', 'Infiltration', 'Pneumothorax']
               ]

Вы можете использовать zip, чтобы изменить форму списка:

list(zip(list_of_list[1], list_of_list[0]))

или

list(zip(*list_of_list[::-1]))

выход:

[('Effusion', [0.0, 0.0, 1024.0, 1024.0]),
 ('Emphysema', [0.0, 0.0, 1024.0, 1024.0]),
 ('Infiltration', [0.0, 0.0, 1024.0, 1024.0]),
 ('Pneumothorax', [0.0, 0.0, 1024.0, 1024.0])]
Engr Ali
9 августа 2021 в 07:12
0

Спасибо за ваш быстрый ответ, @mozway на самом деле, это было легко для одной строки, но для всего фрейма данных это не так просто. Я не могу сделать это для предоставленной ссылки на фрейм данных. если это невозможно, то можно ли взорвать фрейм данных, а затем преобразовать болезнь в отдельные столбцы и каждую координату, например xmin = 0,0, ymin= 0,0, xmax = 1024, ymax = 1024, в их соответствующие столбцы?

mozway
9 августа 2021 в 07:18
1

Я догадываюсь, но вы действительно не дали материала для работы. Я думаю, вы можете удалить свой код, поскольку он не имеет прямого отношения, и вместо этого попытаться создать осмысленный пример с ожидаемым результатом. Чем минимальным и воспроизводимым будет ваш вопрос, тем больше шансов получить хороший ответ ;)