Pandas如何筛选含指定词汇的DataFrame行及报错处理
报错原因
str.extract()的作用是从字符串中提取匹配正则规则的子串并返回新的DataFrame/Series,要求传入的正则必须包含至少1个捕获组(即圆括号包裹的匹配片段),你传入的正则没有捕获组,同时这个方法本身也不适合用来做行筛选的布尔判断,属于方法选型错误。
你用的Netflix公开数据集中genres字段是以字符串格式存储的列表值,例如['comedy', 'romance'],要做包含判断不需要用extract,用对应方法直接做布尔筛选即可。
实现代码
快速筛选(无需转换字段格式)
直接通过字符串包含匹配筛选,注意加na=False跳过genres为空的记录,避免空值导致的判断异常:
- 筛选所有包含comedy类型的记录:
df_comedy = df[df['genres'].str.contains("'comedy'", na=False)]
- 筛选同时包含comedy和fantasy两种类型的记录:
df_comedy_fantasy = df[ df['genres'].str.contains("'comedy'", na=False) & df['genres'].str.contains("'fantasy'", na=False) ]
严谨筛选(推荐频繁按类型筛选时使用)
字符串子串匹配存在极小概率误判可能(如果存在名称包含comedy的其他分类标签),可以先把字符串格式的genres转为真正的Python列表,再做成员判断:
import ast # 转换字段格式:字符串列表转真实列表 df['genres'] = df['genres'].apply( lambda x: ast.literal_eval(x) if pd.notna(x) else [] ) # 筛选含comedy的记录 df_comedy = df[df['genres'].apply(lambda x: 'comedy' in x)] # 筛选同时含comedy和fantasy的记录 df_comedy_fantasy = df[df['genres'].apply( lambda x: 'comedy' in x and 'fantasy' in x )]
内容的提问来源于stack exchange,提问作者Ibad Ullah
相关产品推荐
相关产品推荐

