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

如何用Pandas匹配正则表达式查找Excel单元格的行索引与列名

从半结构化Excel提取目标键值对:同时定位行与列

需求说明

解析半结构化Excel文件,提取符合正则表达式pattern = r'[Tt]emperature|[Ss]tren|[Cc]omment'的键值对:

  • 所有匹配的键位于同一列
  • 对应的值在键所在列的右侧列中
  • 需要同时完成两个目标:
    1. 获取所有包含匹配键的行索引列表
    2. 定位包含这些键的目标列名

示例数据

构造示例DataFrame模拟半结构化Excel内容:

import pandas as pd
import numpy as np

df_original = pd.DataFrame({'Unnamed: 0':['Value', 'Name', np.nan, 'Mark', 'Molly', 'Jack', 'Tom', 'Lena', np.nan, np.nan],
                   'Unnamed: 1':['High', 'New York', np.nan, '5000', '5250', '4600', '2500', '4950', np.nan, np.nan],
                   'Unnamed: 2':[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
                   'Unnamed: 3':['Other', 125, 127, np.nan, np.nan, 'Temperature (C)', 'Strength', np.nan, 'Temperature (F)', 'Comment'],
                   'Unnamed: 4':['Other 2', 25, 14.125, np.nan, np.nan, np.nan, '1500', np.nan, np.nan, np.nan],
                   'Unnamed: 5':[np.nan, np.nan, np.nan, np.nan, np.nan, 25, np.nan, np.nan, 77, 'Looks OK'],
                   'Unnamed: 6':[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 'Add water'],
                  })

整合解决方案代码

以下代码同时完成目标行索引收集、目标列定位,并最终提取目标键值范围:

import pandas as pd
import numpy as np

pattern = r'[Tt]emperature|[Ss]tren|[Cc]omment'

# 1. 遍历列,定位包含目标键的列,同时记录行匹配掩码
target_col = None
row_masks = []
for col in df_original.columns:
    col_mask = df_original[col].str.contains(pattern, regex=True, na=False)
    if col_mask.any():
        target_col = col
        row_masks.append(col_mask)

# 2. 获取所有匹配行的索引
combined_mask = np.any(row_masks, axis=0)
row_range = df_original[combined_mask].index.tolist()

# 3. 提取目标键值范围数据
if target_col:
    col_idx = df_original.columns.get_loc(target_col)
    col_range = df_original.columns[col_idx:]
    target = df_original.loc[row_range, col_range]
    print(target)
else:
    print("未找到匹配目标键的列")

代码解释

  1. 目标列定位:遍历每一列,用str.contains检查列内是否存在匹配正则的内容,找到符合条件的列作为target_col
  2. 目标行索引收集:同步记录列的匹配掩码,合并后筛选出所有包含目标键的行索引
  3. 数据提取:通过目标列的位置,获取该列及右侧所有列,结合目标行索引提取出包含键值对的子DataFrame

输出结果

运行代码后得到的目标子DataFrame:

Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6
5  Temperature (C)        NaN         25        NaN
6          Strength      1500        NaN        NaN
8  Temperature (F)        NaN         77        NaN
9           Comment        NaN   Looks OK   Add water

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18