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

如何动态筛选DataFrame列:仅保留字典键中的有效列

动态筛选DataFrame列,匹配字典中存在的有效列

你只需要利用已经过滤后的valid字典的键来动态生成列列表即可——因为你已经通过字典推导式剔除了df中不存在的列名,valid.keys()正好就是你需要保留的目标列集合。

修改后的完整代码如下:

import pandas as pd
 
filename='template'
data= [['Auto','','','']]
df= pd.DataFrame(data,columns=['industry','System_Type__c','AccountType','email'])
 
valid= {'industry': ['Automotive'],
        'SME Vertical': ['Agriculture'],
        'System_Type__c': ['Access'],
        'AccountType': ['Commercial']}
 
# 这行已经过滤掉了df中不存在的列,valid的键就是需要保留的列
valid={k:v for k, v in valid.items() if k in df.columns.values}
 
errors= {}
errors[filename]={}
 
# 动态生成df1,直接用valid的键作为列选择器
df1= df[list(valid.keys())]
mask = df1.apply(lambda c: c.isin(valid[c.name]))
df1.mask(mask|df1.eq(' ')).stack()
for err_i, (r, v) in enumerate(df1.mask(mask|df1.eq(' ')).stack().iteritems()):
    errors[filename][err_i] = {"row": r[0],
                               "column": r[1],
                               "message": v + " is invalid check column " + r[1] + ' and replace with a standard value'}

关键说明

  • 你之前的代码已经通过valid={k:v for k, v in valid.items() if k in df.columns.values}完成了核心过滤:只保留df中存在的列名作为valid的键。
  • 直接将valid.keys()转为列表(list(valid.keys())),即可作为df的列索引器,动态生成只包含有效列的df1,完全不需要硬编码列名。
  • 这种方式会自动适配不同Excel模板的列差异,不管valid字典里有多少不在当前df中的列,都会被自动剔除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:49