You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Pandas DataFrame单元格赋值多维数组?解决赋值报错问题

解决Pandas中给单元格赋值图片多维数组的报错问题

问题背景

我有一个包含图片路径的Pandas DataFrame,需要新增一列存储对应图片的多维数组。尝试了以下代码:

import pandas as pd
import numpy as np

df = pd.DataFrame(data=[["test.png","dog.png"],[3,4]], columns=["path","B"])
# 创建空列
df = df.assign(image=np.nan)
image = # 读取第1行的图片路径对应的图片(如PIL/cv2读取转ndarray)
df.iloc[1, df.columns.get_loc("image")] = image

执行时持续报错:

ValueError: Must have equal len keys and value when setting with an ndarray

实际需求是每行的image字段对应本行path字段的图片数组,期望结果如下:

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

错误原因

直接用iloc给单元格赋值多维数组时,Pandas会默认将数组视为待填充的序列,尝试匹配行/列长度,而非将整个数组作为单个对象存入单元格,从而触发长度不匹配的报错。

解决方案

方法1:apply逐行批量处理(推荐)

定义图片读取函数,通过apply遍历每行生成对应数组:

import pandas as pd
import numpy as np
from PIL import Image

# 修正DataFrame初始化(原数据结构应为每行一个样本)
df = pd.DataFrame(data=[["test.png", 2], ["dog.png", 4]], columns=["path", "B"])

# 定义图片读取函数,失败时返回NaN
def load_image(row):
    try:
        img = Image.open(row["path"])
        return np.array(img)
    except Exception:
        return np.nan

# 新增image列并赋值
df["image"] = df.apply(load_image, axis=1)

方法2:at/iat单个单元格赋值(适合单条修改)

用at(按标签)或iat(按位置)替代iloc,直接将数组作为单个对象存入单元格:

import pandas as pd
import numpy as np
from PIL import Image

df = pd.DataFrame(data=[["test.png", 2], ["dog.png", 4]], columns=["path", "B"])
df["image"] = np.nan

# 读取目标图片并转为数组
img = Image.open(df.loc[1, "path"])
img_array = np.array(img)

# 按位置赋值
df.iat[1, df.columns.get_loc("image")] = img_array
# 或按标签赋值:df.at[1, "image"] = img_array

内容的提问来源于stack exchange,提问作者Daniele Affinita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:31:09