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

如何批量检索遵循递增命名规则的DataFrame列中的字符串,简化重复代码

解决方案

你可以完全不用写冗余的重复判断,两种实现方式都能达到和你原有代码完全一致的效果:

方式1:更简洁的向量化写法(推荐,无需显式写for循环)

首先生成你要检索的目标列列表,你原有代码是从name2检索到name40:

import pandas as pd

# 生成目标列名列表
target_cols = [f'name{i}' for i in range(2, 41)]
# 你的待检索字符串列表,把50个字符串都放这里
search_strings = ["String001", "String002", ...]

如果是单字符串检索(比如只查String001):

criteria = df[target_cols].apply(lambda col: col.str.contains("String001", na=False)).any(axis=1)

如果是要匹配50个字符串中的任意一个,直接拼接正则表达式一次匹配,效率更高:

# 把所有待检索字符串拼接为正则的或关系
match_pattern = '|'.join(search_strings)
# 任意一列包含任意一个待检索字符串就返回True
criteria = df[target_cols].apply(lambda col: col.str.contains(match_pattern, na=False, regex=True)).any(axis=1)

代码里的any(axis=1)等价于你原有代码里所有列判断结果用|连接的逻辑。

提示:如果你的待检索字符串包含.、*这类正则特殊字符,拼接pattern的时候要先转义:

import re
match_pattern = '|'.join(re.escape(s) for s in search_strings)

方式2:用for循环实现

如果你需要显式用for循环实现,逻辑也很简单:

target_cols = [f'name{i}' for i in range(2, 41)]
# 初始化全为False的布尔序列
criteria = pd.Series([False]*len(df), index=df.index)

for col in target_cols:
    # 每列的匹配结果用或逻辑合并
    criteria |= df[col].str.contains("String001", na=False)

如果要为每个待检索字符串单独生成匹配结果,再加一层循环即可:

result = {}
for s in search_strings:
    result[s] = df[target_cols].apply(lambda col: col.str.contains(s, na=False)).any(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 10:24:04