我正在尝试调整熊猫数据框中的图像值 数据帧的每一行(图像)都包含形状为(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:
import numpy as np
import pandas as pd
images = pd.DataFrame(columns=['image'])
image = np.zeros([2, 2, 2])
images.loc[0, 'image'] = image
images = pd.concat([images] * 2)
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])
答案 0 :(得分:0)
问题出在行中
image=np.zeros([2,2,2])
和
images=pd.concat([images]*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.