如何通过名称字符串从DataFrame列表选对象及解决ValueError报错
解决方案
先说说你原代码的问题:
list(eval('df1'))是把df1这个DataFrame对象转成了列名列表(DataFrame默认迭代的是列),用这个列表去索引你的DataFrame列表,逻辑完全错误,碰巧能拿到第一个元素只是巧合。- 就算改成
list.index(eval('df2'))去查索引,也会因为不同DataFrame的列/行标签不一致,触发ValueError——因为DataFrame的相等判断要求两个对象的标签完全一致才行。
正确的做法是用字典建立名称字符串和DataFrame对象的映射,简单又可靠:
# 创建字典,键是名称字符串,值是对应的DataFrame df_dict = {'df1': df1, 'df2': df2, 'df3': df3, 'df4': df4} # 通过字符串直接获取目标DataFrame target_df = df_dict['df1'] # 拿到df1对象 target_df = df_dict['df3'] # 拿到df3对象
如果你的DataFrame列表已经存在,也可以结合名称列表快速生成字典:
df_list = [df1, df2, df3, df4] df_names = ['df1', 'df2', 'df3', 'df4'] df_dict = dict(zip(df_names, df_list))
另外别用eval,既不安全(如果传入的字符串是恶意代码会出问题),也容易因为对象结构问题触发各种错误,用字典是最稳妥的方式。
内容的提问来源于stack exchange,提问作者user20309717
相关产品推荐
相关产品推荐

