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



我有多个panda数据帧,列相同但值不同。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, 1, 6],
'b': [6.2,0.3,0.3], 'c': ['B','A','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','A','B','B','B','A']

相反,我应该有:

varname1 = ['A','A','B']
varname2 = ['B','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

此外,最好使用字典而不是globals()

我认为您的伪示例中有一个错误,因为f字符串的"之前没有f。

应该是这样的:

globals()[f'var{name}'] = i['c'].to_list()

最新更新