Python 将列上的Dataframe与结构化数据合并

Python 将列上的Dataframe与结构化数据合并,python,pandas,dataframe,Python,Pandas,Dataframe,场景:继上一个关于如何将excel文件从服务器读取到数据框()的问题之后,我正在尝试合并多个数据框(其中包含excel工作表中的数据)的上下文 问题:即使在SO中搜索了类似的问题,我仍然无法解决问题 数据格式(每张图纸都读入一个数据框): Sheet 1 (db1) Name CUSIP Date Price A XXX 01/01/2001 100 B AAA 02/05/2005

场景:继上一个关于如何将excel文件从服务器读取到数据框()的问题之后,我正在尝试合并多个数据框(其中包含excel工作表中的数据)的上下文

问题:即使在SO中搜索了类似的问题,我仍然无法解决问题

数据格式(每张图纸都读入一个数据框):

Sheet 1 (db1)
Name       CUSIP       Date       Price

 A          XXX     01/01/2001     100
 B          AAA     02/05/2005      90
 C          ZZZ     03/07/2006      95

Sheet2 (db2)
Ident      CUSIP       Value      Class

 123        XXX          0.5        AA
 444        AAA          1.3        AB
 555        ZZZ          2,8        AC
通缉输出(fnl):

我已经尝试过的:我正在尝试使用merge函数来匹配每个数据帧,但是我在“如何”部分遇到了错误

我也尝试了连接,但是我只得到了一个数据帧列表,而不是一个输出

wsframes = [db1 ,db2, db3]

fnl = pd.concat(wsframes, axis=1)
问题:执行此操作的正确方法是什么?

您似乎需要:

from functools import reduce
#many dataframes
dfs = [df1,df2]
df = reduce(lambda x, y: x.merge(y, on='CUSIP', how='outer'), dfs)
print (df)
  Name CUSIP        Date  Price  Ident Value Class
0    A   XXX  01/01/2001    100    123   0.5    AA
1    B   AAA  02/05/2005     90    444   1.3    AB
2    C   ZZZ  03/07/2006     95    555   2,8    AC
但是每个数据帧中的列必须不同(没有匹配的列(
CUSIP
此处)),否则会得到
\ux
\uy
后缀:

dfs = [df1,df1, df2]
df = reduce(lambda x, y: x.merge(y, on='CUSIP', how='outer'), dfs)
print (df)
  Name_x CUSIP      Date_x  Price_x Name_y      Date_y  Price_y  Ident Value  \
0      A   XXX  01/01/2001      100      A  01/01/2001      100    123   0.5   
1      B   AAA  02/05/2005       90      B  02/05/2005       90    444   1.3   
2      C   ZZZ  03/07/2006       95      C  03/07/2006       95    555   2,8   

  Class  
0    AA  
1    AB  
2    AC  

您得到了什么错误?合并过程的KeyError:“CUSIP”。对于concat,我得到了数据帧列表,但我无法将它们放在一起进行操作。您的错误表明“CUSIP”作为列不可见。当编写
db1['CUSIP']
db2['CUSIP']
时,您会得到什么?事实上同样的错误。这可能是因为数据被一个空行从标题中分隔开了吗?关于
db2.columns.tolist()
db2.index.tolist()
我想他已经尝试过合并,但抱怨出现了错误。我认为没有必要使用另一个库,比如functools。他还可以在CUSIP上设置索引并进行合并。@Wli-是的,但是如果需要合并许多数据帧,那么这就更简单了。回答得好~~!
from functools import reduce
#many dataframes
dfs = [df1,df2]
df = reduce(lambda x, y: x.merge(y, on='CUSIP', how='outer'), dfs)
print (df)
  Name CUSIP        Date  Price  Ident Value Class
0    A   XXX  01/01/2001    100    123   0.5    AA
1    B   AAA  02/05/2005     90    444   1.3    AB
2    C   ZZZ  03/07/2006     95    555   2,8    AC
dfs = [df1,df1, df2]
df = reduce(lambda x, y: x.merge(y, on='CUSIP', how='outer'), dfs)
print (df)
  Name_x CUSIP      Date_x  Price_x Name_y      Date_y  Price_y  Ident Value  \
0      A   XXX  01/01/2001      100      A  01/01/2001      100    123   0.5   
1      B   AAA  02/05/2005       90      B  02/05/2005       90    444   1.3   
2      C   ZZZ  03/07/2006       95      C  03/07/2006       95    555   2,8   

  Class  
0    AA  
1    AB  
2    AC