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

#python #pandas

Вопрос:

IMDB Я скачал изображения с imdb, и я хочу сопоставить изображения с идентификатором imdb, который у меня есть, в формате csv, чтобы создать фрейм данных. Для каждого изображения я хочу проверить имя файла и проверить, содержит ли мой набор данных часть имени файла. Мои файлы-jpg и jpeg. У меня может быть несколько изображений для фильма. Например, имена изображений могут следовать следующему шаблону:

  1. tt0000574.jpg
  2. tt0000574.jpeg
  3. tt0000574_2.jpg
  4. tt0000574_4.jpeg

Я здесь просто интересуюсь 9 первыми символами. этот фрагмент кода не делает ничего особенного, кроме печати.

 for filename in os.listdir(directory):
    print(filename[:9])
    if(df_temp['imdb_title_id'].str.contains(filename)):
        print(df_temp['imdb_title_id'])
        print (filename)
        print("--------------")
        continue
     else:
        continue
 

Я также попытался использовать фильтр: df_temp[df_temp[‘imdb_title_id’].str.содержит(имя файла)] на основе ответов, которые я нашел в stackoverflow.
Моя проблема заключается в ошибке ответа, которую я получаю:
Ошибка значения: Значение истинности кадра данных неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all().

вот как выглядит мой df введите описание изображения здесь

Комментарии:

1. как выглядит df_temp[‘imdb_title_id’]?

Ответ №1:

Вместо использования if оператора Python, который не может обрабатывать логический индекс, представляющий собой ряд, содержащий несколько значений (отсюда предупреждение о двусмысленности), вы можете использовать iterrows() итерацию по строкам и выводить содержимое по одному:

 for filename in os.listdir(directory):
    print(filename[:9])
    for row in df_temp.loc[df_temp['imdb_title_id'].str.contains(filename)].iterrows():
        print(row['imdb_title_id'])
        print (filename)
        print("--------------")