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

Python遍历DataFrame列表结合startswith匹配截取对应列的问题

问题原因

  • 循环逻辑错误:当前使用嵌套循环会让每个DataFrame重复匹配所有前缀组,且后续赋值会覆盖之前的结果,不符合「DataFrame和前缀组索引一一对应」的需求
  • 匹配参数错误:str.startswith支持传入元组实现多前缀同时匹配,你直接把前缀列表转成字符串传入,会匹配"['a', 'b']"这种无意义的字符串,自然选不到任何列

修复后代码

import pandas as pd

# 测试数据定义
df1 = pd.DataFrame(data={'x':[1,2,3,4,5], 
                         'am.1': [1,1,1,1,1],
                         'abn.1': [1,1,1,1,1],
                         'b1c': [1,1,1,1,1],
                         'b1d': [1,1,1,1,1]})

df2 = pd.DataFrame(data={'x':[1,2,3,4,5], 
                         'am.1': [1,1,1,1,1],
                         'al.2': [1,1,1,1,1],
                         'b1d': [1,1,1,1,1],
                         'b2d': [1,1,1,1,1]})

lst_dfs = [df1, df2]
lst = (['a','b'],['am','b1'])

# 处理逻辑
dat = {}
for idx, df in enumerate(lst_dfs):
    # 取对应索引的前缀组,转元组后传入startswith做多前缀匹配
    prefixes = tuple(lst[idx])
    dat[idx] = df.loc[:, df.columns.str.startswith(prefixes)]

结果验证

  • dat[0] 为df1匹配所有a/b开头的列,包含:am.1、abn.1、b1c、b1d
  • dat[1] 为df2匹配所有am/b1开头的列,包含:am.1、b1d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 00:36:05