You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas高效过滤NHL赛事DataFrame中多列含指定球员的行?

解决DataFrame多列批量筛选包含指定文本的行

首先,你的思路方向是对的,但问题出在str.contains是Series专属方法,没法直接调用在DataFrame上。我们可以通过对目标列集合逐列应用str.contains,再用any()合并每一行的判断结果,就能实现简洁的批量筛选。

可行解决方案

直接用这段代码就能完成需求:

player_name = 'DYLAN.LARKIN'
col_list = ['home_on_1', 'home_on_2', 'home_on_3', 'home_on_4', 'home_on_5', 'home_on_6', 'home_on_7', 
            'away_on_1', 'away_on_2', 'away_on_3', 'away_on_4', 'away_on_5', 'away_on_6', 'away_on_7']

# 对每一列执行包含判断,再按行取逻辑或(只要有一列符合就保留该行)
mask = ev[col_list].apply(lambda x: x.str.contains(player_name)).any(axis=1)
dboss = ev[mask]

为什么你的原代码会报错?

  • 当你写ev[col_list].str.contains()时,ev[col_list]返回的是一个DataFrame,而str属性仅属于Series(单列数据结构),所以会抛出AttributeError: 'DataFrame' object has no attribute 'str'。
  • 移除.str后,DataFrame本身并没有contains方法,自然也会触发报错。

补充优化(可选)

如果你的数据集里存在空值,可以加上na=False参数避免空值导致的异常:

mask = ev[col_list].apply(lambda x: x.str.contains(player_name, na=False)).any(axis=1)

内容的提问来源于stack exchange,提问作者jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 14:47:26