如何动态筛选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
相关产品推荐
相关产品推荐

