如何使用DataFrame名称作为变量完成赋值,实现字符串转DataFrame对象
解决方案
推荐方案:用字典映射存储所有源DataFrame
这是最安全、可维护性最高的实现方式,提前把所有你需要用到的源DataFrame存入一个字典,键就是你在df_config里填的DataFrame名称字符串,值为实际的DataFrame对象:
# 提前构建映射字典 source_df_map = { "df_source_1": df_source_1, "df_source_2": df_source_2, # 其他所有源DataFrame都按格式添加即可 }
然后在你的循环里,直接从字典里取出对应的DataFrame即可,不需要修改原有的cat_update函数:
for n in range(len(df_config)): cat_lst = df_config.at[n,'category'].split(",") con_lst = df_config.at[n,'country'].split(",") # 从映射字典里取实际的DataFrame对象 raw_source = source_df_map[df_config.at[n,'Raw source']] energy_source = df_config.at[n,'Energy source'] # 按原有逻辑调用函数 cat_update(df_templete1, raw_source, cat_lst, con_lst)
后续新增源DataFrame只需要在source_df_map里加一行映射即可,不会有额外的副作用。
可选方案:通过全局变量字典获取(不推荐)
如果你不想手动维护映射字典,也可以直接从Python的全局变量字典globals()里按字符串取对应的变量,但这种方式存在安全风险,如果配置里的字符串指向非预期的变量会导致程序异常:
for n in range(len(df_config)): cat_lst = df_config.at[n,'category'].split(",") con_lst = df_config.at[n,'country'].split(",") # 从全局变量中取对应的DataFrame raw_source = globals()[df_config.at[n,'Raw source']] energy_source = df_config.at[n,'Energy source'] cat_update(df_templete1, raw_source, cat_lst, con_lst)
注意这种方式只能取到当前作用域的全局变量,如果你的源DataFrame定义在其他模块或者局部作用域,需要替换为对应的变量字典。
内容的提问来源于stack exchange,提问作者RSM
相关产品推荐
相关产品推荐

