#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)