调整熊猫数据框中的图像

时间:2020-02-09 19:16:29

标签: 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,'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])

1 个答案:

答案 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.