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

如何过滤Pandas DataFrame中Names列含指定元素的行?解决contains报错

Pandas筛选列表列包含指定元素的行

先还原你的示例DataFrame:

import pandas as pd

data = {
    'Department': ['History', 'Economics', 'Physics'],
    'Names': [['Carl', 'Julia', 'Jens'], ['Maggie', 'Lisa', 'Jules'], ['Freddy', 'Mark', 'Rolf']]
}
df = pd.DataFrame(data)

为什么str.contains()会报错?

str.contains()是Pandas专门针对字符串类型列的方法,你的Names列每个单元格是列表而非字符串,直接调用会触发类型不匹配错误,所以不能用这个方法。

解决方法

1. 筛选包含单个指定名字的行

用apply()结合in运算符遍历每个列表,判断目标名字是否存在:

# 筛选包含Julia的行
result = df[df['Names'].apply(lambda x: 'Julia' in x)]

运行后会得到Index为0的History行。

2. 筛选包含指定列表中任一元素的行

比如要找包含['Julia', 'Lisa']中任意一个名字的行,有两种常用方式:

方式一:集合交集判断(效率更高,适合元素多的场景)

把目标列表转成集合,再和每个Names列表转成的集合求交集,只要交集非空就保留该行:

targets = ['Julia', 'Lisa']
target_set = set(targets)
result = df[df['Names'].apply(lambda x: bool(set(x) & target_set))]

运行后会得到Index为0(含Julia)和Index为1(含Lisa)的两行。

方式二:any()函数判断(逻辑更直观)

遍历目标列表的每个元素,检查是否有任意一个元素在当前Names列表中:

targets = ['Julia', 'Lisa']
result = df[df['Names'].apply(lambda x: any(name in x for name in targets))]

效果和方式一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:25:40