如何在Pandas的.str.contains()中使用变量实现多条件行筛选?
如何在Pandas的
.str.contains()方法中使用变量筛选行? 我查阅过该主题的多篇回答,但未找到适配自身场景的方案:希望在Pandas的.str.contains()方法中指定变量,筛选某列中包含特定固定字符串,或包含预定义变量子串的行,让代码具备灵活性,可生成不同的汇总结果。
示例代码(MWE)
d = {'Column': ['test_string', 'variable_string', 'Letter to the Editor', 'Letter variable_string to the Editor', 'Letter to the Editor']} df = pd.DataFrame(data=d) variable = 'variable_string' # 此写法可行,但硬编码了值,无法灵活修改 df.loc[ df['Column'].str.contains('test_string|variable_string')] # 以下写法均报错 df.loc[ df['Column'].str.contains('test_string|'variable)] #SyntaxError: invalid syntax. Perhaps you forgot a comma? df.loc[ df['Column'].str.contains('test_string'|variable)] #TypeError: unsupported operand type(s) for |: 'str' and 'str'
可行解决方案
方法1:字符串拼接
直接用+运算符将固定字符串和变量拼接成完整的正则匹配模式:
# 正确写法 df.loc[df['Column'].str.contains('test_string|' + variable)]
方法2:使用f-string(推荐)
Python 3.6及以上版本支持f-string,写法更简洁直观:
df.loc[df['Column'].str.contains(f'test_string|{variable}')]
方法3:处理含正则特殊字符的变量
如果变量中包含.、*、?这类正则表达式特殊字符,需要用re.escape()转义,避免意外匹配:
import re variable_with_special_chars = 'var*.string' df.loc[df['Column'].str.contains(f'test_string|{re.escape(variable_with_special_chars)}')]
运行上述正确代码后,会返回包含test_string或变量指定子串的所有行,实现灵活筛选的需求。
内容的提问来源于stack exchange,提问作者eschares
相关产品推荐
相关产品推荐

