J'essaie de joindre deux cadres de données pandas en utilisant deux colonnes :
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
mais j'ai obtenu l'erreur suivante :
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'
Avez-vous une idée de la façon de procéder ? Merci.
Essayez ceci
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])
http://pandas.pydata.org/pandas-docs/version/0.19.1/generated/pandas.DataFrame.merge.html
left_on : étiquette ou liste, ou tableau de noms de champs à joindre à gauche DataFrame. Peut être un vecteur ou une liste de vecteurs de la longueur du DataFrame pour utiliser un vecteur particulier comme clé de jointure au lieu de colonnes
right_on : étiquette ou liste, ou tableau de noms de champs à joindre sur dans le DataFrame de droite ou vecteur/liste de vecteurs selon la docs left_on
Le problème ici est qu'en utilisant les apostrophes, vous définissez la valeur passée comme étant une chaîne de caractères, alors qu'en fait, comme @Shijo l'a indiqué dans la documentation, la fonction attend un label ou une liste, mais pas une chaîne de caractères ! Si la liste contient chacun des noms de colonnes passés pour les cadres de données de gauche et de droite, alors chaque nom de colonne doit être individuellement entre apostrophes. Avec ce qui a été dit, on peut comprendre pourquoi c'est inccorect :
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
Et c'est la façon correcte d'utiliser la fonction :
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])