Python 调整数据帧中的图像

Python 调整数据帧中的图像,python,pandas,numpy,Python,Pandas,Numpy,我正在尝试调整数据帧中图像的值 数据帧(图像)的每一行包含一个形状(7,7,3)、7x7像素和3种颜色的图像。 因此,当我尝试调整第一幅图像的左上角像素时,如下所示: 所有其他图像(行)也会受到影响 print(images.loc[0,'image'][0][0], images.loc[1,'image'][0][0]) images.loc[0,'image'][0][0]=[1,2,3] print(images.loc[0,'image'][0][0], images.loc[1,'i

我正在尝试调整数据帧中图像的值 数据帧(图像)的每一行包含一个形状(7,7,3)、7x7像素和3种颜色的图像。 因此,当我尝试调整第一幅图像的左上角像素时,如下所示:

所有其他图像(行)也会受到影响

print(images.loc[0,'image'][0][0], images.loc[1,'image'][0][0])
images.loc[0,'image'][0][0]=[1,2,3]
print(images.loc[0,'image'][0][0], images.loc[1,'image'][0][0])

[0,0,0] [0,0,0]    
[1,2,3] [1,2,3]
这仅在调整单个像素时发生。 如果编辑整个图像,其他图像/行不会受到影响

images[0,'image']=[image]
工作正常吗

新增mvce:

将numpy导入为np
作为pd进口熊猫
images=pd.DataFrame(列=['image'])
image=np.zero([2,2,2])
images.loc[0,‘image']=image
images=pd.concat([images]*2)
图像=图像。重置索引(drop=True)
打印(images.loc[0,'image'][0][0],'\n')
image.loc[0',image'][0][0]=[1,1]
打印(images.loc[0,'image'][0][0],images.loc[1,'image'][0][0])

问题出在线路上

image=np.zeros([2,2,2])

创建单个numpy对象。此对象在最终数据帧中被引用两次。举例来说,如果显式复制对象,问题就会消失:

import copy
images=pd.DataFrame(columns=['image'])
image=np.zeros([2,2,2])
images.loc[0,'image']=image
images=pd.concat([copy.deepcopy(images), copy.deepcopy(images)]) # explicitly duplicate the object to avoid reference to the same object
images=images.reset_index(drop=True)
print(images.loc[0,'image'][0][0],'\n')
images.loc[0,'image'][0][0]=[1,1]
print(images.loc[0,'image'][0][0],images.loc[1,'image'][0][0])
编辑:要处理您的评论,如何创建多个副本,您可以尝试:

images = [np.zeros([2,2,2]) for lv in range(10000)] # create list containing independent instances of numpy arrays
images = pd.Series(images, index = range(10000))
images = images.to_frame('images')
images # should now be a dataframe containing independent numpy arrays in its 'image' column.

所以你改变了一个物体,另一个也改变了?也许,它是同一个物体。
images.loc[0,'image']是images.loc[1,'image']
@ArcoBast images.loc[0,'image']是images.loc[1,'image']是false,它的嵌套版本是什么<代码>图像。loc[0,'image'][0]是图像。loc[1,'image'][0]和
图像。loc[0,'image'][0][0]是图像。loc[1,'image'][0][0]
?@ArcoBast False和False aswell@ArcoBast我添加了一个mcveThis仍然不能为我解决它,我仍然得到[1,1][1,1]作为输出兴趣,我没有。对于不同的python版本,deepcopy的工作方式可能有所不同。请看最后一个解决方案,其中数据帧首先由独立生成的numpy数组构成。编辑方法确实适用于我,非常感谢。很高兴听到这个消息。你的mcve使帮助成为可能。通常,您可能需要重新考虑您的数据结构。将numpy数组作为pandas数据帧中的对象是不寻常的,可能会导致问题,因为pandas经常尝试将数组与数据帧本身的维度对齐。为什么不使用4维numpy数组呢?我需要将一些数据转换成图像,这样我就可以使用卷积网络进行分类。
images = [np.zeros([2,2,2]) for lv in range(10000)] # create list containing independent instances of numpy arrays
images = pd.Series(images, index = range(10000))
images = images.to_frame('images')
images # should now be a dataframe containing independent numpy arrays in its 'image' column.