python - 删除从 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 中删除的训练图像?
解决方案
您可以在目录中创建文件列表
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 循环。
推荐阅读
- unity3d - 如何为 2d unity 项目设置 azure dev ops
- swift - Swift:从 API 获取数据的多线程问题
- python - Pandas 将 3 列的值与下一行交换
- c - C中的递归问题
- java - java http请求必需的字符串参数'用户名'不存在
- node.js - AWS Lambda 使用异步代码返回 NULL
- java - 使用 if 条件与三元运算符循环,后者更快,为什么
- node.js - 在nodejs中创建原子函数
- html - QWebengineView:用id打开本地文件
- visual-studio-code - 如何区分输出面板和其他 activeTextEditor?