我有不同的数据框架,需要根据日期列将它们合并在一起。如果我只有两个数据帧,我可以使用 df1.merge(df2, on='date')
,使用三个数据帧,我使用 df1.merge(df2.merge(df3, on='date'), on='date')
,但是它变得非常复杂,无法读取多个数据帧。
所有数据框架都有一个共同的列 -date
,但是它们没有相同的行数和列数,我只需要那些每个日期对每个数据框架都是共同的行。
因此,我尝试编写一个递归函数,它返回一个包含所有数据的数据框架,但是它没有工作。那么我应该如何合并多个数据框架呢?
我尝试了不同的方法,得到了像 out of range
,keyerror 0/1/2/3
和 can not merge DataFrame with instance of type <class 'NoneType'>
这样的错误。
这是我写的剧本:
dfs = [df1, df2, df3] # list of dataframes
def mergefiles(dfs, countfiles, i=0):
if i == (countfiles - 2): # it gets to the second to last and merges it with the last
return
dfm = dfs[i].merge(mergefiles(dfs[i+1], countfiles, i=i+1), on='date')
return dfm
print(mergefiles(dfs, len(dfs)))
举个例子: Df _ 1:
May 19, 2017;1,200.00;0.1%
May 18, 2017;1,100.00;0.1%
May 17, 2017;1,000.00;0.1%
May 15, 2017;1,901.00;0.1%
Df _ 2:
May 20, 2017;2,200.00;1000000;0.2%
May 18, 2017;2,100.00;1590000;0.2%
May 16, 2017;2,000.00;1230000;0.2%
May 15, 2017;2,902.00;1000000;0.2%
Df _ 3:
May 21, 2017;3,200.00;2000000;0.3%
May 17, 2017;3,100.00;2590000;0.3%
May 16, 2017;3,000.00;2230000;0.3%
May 15, 2017;3,903.00;2000000;0.3%
预期合并结果:
May 15, 2017; 1,901.00;0.1%; 2,902.00;1000000;0.2%; 3,903.00;2000000;0.3%