J'ai diferent dataframes et la nécessité de les fusionner, basé sur la colonne date. Si seulement j'avais deux dataframes, je pourrais utiliser df1.merge(df2, on='date')
, pour le faire avec trois dataframes, j'utilise df1.merge(df2.merge(df3, on='date'), on='date')
, cependant, il devient vraiment très complexe et illisible pour le faire avec plusieurs dataframes.
Tous les dataframes ont une colonne en commun -date
, mais ils n'ont pas le même nombre de lignes ou de colonnes et je n'ai plus besoin de ces lignes dans lequel chaque jour est commune à toutes les dataframe.
Donc, je suis en train d'écrire une récursivité fonction qui retourne un dataframe avec toutes les données, mais il ne fonctionne pas. Comment dois-je les fusionner plusieurs dataframes alors?
J'ai essayé de différentes façons et eu des erreurs comme out of range
, keyerror 0/1/2/3
et can not merge DataFrame with instance of type <class 'NoneType'>
.
C'est le script que j'ai écrit:
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)))
Un exemple: 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%
Attendue du résultat de la fusion:
May 15, 2017; 1,901.00;0.1%; 2,902.00;1000000;0.2%; 3,903.00;2000000;0.3%