python - python AI 的数据集预处理

标签 python pandas csv deep-learning dataset

在将照片预定义到带有分类的文件夹中的初始步骤之后,我正在使用 keras 库来预处理我的数据。我不想手动执行此操作,因此我制作了自己的脚本,但它不起作用,有人可以帮助调试它吗? 它不会给出具体错误,但它只是没有完成工作并在照片 ISIC_0000006 处停止。 wah 表示照片是否属于癌症,yay 表示照片是否属于良性癌症。如果数据集不好,则返回 1;如果正常,则返回 0。我还是不知道问题所在。
This是我正在使用的数据集。

顺便说一句,我还只是个 child ,所以请不要指望我对编程了解太多。

数据集中的样本行:

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 提供的解决方案!!!

最佳答案

根据上面的代码,错误似乎发生在以下代码部分 -

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 block 。

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

关于python - python AI 的数据集预处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957439/

相关文章:

python - 根据条件更改 matplotlib 的刻度标签的颜色

python - 在 Pandas 的数据框中查找前 10 名

python-3.x - 如何在此 DataFrame 上应用函数以将日期更改为所需格式并避免 '0' 和 '-'

html - 如何使用imacros提取文本?

shell - Neo4j - 通过 Neo4jShell 将密码查询文件结果导出到 .csv 或 .txt 文件

python - 使用 csv.dictreader python 读取/写入同一文件

python - Python3 安装中缺少 Numpy 模块

python - sklearn 中时间序列数据的交叉验证

python - 使用 Pandas str.split 和不同长度的逗号分隔字符串

python - 如何将以 24 作为小时值的日期/时间字符串转换为 Pandas 中的日期时间?