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

如何在DataFrame中根据子串查找并返回对应单元格的值?

解决方案

首先纠正你现有代码里的几个语法错误,避免运行报错:

  • 中文引号“”要改成英文引号""
  • Python布尔值false要大写为False
  • any是方法,需要加括号调用(原代码里.any是引用方法对象,不是执行判断)

修正后的行筛选代码:

df[df.apply(lambda row: row.astype(str).str.contains("Apple", case=False).any(), axis=1)]

修正后的列筛选代码:

df.apply(lambda x: x.str.contains("Apple", case=False).any())

下面是两种获取目标单元格完整值的方法:

方法一:转为一维Series筛选(推荐)

把整个DataFrame扁平化处理,直接筛选包含目标子串的单元格值:

import pandas as pd

# 示例DataFrame
data = {
    "Column A": ["Red apple", "Blue Car"],
    "Column B": ["carrots", "Banana"]
}
df = pd.DataFrame(data)

target_substring = "Apple"
# 将DataFrame转为一维Series(stack()会把列作为二级索引)
all_cells = df.stack()
# 筛选包含子串的单元格,忽略大小写
matched_values = all_cells[all_cells.astype(str).str.contains(target_substring, case=False)].tolist()

print(matched_values)  # 输出: ['Red apple']

方法二:逐单元格遍历

通过嵌套循环遍历每个单元格,收集符合条件的值:

matched_values = []
target_substring_lower = target_substring.lower()

# 遍历每一行
for _, row in df.iterrows():
    # 遍历该行的每个单元格值
    for val in row.astype(str):
        if target_substring_lower in val.lower():
            matched_values.append(val)

# 可选:去重(如果存在重复匹配的情况)
matched_values = list(dict.fromkeys(matched_values))
print(matched_values)  # 输出: ['Red apple']

如果需要同时获取单元格的位置(行索引、列名),可以在方法一中保留索引:

matched_cells = all_cells[all_cells.astype(str).str.contains(target_substring, case=False)]
print(matched_cells)
# 输出:
# 0  Column A    Red apple
# dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:05:29