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

如何在Pandas中筛选列字符串为指定字符串子串的行?

嘿,我明白你要找的是df.str.contains()的反向操作——也就是判断指定字符串是否包含DataFrame某列的每个元素,返回对应的布尔Series对吧?其实有两种简单的方法可以实现,咱们一步步来看:

方法1:使用apply()(灵活通用)

这种方法最直观,不管你的列元素是单个字符还是多字符子串,都能轻松处理。我们用lambda函数遍历列中的每个元素,检查它是否存在于目标字符串中:

import pandas as pd

# 示例数据
target_str = 'abjk'
df = pd.DataFrame({'letter': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']})

# 生成布尔Series
df['is_contained'] = df['letter'].apply(lambda x: x in target_str)

执行后,is_contained列里索引0、1、9、10对应的行就会返回True,完全符合你的需求。如果你的列元素是更长的子串(比如'ab'、'jk'),这个方法依然有效,因为x in target_str会检查整个子串是否是目标字符串的一部分。

方法2:使用str.isin()(高效向量化)

如果你的列元素都是单个字符,那用str.isin()会更高效——这是Pandas的向量化操作,比apply()的遍历速度更快,尤其适合处理大数据集:

# 把目标字符串拆成单个字符的列表,再用str.isin匹配
df['is_contained'] = df['letter'].str.isin(list(target_str))

这个方法的原理是先将目标字符串'abjk'拆成['a','b','j','k'],然后检查列中的每个字符是否在这个列表里,最终返回布尔Series。

小提示

  • 如果你的列元素是多字符子串,优先用方法1,因为str.isin()只能匹配完全相等的元素,无法识别子串关系;
  • 如果是单个字符匹配,方法2的性能更优,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:06:38