如何将DataFrame列表转换为包含对应DataFrame对象的元组
问题场景
现有存储DataFrame变量名的字符串列表df_names,需要转换为对应实际DataFrame对象组成的列表df_list,从而通过for循环给每个DataFrame新增一列,列值为df_names中对应的名称字符串。
手动去掉列表元素引号生成df_list时,循环始终将元素识别为字符串类型,无法正常运行如下目标代码:
df_names = ['df1', 'df2', 'df3'] df_list = [df1, df2, df3] for i, k in zip(df_list, df_names): i['new_column'] = k
实现方案
不需要手动硬编码df_list,直接通过Python内置的变量名字典映射取值即可,根据变量作用域选对应方法:
- 全局作用域场景(脚本顶层、Jupyter单元格直接定义的DataFrame):用
globals()获取全局变量表,按字符串名匹配对应DataFrame对象
df_names = ['df1', 'df2', 'df3'] df_list = [globals()[df_name] for df_name in df_names] # 后续循环可直接正常运行 for df, col_val in zip(df_list, df_names): df['new_column'] = col_val
- 函数内部局部作用域场景:把上述代码里的
globals()替换为locals()即可。
避坑提示:不推荐使用
eval()类方法实现转换,若df_names中混入恶意构造的字符串会触发代码注入风险,直接读取变量表的方式稳定性和安全性都更高。
内容的提问来源于stack exchange,提问作者Nazar
相关产品推荐
相关产品推荐

