如何在python中附加具有相同前缀的多个数据框

时间:2019-04-08 03:13:40

标签: python pandas append

我有多个这样的顺序数据框:

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将其识别为我创建的数据框对象?

2 个答案:

答案 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被认为是一种不好的做法。如果可能,请尝试使用其他方式。