188 votes

Python Pandas ne fusionne que certaines colonnes

Est-il possible de ne fusionner que certaines colonnes ? J'ai un DataFrame df1 avec les colonnes x, y, z, et df2 avec les colonnes x, a ,b, c, d, e, f, etc.

Je veux fusionner les deux DataFrames sur x, mais je ne veux fusionner que les colonnes df2.a, df2.b - pas l'ensemble du DataFrame.

Le résultat serait un DataFrame avec x, y, z, a, b.

Je pourrais fusionner puis supprimer les colonnes indésirables, mais il semble qu'il existe une meilleure méthode.

218voto

Arthur D. Howland Points 1078

Vous devez utiliser DEUX parenthèses, donc si vous faites une action de type VLOOKUP :

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

Cela vous donnera tout ce qui se trouve dans le df original + ajoutez la colonne correspondante dans le df2 que vous voulez joindre.

100voto

Andy Hayden Points 38010

Vous pourriez fusionner le sous-DataFrame (avec seulement ces colonnes) :

df2[list('xab')]  # df2 but only with columns x, a, and b

df1.merge(df2[list('xab')])

37voto

tonneofash Points 127

Si vous souhaitez supprimer une ou plusieurs colonnes du cadre de données cible, mais que ces colonnes sont nécessaires pour la jointure, vous pouvez procéder comme suit :

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop(columns = ['key1'])

Le site .drop(columns = 'key1') empêchera que la "clé1" soit conservée dans le cadre de données résultant, bien qu'elle soit requise pour la jointure en premier lieu.

12voto

Terrance DeJesus Points 197

Vous pouvez utiliser .loc pour sélectionner les colonnes spécifiques avec toutes les lignes et ensuite tirer cela. Voici un exemple :

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

Dans cet exemple, vous fusionnez dataframe1 et dataframe2. Vous avez choisi d'effectuer une jointure externe gauche sur 'key'. Cependant, pour dataframe2 vous avez spécifié .iloc qui vous permet de spécifier les lignes et les colonnes que vous souhaitez dans un format numérique. Utilisation de : vous sélectionnez toutes les lignes, mais [0:5] sélectionne les 5 premières colonnes. Vous pouvez utiliser .loc pour le spécifier par son nom, mais si vous avez affaire à de longs noms de colonnes, alors .iloc peut être meilleur.

9voto

Marco167 Points 61

Il s'agit de fusionner les colonnes sélectionnées de deux tables.

Si table_1 contient t1_a,t1_b,t1_c..,id,..t1_z colonnes, et table_2 contient t2_a, t2_b, t2_c..., id,..t2_z colonnes, et que seuls t1_a, id, t2_a sont nécessaires dans la table finale, alors

mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file    
mergedCSV.to_csv('output.csv',index = False)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X