Intentando fusionar 2 marcos de datos pero obtener ValueError

Estos son mis dos marcos de datos guardados en dos variables:

> print(df.head()) > club_name tr_jan tr_dec year 0 ADO Den Haag 1368 1422 2010 1 ADO Den Haag 1455 1477 2011 2 ADO Den Haag 1461 1443 2012 3 ADO Den Haag 1437 1383 2013 4 ADO Den Haag 1386 1422 2014 > print(rankingdf.head()) > club_name ranking year 0 ADO Den Haag 12 2010 1 ADO Den Haag 13 2011 2 ADO Den Haag 11 2012 3 ADO Den Haag 14 2013 4 ADO Den Haag 17 2014 

Estoy tratando de fusionar estos dos usando este código:

 new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left') 

Se agrega el how = ‘left’ porque tengo menos puntos de datos en mi ranking_df que en mi df estándar.

El comportamiento esperado es como tal:

 > print(new_df.head()) > club_name tr_jan tr_dec year ranking 0 ADO Den Haag 1368 1422 2010 12 1 ADO Den Haag 1455 1477 2011 13 2 ADO Den Haag 1461 1443 2012 11 3 ADO Den Haag 1437 1383 2013 14 4 ADO Den Haag 1386 1422 2014 17 

Pero me sale este error:

ValueError: está intentando fusionar en el objeto y en las columnas int64. Si desea continuar debe usar pd.concat

Pero no deseo usar concat porque quiero fusionar los árboles, no solo agregarlos.

Otro comportamiento que me parece extraño es que mi código funciona si guardo la primera df en .csv y luego cargo ese archivo .csv en un dataframe.

El código para eso:

 df = pd.DataFrame(data_points, columns=['club_name', 'tr_jan', 'tr_dec', 'year']) df.to_csv('preliminary.csv') df = pd.read_csv('preliminary.csv', index_col=0) ranking_df = pd.DataFrame(rankings, columns=['club_name', 'ranking', 'year']) new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left') 

Creo que tiene que ver con el parámetro index_col = 0. Pero no tengo idea de arreglarlo sin tener que guardarlo, no importa mucho, pero es como una molestia que tenga que hacer eso.

En uno de sus marcos de datos, el año es una cadena y el otro es un int64, puede convertirlo primero y luego unirse (por ejemplo, df['year']=df['year'].astype(int) o como RafaelC sugirió df.year.astype(int) )