使用Pandas筛选CSV指定值时isin()函数失效问题求助
解决Pandas筛选动漫流派无效的问题
问题根源
你遇到的问题是因为数据集里的genre列存储的是字符串格式的列表(比如"['Action', 'Comedy']"),而非真正的Python列表类型。直接用isin()会把整个字符串当作匹配对象,自然找不到单个流派的匹配项。
修复步骤
1. 转换genre列的数据类型
使用ast.literal_eval()把字符串格式的列表转为真正的列表:
import pandas as pd import ast df = pd.read_csv('animes.csv') # 转换genre列的字符串为列表 df['genre'] = df['genre'].apply(ast.literal_eval)
2. 正确筛选包含目标流派的数据
因为每个单元格是列表,需要检查目标流派是否存在于该列表中,用apply()结合any()实现:
genre = True genre_list = [] while genre: genre_input = input("What genres would you like to watch?, input \"done\" when done listing!\n") if genre_input == "done": genre = False else: genre_list.append(genre_input.strip()) # 去除输入的空格避免干扰 print(genre_list) # 筛选包含任意目标流派的行 df_genre = df[df['genre'].apply(lambda x: any(g in x for g in genre_list))] print(df_genre)
额外优化建议
可以统一大小写避免匹配失败:
# 把数据集里的流派转为小写 df['genre'] = df['genre'].apply(lambda x: [g.lower() for g in x]) # 输入时同步转小写 genre_list.append(genre_input.strip().lower())
内容的提问来源于stack exchange,提问作者Kream123
相关产品推荐
相关产品推荐

