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

是否有Python pandas函数可提取DataFrame及多Excel中指定描述旁的值?

多Excel文件特定值提取与Pandas数据检索方案

一、提取固定描述右侧的目标值(处理多Excel文件)

可以用pandas结合文件遍历实现,核心逻辑是定位包含目标描述字符串“xxx”的单元格,再提取其同行右侧(或对应位置)的值。

示例代码

import pandas as pd
import os

# 替换为你的目标描述字符串
target_desc = "xxx"
results = []

# 遍历指定文件夹下的所有Excel文件
for file_name in os.listdir("./excel_dir"):
    if file_name.endswith((".xlsx", ".xls")):
        file_path = os.path.join("./excel_dir", file_name)
        # 读取文件内所有工作表
        xls = pd.ExcelFile(file_path)
        for sheet in xls.sheet_names:
            df = pd.read_excel(xls, sheet_name=sheet)
            # 遍历每一行每一列找目标描述
            for row_idx, row in df.iterrows():
                for col_name in df.columns:
                    cell_content = str(row[col_name])
                    if target_desc in cell_content:
                        # 获取当前列的索引,取同行下一列的值
                        current_col_idx = df.columns.get_loc(col_name)
                        if current_col_idx + 1 < len(df.columns):
                            target_val = row[df.columns[current_col_idx + 1]]
                            results.append({
                                "文件名": file_name,
                                "工作表": sheet,
                                "提取值": target_val
                            })

# 转换为DataFrame查看结果
result_df = pd.DataFrame(results)
print(result_df)

如果目标值在描述单元格的下一行,只需把target_val的取值改为df.iloc[row_idx+1, current_col_idx]即可。

二、Pandas根据内容检索DataFrame特定值的方法

有多种实用方法,常用的如下:

  • 全表模糊匹配:用df[df.apply(lambda x: x.astype(str).str.contains(target_desc).any(), axis=1)],筛选出任意单元格包含目标字符串的整行数据。
  • 精准匹配值:通过布尔索引直接定位,比如df[df == "目标值"],返回所有匹配该值的单元格(非匹配位置显示NaN)。
  • 表达式检索:用df.query()实现类SQL的查询,例如df.query('列名 == "目标值"'),针对指定列做精准匹配。
  • 指定列模糊检索:用df.loc[df["目标列"].str.contains(target_desc, na=False)],高效筛选目标列中包含指定字符串的行。

检索并提取值示例

import pandas as pd

df = pd.read_excel("single_file.xlsx")
target_desc = "xxx"

# 筛选所有包含目标描述的行
matched_rows = df[df.apply(lambda row: target_desc in str(row.values), axis=1)]

# 提取对应右侧的值
for idx, row in matched_rows.iterrows():
    for col in df.columns:
        if target_desc in str(row[col]):
            col_idx = df.columns.get_loc(col)
            if col_idx + 1 < len(df.columns):
                print(f"提取到的值:{row[df.columns[col_idx + 1]]}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:15:36