Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-合并数据帧名称包含在列表中_Python_Pandas - Fatal编程技术网

Python-合并数据帧名称包含在列表中

Python-合并数据帧名称包含在列表中,python,pandas,Python,Pandas,我现在有2个数据帧,我是说2,但我们可以有n个数据帧。数据帧的名称在列表中。我想加入列表中名称存在的所有数据帧 import pandas as pd data1 = [['Alex',10],['Bob',12],['Clarke',13]] df1 = pd.DataFrame(data1,columns=['Name','Age']) data2 = [['David',10],['Alain',12],['Rob',13]] df2 = pd.DataFrame(data2,colum

我现在有2个数据帧,我是说2,但我们可以有n个数据帧。数据帧的名称在列表中。我想加入列表中名称存在的所有数据帧

import pandas as pd
data1 = [['Alex',10],['Bob',12],['Clarke',13]]
df1 = pd.DataFrame(data1,columns=['Name','Age'])

data2 = [['David',10],['Alain',12],['Rob',13]]
df2 = pd.DataFrame(data2,columns=['Name','Age'])

list = ['df1','df2']                   

# i want something to work like

df3 = pd.Concat(list)
感谢您在这方面的帮助。

如果您想查看结果,请使用:

pd.concat([df1, df2], ignore_index=True)

#     Name  Age
#0    Alex   10
#1     Bob   12
#2  Clarke   13
#3   David   10
#4   Alain   12
#5     Rob   13

不要使用变量名作为列表。迭代列表以获取dataframe的实例,然后进行连接

lis = ['df1','df2']                   

df3 = pd.concat([globals()[i] for i in lis]) # to get instance of df1 from string 'df1'
df3
输出

Name    Age
Alex    10
Bob     12
Clarke  13
David   10
Alain   12
Rob     13

您需要将名称设置为索引,然后执行concat

或者使用reduce+merge


只需要一个for循环来迭代列表就可以了?它必须是list=['df1','df2',]还是list=[df1,df2]?
list = [df1,df2] 

pd.concat([x.set_index('Name') for x in list],axis=1)
Out[270]: 
         Age   Age
Alain    NaN  12.0
Alex    10.0   NaN
Bob     12.0   NaN
Clarke  13.0   NaN
David    NaN  10.0
Rob      NaN  13.0
from functools import reduce
df = reduce(lambda  left,right: pd.merge(left,right,on=['Name'],
                                            how='outer'), list)
df
Out[275]: 
     Name  Age_x  Age_y
0    Alex   10.0    NaN
1     Bob   12.0    NaN
2  Clarke   13.0    NaN
3   David    NaN   10.0
4   Alain    NaN   12.0
5     Rob    NaN   13.0