Ik probeer twee pandas data frames samen te voegen met twee kolommen:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
maar krijg de volgende foutmelding:
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]'
Enig idee wat de juiste manier zou moeten zijn om dit te doen? Alvast bedankt!
Probeer dit.
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 : label of lijst, of array-achtige Veldnamen om bij te voegen in left DataFrame. Kan een vector of lijst van vectoren zijn met de lengte van het DataFrame om een bepaalde vector als join key te gebruiken in plaats van kolommen
right_on : label of lijst, of array-achtige Veldnamen om te joinen op in rechter DataFrame of vector/lijst van vectoren per left_on docs
Het probleem hier is dat je door het gebruik van apostrophes de waarde die wordt doorgegeven instelt als een string, terwijl in feite, zoals @Shijo in de documentatie stelt, de functie een label of lijst verwacht, maar geen string! Als de lijst alle namen van de doorgegeven kolommen bevat voor zowel het linker als het rechter dataframe, dan moet elke kolom-naam afzonderlijk tussen apostrophes staan. Met wat er gezegd is, kunnen we begrijpen waarom dit inccorect is:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
En dit is de correcte manier om de functie te gebruiken:
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])