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)