如果不存在引用的文件,则有效删除Pandas DataFrame中的行

时间:2019-06-30 12:05:43

标签: python pandas dataframe

我有一个Pandas DataFrame df,它有一个path列,其中包含用于分析的图像文件的路径。该数据集中的某些图像实际上并不存在,因此我需要有选择地删除图像不存在的行path

目前,我正在遍历整个数据框,并像这样重新分配它:

for index, sample in df.iterrows():
    if not os.path.isfile(sample['path']):
        df = df.drop(index)

但是,由于我的数据集包含成千上万张图像,所以这非常慢。

我还考虑过使用类似这种更普遍的问题here的方法:

df = df.drop(df[not os.path.isfile(df['path'])].index)

但是,此操作不起作用,因为os.path.isfile与Pandas DataFrame不兼容。

我觉得必须有更好的方法来解决此问题。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试在行(axis = 1)上使用.apply以获得符合条件的布尔索引:

df = df.drop(df.apply(lambda row: not os.path.isfile(row['path']), axis=1))

答案 1 :(得分:1)

我会为列表理解而不是apply()投票以提高性能,并使用输出作为布尔索引进行切片:

df[[os.path.isfile(i) for i in df['path']]]