微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环中数据帧的嵌套动态变量

如何解决循环中数据帧的嵌套动态变量

我有多个 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 > 原始数据帧列表 [df1,df2,...]

  • sumlist > 未来数据帧名称包括摘要 ['name1','name2']

需要从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 举报,一经查实,本站将立刻删除。