Python 3.x 将包含像素值的csv文件转换为';s等价图像

Python 3.x 将包含像素值的csv文件转换为';s等价图像,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,这是我第一次使用这样的数据集。 我有一个.csv文件,其中包含图像的像素值(48x48=2304列),它们的标签在第一列中,像素在后续列中,如下所示: 我想将这些像素转换成它们的图像,并将它们存储到对应于各自标签的不同目录中。现在我已经尝试了发布的解决方案,但它似乎对我不起作用 以下是我试图做的: labels = ['Fear', 'Happy', 'Sad'] with open('dataset.csv') as csv_file: csv_reader = csv.reade

这是我第一次使用这样的数据集。 我有一个.csv文件,其中包含图像的像素值(48x48=2304列),它们的标签在第一列中,像素在后续列中,如下所示:

我想将这些像素转换成它们的图像,并将它们存储到对应于各自标签的不同目录中。现在我已经尝试了发布的解决方案,但它似乎对我不起作用

以下是我试图做的:

labels = ['Fear', 'Happy', 'Sad']

with open('dataset.csv') as csv_file:
    csv_reader = csv.reader(csv_file)

    fear = 0
    happy = 0
    sad = 0

# skip headers
    next(csv_reader)

    for row in csv_reader:

        pixels = row[1:] # without label
        pixels = np.array(pixels, dtype='uint8')
        pixels = pixels.reshape((48, 48))
        image = Image.fromarray(pixels)

        if csv_file['emotion'][row] == 'Fear':
            image.save('C:\\Users\\name\\data\\fear\\im'+str(fear)+'.jpg')
            fear += 1

        elif csv_file['emotion'][row] == 'Happy':
            image.save('C:\\Users\\name\\data\\happy\\im'+str(happy)+'.jpg')
            happy += 1
    
        elif csv_file['emotion'][row] == 'Sad':
            image.save('C:\\Users\\name\\data\\sad\\im'+str(sad)+'.jpg')
            sad += 1
但是,在运行上述代码块时,我得到的错误消息如下:

Traceback (most recent call last):

  File "<ipython-input-11-aa928099f061>", line 18, in <module>
    if csv_file['emotion'][row] == 'Fear':

TypeError: '_io.TextIOWrapper' object is not subscriptable
回溯(最近一次呼叫最后一次):
文件“”,第18行,在
如果csv_文件['emotion'][行]=='Fear':
TypeError:“\u io.TextIOWrapper”对象不可订阅
我参考了一堆解决上述错误()的帖子,但我发现人们正在尝试解决一个与我和其他我不理解的问题相对不同的问题。 这可能是一个非常琐碎的问题,但正如我前面提到的,这是我第一次使用这样的数据集。请告诉我我做错了什么,以及如何修复我的代码。

试试看-

if str(row[0]) == 'Fear':
对于其他条件,采用类似的方式:

elif str(row[0]) == 'Happy':
elif str(row[0]) == 'Sad':

(一个好的做法是将数组的第一个值保存为变量)

出现的第一个问题是第一行只是列名。为了解决这个问题,我使用了
skiprows
参数,如下所示:

raw=pd.read\u csv('dataset.csv',skiprows=1)

其次,我将labels列移到了末尾,因为它位于第一列中。为了我自己的方便

第三,在所有准备工作完成后,数据集不会遍历整行,而是只接受第一行和第一列的值,这就给了调整大小带来了问题。因此,我改为使用
df.itertuples()
,如下所示:

用于数据中的行。itertuples(index=False,name='Pandas'):

最后,多亏@HadarM的建议,我才得以让它发挥作用

上述代码段的修改代码是有问题的块:

for row in data.itertuples(index = False, name = 'Pandas'):

    pixels = row[:-1] # without label
    pixels = np.array(pixels, dtype='uint8')
    pixels = pixels.reshape((48, 48))
    image = Image.fromarray(pixels)

    if str(row[-1]) == 'Fear':
        image.save('C:\\Users\\name\\data\\fear\\im'+str(fear)+'.jpg')
        fear += 1

    elif str(row[-1]) == 'Happy':
        image.save('C:\\Users\\name\\data\\happy\\im'+str(happy)+'.jpg')
        happy += 1
    
    elif str(row[-1]) == 'Sad':
        image.save('C:\\Users\\name\\data\\sad\\im'+str(sad)+'.jpg')
        sad += 1

print('done') 

始终以文本形式提供,包括代码、数据、错误、当前输出和预期输出,而不是屏幕截图,因为。这个问题很可能会被否决并结束。您不希望获得帮助,因为没有人想重新键入您的数据或代码,而且屏幕截图通常难以辨认。问题和添加文本。我已经解决了这个问题。谢谢你的意见——下次我在这里提问时,我会记住这些要点。(尽管不包括数据集的截图,我的问题包含了你提到的所有内容,我想)非常感谢你的回答。虽然这不是一件完整的事情,但它确实帮助了很多人!我投了更高的票,但由于