我有多个这样的顺序数据框:
df1 = pd.DataFrame( [['tom', 10], ['nick', 15], ['juli', 14]] , columns = ['Name', 'Age'])
df2 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] , columns = ['Name', 'Age'])
df3 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] , columns = ['Name', 'Age'])
df4 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] , columns = ['Name', 'Age'])
我需要创建一个for循环来附加它们并获取新的数据框。 我尝试了下面的代码,但是它不起作用,因为python将df1识别为字符串。
tempdf = df1
for i in range(2,4):
tempdf = tempdf.append(("df"+str(i)))
print(tempdf)
如何让python将其识别为我创建的数据框对象?
答案 0 :(得分:2)
首先,我要强调指出的是,必须这样做会在源数据帧的生成方式上出现问题,因此您应该研究解决问题。
使用Python,几乎可以完成任何您想做的事情。 完全是另一个问题。
在这种情况下,最安全的方法可能是使用globals()
:
n_dataframes = 4
g = globals()
dataframes = [g[f'df{i}'] for i in range(1, n_dataframes + 1)]
result_df = pd.concat(dataframes)
print(result_df)
输出:
Name Age
0 tom 10
1 nick 15
2 juli 14
0 tom 10
1 nick 15
2 juli 14
0 tom 10
1 nick 15
2 juli 14
0 tom 10
1 nick 15
2 juli 14
您可以对结果进行进一步处理,例如调用reset_index
。
另一种替代方法是使用eval
,它坚定地转向“除非您真的知道自己在做什么,否则不要这样做”,因为它允许执行任意代码:
dataframes = [eval(f'df{i}') for i in range(1, n_dataframes + 1)]
请注意,以上代码使用了 f-strings ,这是仅在Python 3.6中引入的语法。因此,如果您的Python版本低于该版本,请将f'df{i}'
替换为'df{}'.format(i)
。
答案 1 :(得分:0)
您的前进方向正确,只需使用eval
:
tempdf = df1
for i in range(2,4):
tempdf = tempdf.append(eval("df"+str(i)))
print(tempdf)
注意:使用eval可以运行任意代码,使用eval被认为是一种不好的做法。如果可能,请尝试使用其他方式。