匹配IMDb文件名到DataFrame列时出现真值模糊错误如何解决
报错原因
- 你调用
df_temp['imdb_title_id'].str.contains()返回的是布尔类型的Series,if语句无法直接对Series的整体真值做判断,才会触发ValueError - 你的匹配逻辑有误:要求取文件名前9位匹配,但现有代码直接传入了完整文件名做匹配,不符合业务要求
os.listdir会读取目录下所有类型的文件,未做图片格式过滤,可能会匹配到无效文件
修复后的代码(循环版本,兼容你原有写法逻辑)
import os import pandas as pd valid_suffix = ('.jpg', '.jpeg') mapping_list = [] for filename in os.listdir(directory): # 过滤非图片文件 if not filename.lower().endswith(valid_suffix): continue # 提取文件名前9位作为匹配ID match_id = filename[:9] # 用.any()判断是否存在匹配项 if df_temp['imdb_title_id'].str.contains(match_id).any(): mapping_list.append({ 'imdb_title_id': match_id, 'image_file': filename }) # 生成最终映射DataFrame df_image_mapping = pd.DataFrame(mapping_list)
更高效的优化版本(无需逐行判断,用集合匹配速度提升明显,适合文件量较大的场景)
import os import pandas as pd # 先把已存在的ID转成集合,O(1)速度匹配 exist_id_set = set(df_temp['imdb_title_id'].tolist()) valid_suffix = ('.jpg', '.jpeg') mapping_list = [ {'imdb_title_id': filename[:9], 'image_file': filename} for filename in os.listdir(directory) if filename.lower().endswith(valid_suffix) and filename[:9] in exist_id_set ] df_image_mapping = pd.DataFrame(mapping_list)
内容的提问来源于stack exchange,提问作者davidvera
相关产品推荐
相关产品推荐

