根据文件夹中是否存在来自df的文件名,在df中删除行

2024-09-28 05:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含40108行的数据帧和一个包含997个文件的图片文件夹(仅使用40108个图片中的一个示例)。图像的文件名对应于df中“imdbId”列中的行,另外还有.jpg后缀。你知道吗

dataframe

我想删除df中imdbId列中的名称在我的文件夹中没有任何对应文件名的所有行,并保留其余行。这意味着在运行完代码之后应该还有997行。你知道吗

示例:

测向中的位置1是114709。文件夹中不存在名为114709.jpg的图片,这意味着应删除此行。你知道吗

测向中的位置2是113497。文件夹中存在名为113497.jpg的图片。这一行应该保留。 ... 对于所有行,依此类推。你知道吗

我一直在尝试创建一个带布尔值的索引和一个带布尔值的for/if循环os.path.isfile文件,但我无法将df中的imdbId正确地插入到任何条件中。你知道吗

我笔记本中的示例:

exists = os.path.isfile('moviegenre/SampleMoviePosters/**114709.jpg**')
if exists:
    # Do nothing, let the row remain.
else:
    # Drop row

我们将非常感谢您的帮助。提前谢谢。你知道吗


Tags: 文件数据path文件夹示例dfifos
1条回答
网友
1楼 · 发布于 2024-09-28 05:25:27

通常在数据帧is considered an antipattern的行或列上进行“迭代”,并且在循环之前有几种替代方法可供测试。你知道吗

在这种情况下,您可以apply将函数添加到“imdbid”列中,该列根据图像的存在为每个值获取truefalse。你知道吗

然后,您可以尝试删除那些没有图像的行,但是在pandas中所做的通常是获得一个新的数据帧(or a view of a dataframe),其中只包含您感兴趣的数据。你知道吗

例如:

# mkdir -p moviegenre/SampleMoviePosters/
# touch moviegenre/SampleMoviePosters/114709.jpg

import os
import pandas as pd

def image_exists(imdbid):
    filepath = f"moviegenre/SampleMoviePosters/{imdbid}.jpg"
    return os.path.isfile(filepath)

data = [[114709, 'Animation|Adventure|Comedy'], [113497, 'Action|Adventure|Family']]

df = pd.DataFrame(data, columns=['imdbid', 'Genre'])

df_with_images = df[df["imdbid"].apply(image_exists)]

相关问题 更多 >

    热门问题