Как заменить значения int объектами (PIL-изображениями) в фрейме данных?

#python #pandas #matplotlib #python-imaging-library

#python #панды #matplotlib #python-imaging-library

Вопрос:

Я хочу отобразить 4 разных изображения в виде сетки, распределенных случайным образом по 144 фрагментам (9×16). Для этого я создал случайную матрицу со 144 значениями (каждое значение может принимать число 0-3). Затем я перенес значения во фрейм данных и заменил значения на 4 разных изображения. После этого я строю изображения с помощью подзаголовков и imshow.

 matrix = np.random.randint(low=0, high=3, size=(16, 9))
df = pd.DataFrame(matrix).astype('object')

filenames = [['test1.jpg', 'test2.jpg'],
             ['test3.jpg', 'test4.jpg']]
images = [[Image.open(fn) for fn in row] for row in filenames]
dfIm = pd.DataFrame(images)

df = df.replace([0],dfIm.iloc[0,0])
df = df.replace([1],dfIm.iloc[0,1])
df = df.replace([2],dfIm.iloc[1,1])
df = df.replace([3],dfIm.iloc[1,0])
  

Но замена чисел во фрейме данных изображениями PIL вызывает ошибку утверждения. Кто-нибудь знает, как решить мою проблему? Спасибо!

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

1. Почему бы просто не передать имя файла в виде строк в ваш новый фрейм данных, а затем, когда вы перейдете к построению графика, добавьте строку, чтобы открыть каждый файл как объект PIL?

2. Я не думал об этом. Это работает хорошо, спасибо.