Давайте сделаем один шаг за раз:
md['genres'].fillna('[]')
Эта строка заполняет все экземпляры NA
или NaN
в серии с '[]'
.
.apply(literal_eval)
Это относится literal_eval()
из пакета ast
. Из того факта, что значения NA
были заменены на '[]'
, можно предположить, что исходная серия содержит строковые представления списков, поэтому literal_eval
используется для преобразования этих строк в списки.
.apply(lambda x: [i['name'] for i in x] if isinstance(x, list) else [])
Эта лямбда-функция применяет следующую логику c: если значение является списком, сопоставьте со списком, содержащим значения ['name']
для каждого элемента в списке, в противном случае сопоставьте с пустым списком.
Результат следовательно, полной функцией является отображение каждого элемента в серии, которая в исходном DF является строковым представлением списка, в список значений ['name']
для каждого элемента в этом списке. Если элемент не является списком или NA
, он отображается в пустой список.