Python ValueError:使用df.loc插入值列表

Python ValueError:使用df.loc插入值列表,python,pandas,dataframe,computer-vision,pytorch,Python,Pandas,Dataframe,Computer Vision,Pytorch,我有一个带有图像路径的数据帧df。我正在执行对象检测,并希望将检测到的对象的名称保存在数据帧的新列(名为objects)中 但是,当只检测到1个对象时,代码工作正常,当存在多个对象的列表时,代码会给出错误 ValueError:无法使用长度与值不同的多索引选择索引器进行设置 我认为我在数据帧中插入值的方法存在一些问题。实际上,我首先创建了一个空列,然后在objects列中使用循环插入变量 代码 train_image_paths = 'data/train_images/' + df['imag

我有一个带有图像路径的数据帧
df
。我正在执行对象检测,并希望将检测到的对象的名称保存在数据帧的新列(名为
objects
)中

但是,当只检测到1个对象时,代码工作正常,当存在多个对象的列表时,代码会给出错误

ValueError:无法使用长度与值不同的多索引选择索引器进行设置

我认为我在数据帧中插入值的方法存在一些问题。实际上,我首先创建了一个空列,然后在
objects
列中使用循环插入变量

代码

train_image_paths = 'data/train_images/' + df['image']    # train_images is the folder containing images and 
                                                          #  df['image'] contains all image paths

df['objects'] = ''     # Creating an empty column for storing detected objects

for idx, img in enumerate(train_image_paths):
    ..
    #object detection code    # Performs object detection and 
                              # stores the detected objects in a list named detected_objects
    ..
    
    df.loc[idx, 'objects'] = detected_objects   # Adding the detected objects to the dataframe
    
return df
df.info()的输出


范围索引:34250个条目,0到34249
数据列(共1列):
#列非空计数数据类型
---  ------  --------------  ----- 
0映像34250非空对象
数据类型:对象(1)
内存使用率:267.7+KB

我认为您应该创建新的列表或熊猫系列,然后将其附加到dataframe

train_image_path='data/train_images/'+df['image']#train_images是包含图像和
#df['image']包含所有图像路径
objects=[]#创建一个空列以存储检测到的对象
对于idx,枚举中的img(序列图像路径):
..
#目标检测代码#执行目标检测和
#将检测到的对象存储在名为“检测到的对象”的列表中
..
追加(检测到的对象)#将检测到的对象添加到数据帧
df['objects']=对象
返回df

以下是参考资料:

我认为您应该创建新列表或
熊猫系列
,然后将其附加到dataframe

train_image_path='data/train_images/'+df['image']#train_images是包含图像和
#df['image']包含所有图像路径
objects=[]#创建一个空列以存储检测到的对象
对于idx,枚举中的img(序列图像路径):
..
#目标检测代码#执行目标检测和
#将检测到的对象存储在名为“检测到的对象”的列表中
..
追加(检测到的对象)#将检测到的对象添加到数据帧
df['objects']=对象
返回df
以下是参考资料:

与自定义函数一起使用:

def func(x):
    train_image_paths = 'data/train_images/' + x
    #object detection code 
    return detected_objects


df['objects'] = df['image'].apply(func)
与自定义功能一起使用:

def func(x):
    train_image_paths = 'data/train_images/' + x
    #object detection code 
    return detected_objects


df['objects'] = df['image'].apply(func)

我认为您应该创建一个新列表或
Pandas Series()
,然后将其附加到数据框中。您能在回答部分实现这一点吗?我尝试了多种方法来处理一个或另一个错误。什么是
print(df.info())
?@jezrael我已经添加了输出。这是原始数据框,我在其中创建了一个空列,并尝试按行存储检测到的输出。我认为您应该创建一个新列表或
Pandas Series()
,然后将其附加到数据框中。您能在回答部分实现这一点吗?我尝试了多种方法来处理一个或另一个错误。什么是
print(df.info())
?@jezrael我已经添加了输出。这是原始数据帧,我在其中创建了一个空列,并尝试按行存储检测到的输出。