首页 > 解决方案 > 删除从 pandas DataFrame 中删除的图像文件

问题描述

为了准备多类 CNN,我将一些数据从 csv 文件读入到 Pandas DataFrame。然后我从 DataFrame 中删除了不需要的列。仅保留标签列Retinopathy grade和图像列。Image name

idrid.head()

    Image name  Retinopathy grade
0   IDRiD_001   3
1   IDRiD_002   3
2   IDRiD_003   2
3   IDRiD_004   3
4   IDRiD_005   4

我重命名该Image name列,使其以 .jpg 结尾

idrid['Image name'] = idrid['Image name'].apply(lambda x : "{}{}".format(x, ".jpg"))

idrid['Image name'] = idrid['Image name'].astype(str)

idrid.head()

mage name   Retinopathy grade
0   IDRiD_001.jpg   3
1   IDRiD_002.jpg   3
2   IDRiD_003.jpg   2
3   IDRiD_004.jpg   3
4   IDRiD_005.jpg   4

我从 DataFrame 中删除了所有包含视网膜病变等级 0 的行,只留下视网膜病变等级 1、2、3 和 4。

idrid = idrid[idrid['Retinopathy grade'] !=0]

列中表示的相应火车图像为Image name.png 格式,并且与包含 idris DataFrame 的笔记本位于同一工作目录中。不过可以肯定的是,图像文件路径是:

/Users/myname/courses/phase_5/capstone/IDRiD-Data/Original_Images/Traing_set

如何删除该目录中已从 idrid DataFrame 中删除的训练图像?

标签: pythonpandasimagedataframedirectory

解决方案


您可以在目录中创建文件列表

mypath = /Users/myname/courses/phase_5/capstone/IDRiD-Data/Original_Images/Traing_set

使用

from os import listdir
from os.path import isfile, join
allfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

过滤掉当前数据框中不存在但存在于列表 allfiles 中的图像,使用,

to_be_kept = dataframe['Image name'].tolist()
to_be_deleted = [item for item in allfiles if item not in to_be_kept ]

现在遍历列表 to_be_deleted 中的所有图像

os.remove()

如下所示。

import os
for file in to_be_deleted:
    os.remove(join(mypath, file))

为了避免所有额外的工作,您可以将图像名称保存到视网膜病变等级 == 0 的列表中,然后从那里删除它们。

在这种情况下,您无需执行任何操作,只需为 os.remove(file) 运行最后一个 for 循环。


推荐阅读