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

如何在Pandas中从行索引不固定的列提取指定值?

优化Pandas提取特定前缀值的简洁实现

直接利用Pandas的向量化字符串操作,能替代原有的嵌套循环,让代码更简洁高效,同时严谨处理空字符串、NaN等特殊情况。

方法1:布尔索引+去重(通用场景)

import pandas as pd

file1 = {'Col1' : ['', '', 'K_ABC', '', '', '']}
file2 = {'Col1' : ['', 'K_DEF', '', '', '', '']}
file3 = {'Col1' : ['', '', '', 'K_GHI', '', '']}

files = [file1, file2, file3]

for foo in files:
    df = pd.DataFrame(foo)
    # 筛选以'K_'开头的行,自动排除NaN和空字符串,再去重
    target_vals = df['Col1'].loc[df['Col1'].str.startswith('K_', na=False)].unique()
    for val in target_vals:
        print(val)
  • str.startswith('K_', na=False):na=False参数让NaN值被标记为False,不会混入结果
  • 直接通过布尔索引定位目标行,再用unique()去重,省去手动遍历唯一值的嵌套循环

方法2:正则提取(单目标值场景)

如果每个文件的目标列里只有一个以'K_'开头的值,可以用正则提取进一步简化:

for foo in files:
    df = pd.DataFrame(foo)
    # 提取以K_开头的完整字符串,过滤空值后取第一个结果
    target_val = df['Col1'].str.extract(r'(K_.+)', expand=False).dropna().iloc[0]
    print(target_val)
  • 正则(K_.+)精准匹配以'K_'开头的任意长度字符串
  • dropna()清理无效值,iloc[0]直接获取唯一目标值

方法3:真实Excel文件批量处理

如果是处理本地Excel文件,建议只加载目标列提升效率:

# 替换为你的Excel文件路径列表
excel_paths = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']

for path in excel_paths:
    # 只加载需要的Col1列,节省内存
    df = pd.read_excel(path, usecols=['Col1'])
    target_vals = df['Col1'].loc[df['Col1'].str.startswith('K_', na=False)].unique()
    for val in target_vals:
        print(val)

原代码的优化点

  • 去掉嵌套循环,代码结构更清晰,维护成本更低
  • Pandas的向量化操作比Python原生循环效率高得多,处理大文件时优势明显
  • 显式处理NaN和空字符串,逻辑更严谨,避免潜在bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:56:11