如何基于图片存在条件更新Pandas DataFrame?
解决DataFrame过滤图片存在行的问题
你循环删除只生效最后一行的原因很明确:遍历DataFrame删除行时,索引会动态变化。比如删了第i行后,后面的行自动前移补位,循环到下一个i时就会跳过原本的第i+1行,最终只能处理到最后一个缺失项。
直接用布尔掩码过滤是最靠谱的方案,步骤如下:
步骤1:导入依赖库
import pandas as pd import os
步骤2:读取labels.txt文件
假设你的labels.txt是制表符分隔的文本(如果是逗号分隔就把sep改成,):
df = pd.read_csv('labels.txt', sep='\t', names=['file_name', 'text'])
步骤3:过滤存在的图片行
不用循环删除,直接生成判断条件过滤:
# 定义判断逻辑:检查对应png文件是否存在 def has_matching_img(row): # 把labels里的.jpg替换成imgs目录里的.png后缀 img_filename = row['file_name'].replace('.jpg', '.png') # 拼接完整路径 full_path = os.path.join('imgs', img_filename) return os.path.exists(full_path) # 过滤出符合条件的行 filtered_df = df[df.apply(has_matching_img, axis=1)]
或者更简洁的一行写法:
filtered_df = df[df['file_name'].apply( lambda x: os.path.exists(os.path.join('imgs', x.replace('.jpg', '.png'))) )]
为什么这个方法靠谱?
布尔掩码会一次性生成所有行的存在判断结果,直接保留True的行,完全不会有索引错位的问题,而且比循环删除效率高得多——尤其是当DataFrame行数较多时,差距会很明显。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

