循环中数据帧的嵌套动态变量
Nested Dynamic Variables for Dataframes in Loop
我有多个 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, 1, 6],
'b': [6.2,0.3,0.3], 'c': ['B','A','A']})
我选择在 for 循环中使用全局变量。
我创建了:
dflist > 原始数据帧列表 [df1, df2, ...]
sumlist > 未来数据帧 names 包括摘要 ['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']
令我困惑的是,使用完全相同的代码,它在一种情况下“有效”(尽管是错误的),而在另一种情况下却给出错误。
我需要克服这个问题,否则我将被迫手动编写每个变量。
您缺少 f
F 弦。
globals()['var{name}'] = i['c'].to_list()
对
globals()[f'var{name}'] = i['c'].to_list()
因此您的全局变量被覆盖并命名为 var{name}
而不是 varname1
。
还有,更好use dictionary instead of globals()
。
嗯,我的建议是使用字典而不是使用不安全的 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()[f'var{name}'] = i['c'].to_list()
我有多个 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, 1, 6],
'b': [6.2,0.3,0.3], 'c': ['B','A','A']})
我选择在 for 循环中使用全局变量。
我创建了:
dflist > 原始数据帧列表 [df1, df2, ...]
sumlist > 未来数据帧 names 包括摘要 ['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']
令我困惑的是,使用完全相同的代码,它在一种情况下“有效”(尽管是错误的),而在另一种情况下却给出错误。
我需要克服这个问题,否则我将被迫手动编写每个变量。
您缺少 f
F 弦。
globals()['var{name}'] = i['c'].to_list()
对
globals()[f'var{name}'] = i['c'].to_list()
因此您的全局变量被覆盖并命名为 var{name}
而不是 varname1
。
还有,更好use dictionary instead of globals()
。
嗯,我的建议是使用字典而不是使用不安全的 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()[f'var{name}'] = i['c'].to_list()