Сохранение вывода цикла for в столбец df

#python #pandas #dataframe #for-loop

Вопрос:

Заранее благодарю вас за вашу помощь. Я новичок в Python, поэтому заранее прошу прощения за невежество. Я пытаюсь извлечь конкретные данные exif из каталога, в котором в конечном итоге будут тысячи изображений. Я хочу вытащить определенный текстовый элемент (модель камеры) и поместить его в столбец df. В другом столбце df этого df будет храниться имя файла соответствующего изображения. На данный момент я могу заставить марку камеры печатать в виде списка внутри цикла for. Есть ли простой способ записать это непосредственно в этот фрейм данных?

 for x in df.Filename:
    image = Image.open(x)
    exifdata = image.getexif()
    exif = {
        PIL.ExifTags.TAGS[k]: v
        for k, v in image._getexif().items()
        if k in PIL.ExifTags.TAGS
    }
    y=(exif.get('Make'))
    
    print(y)
 

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

1. Вы можете хранить результаты каждого прохода в простом списке. Затем после цикла вы можете преобразовать свой список в столбец df.

Ответ №1:

Подумайте о том, чтобы переписать свой процесс как метод и вызвать его с Series.apply помощью (скрытый цикл). Рассмотрите также возможность использования with контекстного менеджера для правильного закрытия Image объекта после использования и удаления неиспользуемых строк.

 def get_camera_make(f):
    with Image.open(f) as img:
        exif = {
            PIL.ExifTags.TAGS[k]: v
            for k, v in img._getexif().items()
            if k in PIL.ExifTags.TAGS
        }

    return exif.get('Make')
    
# ASSIGN NEW COLUMN
df["Camera_Make"] = df["Filename"].apply(get_camera_make)