如何从导入的py文件中调用字典完成DataFrame的map映射操作
问题解决
报错根因
Python 中mc.i的写法是直接查找mc模块下名为i的固定属性,不会将循环变量i存储的字符串值动态解析为属性名,因此会触发module 'mc' has no attribute 'i'的报错。同时第一种写法中调用dir()属于多余操作,pandas.Series.map()直接接收映射字典作为入参即可。
正确实现代码
import mc # factor_list为你提前定义的、和mc中字典同名的DataFrame源列名列表 for col in factor_list: # 动态从mc模块中获取对应名称的映射字典 map_dict = getattr(mc, col) # 按照规则生成新列名,修正了原写法漏加下划线的问题 new_col = f"{col}_factors" # 执行值映射 bi[new_col] = bi[col].map(map_dict) # 打印校验结果 print(bi[new_col].head())
可选优化项
- 增加属性存在性校验,避免因列名和mc中字典名不匹配报错:
for col in factor_list: if not hasattr(mc, col): print(f"mc模块中不存在名为{col}的字典,已跳过") continue # 后续映射逻辑同上
- 如果你没有提前定义
factor_list,可以自动提取mc模块中所有自定义字典作为映射源:
# 过滤模块内置属性,仅保留值为字典的自定义属性 factor_list = [k for k, v in vars(mc).items() if not k.startswith("__") and isinstance(v, dict)]
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

