pandas concat 将数据帧列表合并到另一个数据帧

pandas concat to merge list of dataframes to another dataframe

我有名为 a、b、c(以及更多)的数据框,我想将它们与名为 d 的数据框连接起来。

我正在做如下:

a= pd.concat([a, d], axis = 0)
b= pd.concat([b, d], axis = 0)
c= pd.concat([c, d], axis = 0)
...

因为我有超过 3 个数据帧 a、b、c,我正在寻找一些方法来更快地完成它,比如在一个循环中。我正在使用如下代码,但它不起作用:

for x in [a,b,c]:
    global d
    x = pd.concat([x, d], axis = 0)
import pandas as pd

a = pd.DataFrame({'task':['one'],'label':['tag_01'] })
b = pd.DataFrame({'task':['one'],'label':['tag_01'] })
c = pd.DataFrame({'task':['one'],'label':['tag_01'] })
d = pd.DataFrame({'task':['two'],'label':['tag_02'] })

在使用名称时迭代数据框的常见解决方案是使用另一个包含数据框名称的列表,然后按位置枚举并获取名称的值:

# create a dict containing dfs
names = ['a','b','c']
dict_dfs = ({names[i]: df for i, df in enumerate([a, b, c])})

现在我们可以使用 globals() 生成所需的输出。 globals()方法returns当前全局符号的字典table。符号 table 是由编译器维护的数据结构。

for i in dict_dfs:
    globals()[str(i)] = pd.concat([dict_dfs[i], d], axis = 0)

结果:

a
Out[1]: 
  task   label
0  one  tag_01
0  two  tag_02


b
Out[2]: 
  task   label
0  one  tag_01
0  two  tag_02


c
Out[3]: 
  task   label
0  one  tag_01
0  two  tag_02