Estoy tratando de unir dos marcos de datos de pandas usando dos columnas:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
pero recibí 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!
python
python-3.x
pandas
join
edamame
fuente
fuente
left_on
yright_on
debe ser una lista de cadenas, no una cadena que parezca una lista.Respuestas:
Prueba esto
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
fuente
left_on
yright_on
son igualesa
yb
, ¿podemos usaron = ['a', 'b']
?El problema aquí es que al usar los apóstrofos, está configurando el valor que se pasa como una cadena, cuando, de hecho, como dijo @Shijo en la documentación, la función espera una etiqueta o lista, ¡pero no una cadena! Si la lista contiene cada uno de los nombres de las columnas que los seres pasaron para el marco de datos izquierdo y derecho, entonces cada nombre de columna debe estar individualmente dentro de los apóstrofes. Con lo dicho, podemos entender por qué esto es inccorect:
Y esta es la forma correcta de usar la función:
fuente
Otra forma de hacer esto:
new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')
fuente