Когда вы вызываете метод Apply, ваша функция, переданная в качестве параметра, будет вызываться один раз для всех данных, содержащихся в определенном столбце вашего CSV, используемого для вызова функции Apply, причем ее параметр соответствует самим данным.Например:
Если мой CSV выглядит следующим образом:
+-----+-----------+
| id | name |
+-----+-----------+
| 1 | Action |
+-----+-----------+
| 2 | Adventure |
+-----+-----------+
При каждом вызове вашей функции дата будет передана в виде строки, поэтому, если я вызову
x["name"].Apply(func)
func будет вызываться 2 раза с параметрами Action и Adventure в виде строки, и вы будете строкой для итерации этой строки (k
), передавая строку в качестве индекса, отсюда и ошибка.Если я правильно понял, у вас есть CSV, представляющий строковое представление словаря, поэтому вам придется преобразовать его, используя встроенную библиотеку ast
, а затем прочитать каждый элемент dict.Попробуйте это:
import pandas
import numpy
import ast
data = pandas.read_csv('Downloads/tmdb_5000_movies.csv', sep=';')
def pipe_flatten_names(k):
genres = ast.literal_eval(k)
return '|'.join(x['name'] for x in genres)
data['genres'] = data['genres'].apply(pipe_flatten_names)
Я также изменил разделитель из файла CSV, потому что если ваш CSV отделен ',' и словарь использует ', они будут испорчены, поэтому попробуйте использовать разделителькоторый не содержится в синтаксисе dict