
使用pandas的`str.contains()`方法搜索含多个演员名的字符串列时,若列中存在缺失值(nan),需显式设置`na=false`参数,否则会因布尔掩码无法处理nan而报错。
在电影数据集中,cast列通常以字符串形式存储多位演员姓名(例如"Leonardo DiCaprio, Kate Winslet, Billy Zane"),这种结构虽便于展示,却不利于精确查询。直接调用 df['cast'].str.contains('Leonardo DiCaprio') 会触发 Cannot mask with non-boolean array containing NA / NaN values 错误——根本原因在于:当cast列含有NaN值时,str.contains()默认返回NaN而非True/False,导致布尔索引失效。
✅ 正确做法是添加 na=False 参数,强制将所有缺失值视为 False,确保返回纯布尔数组:
# 正确:安全处理 NaN,返回严格布尔索引
actor_movies = bd[bd['cast'].str.contains('Leonardo DiCaprio', na=False)]⚠️ 注意事项:
-
大小写敏感:默认区分大小写。如需忽略大小写,补充 case=False 参数:
bd[bd['cast'].str.contains('leonardo dicaprio', case=False, na=False)] -
全名匹配风险:若演员名是子串(如搜索 'Di' 可能误匹配 'DiCaprio' 或 'Diaz'),建议添加单词边界(需正则):
bd[bd['cast'].str.contains(r'\bLeonardo DiCaprio\b', regex=True, na=False)]
- 数据清洗建议:长期维护可考虑将cast列展开为多行(使用 str.split().explode()),实现更规范的关系型查询。
总结:na=False 是处理含缺失值文本列搜索的必备参数;结合 case、regex 等参数可进一步提升检索准确性和鲁棒性。










