将多维列表分配给Pandas Dataframe单元格

7gyucuyw  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(177)

我已经设置了一个包含图像路径的Pandas Dataframe,我需要向其中添加一列,其中每个单元格都应该包含一个多维数组(表示该图像)。
下面是一个例子:

import pandas as pd
import numpy as np

df = pd.DataFrame(data=[["test.png","dog.png"],[3,4]], columns=["path","B"])
# creating a new empty column
df = df.assign(image=np.nan)
image = # reading image path from row 1
df.iloc[1, df.columns.get_loc("image")] = image

但我不断得到错误:ValueError: Must have equal len keys and value when setting with an ndarray.
我该如何解决这个问题?我已经尝试过跟踪this,但它对我不起作用。
需要说明的是,在我的真实 Dataframe 中,第n行的image字段取决于第n行的path的值。
预期结果:

path         B  image
0  "test.png"   2    NaN
1  "dog.png"    4  [[1,2,...], [255,255,...], ...]
xqkwcwgp

xqkwcwgp1#

使用PIL.Image模块获取可转换为数组的图像对象:

from PIL import Image

df = pd.DataFrame({'path': ["stackoverflow-icon.png", "../images/wall.jpg"],
                   'B': [3, 4]})
df['image'] = df.apply(lambda x: np.asarray(Image.open(x['path'])), axis=1)

print(df)

输出示例:

path  ...                                              image
0                       stackoverflow-icon.png  ...  [[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0...
1                           ../images/wall.jpg  ...  [[[81, 127, 213], [87, 132, 213], [83, 127, 20...

[2 rows x 3 columns]

相关问题