python人工智能的数据集预处理

2024-03-29 07:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用keras库对我的数据进行预处理,这是在将照片预先定义到带有分类的文件夹的初始步骤之后。我不想手工做,所以我自己做了脚本,但它不工作,有人能帮我调试吗? 它没有给出一个具体的错误,但它只是没有完成工作,并在photoISIC_0000006处停止。wah是指如果照片被归类为癌症,yay是指如果照片被归类为良性癌症。如果数据集不好,则返回1;如果数据集正常,则返回0。我还是不知道这个问题。
This是我正在使用的数据集。你知道吗

顺便说一下,我还只是个孩子,所以请不要指望我对编程了解太多。你知道吗

来自数据集的采样线:

ISIC_0000000 = 0
ISIC_0000001 = 0
ISIC_0000002 = 1
ISIC_0000003 = 0
ISIC_0000004 = 0
ISIC_0000005 = 1

我的代码:

import pandas as pd
import os
dataset = pd.read_csv('ISIC-2017_Training_Part3_GroundTruth.csv')
dataset = dataset.iloc[:, :-1]
x = 0
xb = 0
xm = 0
prevName = 'ISIC_0000000.jpg'
newName = 'yay/benign1'
while(x <= 1500):
    x = x + 1
    if prevName == dataset.iloc[x-1, 0] + '.jpg':
        if x < 10:
            prevName = 'ISIC_000000' + str(x-1) + '.jpg'
            if prevName == 'ISIC_0000005.jpg': #dataset has random hole so skips over
                x = x + 1
                prevName = 'ISIC_0000006.jpg'
        elif x < 100: 
            prevName = 'ISIC_00000' + str(x-1) + '.jpg'
        elif x < 1000:
            prevName = 'ISIC_0000' + str(x-1) + '.jpg'
        else:
            prevName = 'ISIC_000' + str(x-1) + '.jpg'
        if dataset.iloc[x-1, 1] == 1:
            xm = xm + 1
            newName = 'melanoma' + str(xm)
        else:
            xb = xb + 1
            newName = 'benign' +  str(xb)
        if newName == 'benign' +  str(xb):
            newName = 'yay/' + newName + '.jpg'
            os.rename(prevName, newName)
        else:
            newName = 'wah/' + newName + '.jpg'
            os.rename(prevName, newName)
        prevName = 'ISIC_000000' + str(x+1) + '.jpg'

编辑!!!这是我的新代码,这要感谢Abhineet Gupta,它能够更进一步地遍历数据集,但奇怪的是,它停在了照片34处:

import pandas as pd
import os
dataset = pd.read_csv('_ISIC-2017_Training_Part3_GroundTruth.csv')
dataset = dataset.iloc[:, :-1]
x = 0
xb = 0
xm = 0
prevName = 'ISIC_0000000.jpg'
newName = 'yay/benign1'
while(x <= 1500):
    x = x + 1
    prevName = 'ISIC_' +  str(x).zfill(7) + '.jpg'
    if prevName == dataset.iloc[x-1, 0] + '.jpg':
        if x == '0000005':
            x = x + 1
            prevName = 'ISIC_000006.jpg'
        if dataset.iloc[x-1, 1] == 1:
            xm = xm + 1
            newName = 'melanoma' + str(xm)
        else:
            xb = xb + 1
            newName = 'benign' +  str(xb)
        if newName == 'benign' +  str(xb):
            newName = 'yay/' + newName + '.jpg'
            os.rename(prevName, newName)
        else:
            newName = 'wah/' + newName + '.jpg'
            os.rename(prevName, newName)
        prevName = 'ISIC_000000' + str(x+1) + '.jpg'

最后一次编辑:原来不是代码错误,只是.csv文件搞乱了。感谢Abhineet Gupta和mrk提供的解决方案!!!你知道吗


Tags: csv数据ifoselsedatasetjpgyay
2条回答

根据上述代码,错误似乎出现在以下代码部分-

11:     x = x + 1
12:     if prevName == dataset.iloc[x-1, 0] + '.jpg':
13:         if x < 10:
14:             prevName = 'ISIC_000000' + str(x-1) + '.jpg'
15:             if prevName == 'ISIC_0000005.jpg':
16:                 x = x + 1
17:                 prevName = 'ISIC_0000006.jpg'
...
36:         prevName = 'ISIC_000000' + str(x+1) + '.jpg'

所以,如果x == 5prevName == 'ISIC_0000005.jpg'

第11行赋值x -> 6

第12行和第13行是true

第14行赋值prevName -> 'ISIC_0000005.jpg'

第15行是true

第16行和第17行分配x -> 7prevName -> 'ISIC_0000006.jpg'

然后,if语句外的第36行(最后一行)将赋值prevName -> 'ISIC_0000008.jpg'

循环重新启动时,第11行分配x -> 8

第12行是false,程序一直持续到x > 1500,不进入if块。你知道吗

要修复代码,我建议使用 str(x).zfill(7)用前导零填充整数,例如,for x = 5返回'0000005',for x = 95返回'0000095'。这将消除根据x中的位数指定前导零的需要,并简化代码。你知道吗

因为您正在读取以csv作为分隔符的'='文件,所以您必须在加载时指定它,至少这是我在尝试运行代码时遇到的错误。你知道吗

尝试将您的行更改为:

dataset = pd.read_csv('ISIC-2017_Training_Part3_GroundTruth.csv', sep = '=')

有了这个更改,代码将在您提供的整个csv文件中为我运行。你知道吗

注意:您应该查看的图像增强库可以找到here。你知道吗

相关问题 更多 >