我有多个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()