Estoy tratando de unir dos marcos de datos de pandas utilizando dos columnas:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
pero me da el siguiente error:
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]'
¿Alguna idea de cuál debería ser la forma correcta de hacer esto? Gracias.
Prueba esto
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 : etiqueta o lista, o array, de los nombres de los campos a unir a la izquierda DataFrame. Puede ser un vector o una lista de vectores de la longitud del DataFrame para utilizar un vector concreto como clave de unión en lugar de columnas
right_on : etiqueta o lista, o array, de los nombres de los campos a unir en DataFrame derecho o vector/lista de vectores según docs left_on
el problema aquí es que al usar los apóstrofes estás configurando el valor que se pasa como una cadena, cuando en realidad, como @Shijo dijo en la documentación, la función está esperando una etiqueta o lista, ¡pero no una cadena! Si la lista contiene cada uno de los nombres de las columnas que se pasan tanto para el marco de datos izquierdo como para el derecho, entonces cada nombre de columna debe estar individualmente entre apóstrofes. Con lo que se ha dicho, podemos entender por qué esto es incorrecto:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
Y esta es la forma correcta de utilizar la función:
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])