如何解决循环中数据帧的嵌套动态变量
我有多个 Pandas 数据框,列相同但值不同。 Ind 我需要从特定列的值运行分析。
我有 7 个数据框可以使用,但假设我只有两个。
df1 = pd.DataFrame({'a': [0,0.5,0.2],'b': [1,1,0.3],'c':['A','A','B']})
df2 = pd.DataFrame({'a': [4,6],'b': [6.2,0.3,'c': ['B','A']})
我选择在 for 循环中使用全局变量。
我创建的:
需要从dflist中的df中取出数据,细化,最后传递给sumlist。
为了不迷路,我希望我的动态变量从 sumlist 中的值中获取名称。
这就是我卡住的地方。我要创建的变量基于数据帧 df1、df2 的列。但是,每个动态变量的输出将包含来自所有列的所有值。
dflist= [df1,df2]
sumlist= ['name1','name2']
for i in dflist:
for name in sumlist:
globals()['var{name}'] = i['c'].to_list()
varname1
NameError: name 'varname1' is not defined
在原始数据帧的情况下,我的列表 varname1 将给出以下结果:
['A','B','A']
相反,我应该有:
varname1 = ['A','B']
varname2 = ['B','A']
令我感到困惑的是,使用完全相同的代码,它在一个案例中“有效”(尽管错误),而在另一个案例中却给出了错误。
我需要解决这个问题,否则我将被迫手动编写每个变量。
解决方法
好吧,我的建议是使用字典而不是使用不安全的 globals
命令。所以,而不是:
for i in dflist:
for name in sumlist:
globals()['var{name}'] = i['c'].to_list()
你应该这样做:
d = {}
for i,name in zip(dflist,sumlist):
d[f'var{name}'] = i['c'].tolist()
请注意,我正在使用 zip
函数并行迭代两个列表。
您缺少 F 字符串的 f
。
globals()['var{name}'] = i['c'].to_list()
对比
globals()[f'var{name}'] = i['c'].to_list()
因此您的全局变量被覆盖并命名为 var{name}
而不是 varname1
。
另外,最好用 use dictionary 代替 globals()
。
我认为您的虚拟示例中有错误,因为您在 F 字符串的 '' 之前没有 f。
应该是这样的:
globals()[f'var{name}'] = i['c'].to_list()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。