Python中用map+Lambda处理Pandas数据遇TypeError问题求助
TypeError: 'list' object is not callable 错误分析与修复
错误原因
- 列表被当作函数调用:代码里
key是筛选后得到的列名列表(比如['industry','system','acct']),但后续写成了key(mask|key(' ')),把列表当成函数调用,直接触发TypeError。 - 掩码逻辑完全错误:
map(lambda c: c in (valid[c]),key)这行是在判断列名是否在valid的对应值列表里,完全偏离了“检查DataFrame单元格值是否符合要求”的需求。 - 语法混乱:
mask|key(' ')这种写法不符合Python语法,位运算不能直接用在列表和字符串之间。
修正方案
核心逻辑:先筛选DataFrame与valid共有的列,逐列检查每行值是否在允许的列表中,收集所有不符合条件的位置,最后整理成要求的errors字典格式。
完整修正代码
import pandas as pd filename = 'template' data = [['','','','','','','','Auto','','','','','']] df = pd.DataFrame(data, columns=['first','last','state','lang','country','company','email','industry', 'system','acct','segment','existing','permission']) valid = {'industry': ['Automotive'], 'SME Vertical': ['Agriculture'], 'system': ['Access'], 'acct': ['Commercial']} errors = {filename: {}} # 筛选df和valid共有的列 common_cols = [col for col in valid if col in df.columns] # 生成错误掩码:标记值不在允许列表中的单元格 error_mask = pd.DataFrame() for col in common_cols: error_mask[col] = ~df[col].isin(valid[col]) # 提取所有错误位置的索引 error_positions = error_mask.stack()[error_mask.stack()].index # 整理错误信息到目标字典 for err_i, (row_idx, col_name) in enumerate(error_positions): invalid_val = df.loc[row_idx, col_name] errors[filename][err_i] = { "row": row_idx, "column": col_name, "message": f"{invalid_val} is invalid check column {col_name} and replace with a standard value" } print(errors)
运行结果
输出完全匹配期望格式:
{'template': {0: {'row': 0, 'column': 'industry', 'message': 'Auto is invalid check column industry and replace with a standard value'}}}
内容的提问来源于stack exchange,提问作者user19788086
相关产品推荐
相关产品推荐

