2017-03-22 2 views
1

J'utilise Pandas et je voudrais extraire des valeurs de plusieurs dataframes. Par exemple, il existe trois bases de données comme ci-dessous.extraire des valeurs de pandas dataframe

df1 = pd.DataFrame({'key': ['K0', 'K1'], 
        'A': ['A0', 'A1'], 
        'B': ['B0', 'B1']}) 

df2 = pd.DataFrame({'key': ['K1', 'K22'], 
         'C': ['C1', 'C3'], 
         'D': ['D1', 'D3']}) 

df3 = pd.DataFrame({'key': ['K1', 'K30'], 
         'E': ['E1', 'E3'], 
         'F': ['F1', 'F3']}) 

Si la clé est partagée entre les données, je voudrais extraire des valeurs. donc j'ai fait ci-dessous

pd.merge(df1,df2, on='key') 

Cela montre ci-dessous, ce qui était très bien. Cependant, si j'essaye de faire ceci plus de 2 dataframes, cela ne fonctionnera pas. Par exemple, le suivi n'a pas fonctionné.

pd.merge(df1,df2,df3, on='key') 

Je pense que pd.merge ne convient pas pour cela. Est-ce que quelqu'un sait comment faire cela?

Merci!

Répondre

3

fusion peut être appliquée que sur deux dataframes à la fois à la différence concat si la solution est d'utiliser la fusion sur la première sortie de fusion

df1.merge(df2, on='key').merge(df3, on = 'key') 

donne

A B key C D E F 
0 A1 B1 K1 C1 D1 E1 F1 
+0

C'est exactement ce que je voulais. Merci les gars!! –

+0

Super! Heureux que cela a fonctionné :) – Vaishali

6

pd.merge travaille avec deux dataframes (gauche et droite)

Vous pouvez utiliser pd.concat concaténer une liste de dataframes.

pd.concat([df1,df2,df3],axis=1) 

droit ...

pd.concat([df1.set_index('key'),df2.set_index('key'),df3.set_index('key')],axis=1,join='inner') 
+0

'pd.concat' ne produit pas la outpu correcte t. – Craig

+0

pd.concat ([df1.set_index ('clé'), df2.set_index ('clé'), df3.set_index ('clé')], axe = 1, joint = 'intérieur') –

+1

'pd.concat ([d.set_index ('key') pour d dans [df1, df2, df3]], axis = 1, join = 'inner') ' – piRSquared

0

pd.merge ne fonctionne pas pendant plus de 2 dataframes. Cependant, vous pouvez essayer d'utiliser pd.concat. Vérifiez here

0

Vous pouvez faire une fusion répétée comme ceci:

df = df1 

for right in [df2, df3]: 
    df = df.merge(right, on='key') 

L'exécution de ce sur vos données donne:

A B key C D E F 
0 A1 B1 K1 C1 D1 E1 F1 

Juste ont la pour la couverture en boucle tous les dataframes supplémentaires que vous voulez fusionner avec le premier.

0

Bien que je ne sois pas un expert Pandas, j'imagine que les appels successifs à pd.merge les fusionneraient correctement: pd.merge(pd.merge(df1, df2), df3). Pour la réduction par programme, regardez functools.reduce(pd.merge, dfs) (où dfs est une itérable de données). Les pandas pourraient avoir une solution intégrée pour mieux s'adapter, mais cela fonctionnera. J'espère que cela t'aides!

0

Vous pouvez utiliser la fonction de concaténation Pandas.

Le code ci-dessous vous donnera le résultat que vous recherchez.

pd.concat([df1,df2,df3],axis=1) 

Vous pouvez en savoir plus que dans la documentation de pandas géants here