Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种简单的方法可以在数据帧上广播许多新的栏目?_Python_Pandas_Numpy - Fatal编程技术网

Python 有没有一种简单的方法可以在数据帧上广播许多新的栏目?

Python 有没有一种简单的方法可以在数据帧上广播许多新的栏目?,python,pandas,numpy,Python,Pandas,Numpy,我有一组.png图像,以及一个df_-train数据框,它有两列,图像文件的名称id_-code和图像的diagnosis。(df_列车有m行和2列) 我想创建一个新的数据框df\u train\u new,它维护m行,但添加n新列。n中的每个新列都将保存该图像的一个像素值。(df\u train\u new具有m行和(2+n)列) 我已经通过PIL编写了简单的代码来获取绿色通道的像素值,对它们进行矢量化(因此它们是n行1列),并尝试创建一个for循环(在每个图像上循环),以将这些新列添加到新的

我有一组
.png
图像,以及一个
df_-train
数据框,它有两列,图像文件的名称
id_-code
和图像的
diagnosis
。(
df_列车
m
行和
2列)

我想创建一个新的数据框
df\u train\u new
,它维护
m
行,但添加
n
新列。
n
中的每个新列都将保存该图像的一个像素值。(
df\u train\u new
具有
m
行和
(2+n)
列)

我已经通过
PIL
编写了简单的代码来获取绿色通道的像素值,对它们进行矢量化(因此它们是n行1列),并尝试创建一个for循环(在每个图像上循环),以将这些新列添加到新的数据帧中

df_train=pd.read_csv(“../train.csv”)
img_dims=6869376#每个图像的像素数
例如,在范围内(len(df#u train)):#迭代每个图像
img=Image.open(“../input/train_images/”+str(df_train.iloc[示例,0])+“.png”)#用PIL打开图像
img_green_data=np.asarray(list(img.getdata())[:,1]。重塑(img_dims,-1)。T#为每个图像创建(16869376)向量
df_train.loc[示例,2:]=img_green#现在尝试将这些列添加到数据框中!***不起作用
我得到这个错误:

ValueError:使用ndarray设置时,必须具有相等的len键和值


我明白这一定不是正确的方法,但我已经尝试了一些方法,觉得一定有一种更简单的方法来做这类事情

>P>而不是更新现有的数据帧,考虑通过从像素矩阵列表中垂直堆叠来建立一个NUMPY矩阵。然后,用浇铸矩阵连接原始数据帧。以下是未经测试的调整

df_train = pd.read_csv('../train.csv')

img_dims = 6869376 # number of pixels per image

mat_list = []
# iterate over every image
for id_code in df_train['id_code']):
    # open image with PIL
    img = Image.open("../input/train_images/" + str(id_code) + ".png")
    # create (1, 6869376) vector for every image
    img_green_data = (np.asarray(list(img.getdata()))[:,1]
                        .reshape(img_dims,-1)
                        .transpose()
                     )
    # APPEND TO LIST
    mat_list.append(img_green_data)

final_df = pd.concat([df_train,
                      pd.DataFrame(np.vstack(mat_list))],
                     axis = 'columns')

<> P>而不是更新现有的数据帧,考虑通过从像素矩阵列表中垂直堆叠来建立一个NUMPY矩阵。然后,用浇铸矩阵连接原始数据帧。以下是未经测试的调整

df_train = pd.read_csv('../train.csv')

img_dims = 6869376 # number of pixels per image

mat_list = []
# iterate over every image
for id_code in df_train['id_code']):
    # open image with PIL
    img = Image.open("../input/train_images/" + str(id_code) + ".png")
    # create (1, 6869376) vector for every image
    img_green_data = (np.asarray(list(img.getdata()))[:,1]
                        .reshape(img_dims,-1)
                        .transpose()
                     )
    # APPEND TO LIST
    mat_list.append(img_green_data)

final_df = pd.concat([df_train,
                      pd.DataFrame(np.vstack(mat_list))],
                     axis = 'columns')

您说
img_green_data
的维度是(16869376)(尽管您可能需要检查)。
df\u-train[示例]
的维度是什么?df\u-train维度是(1,2)您说
img\u-green\u数据的维度是(16869376)(尽管您可能需要检查)。
df\U系列的尺寸是多少[示例]
?df\U系列的尺寸是(1,2)