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 cómo = 'izquierda' 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 el objeto y las columnas int64. Si desea continuar, debe usar pd.concat
Pero no deseo usar concat ya que quiero fusionar los árboles, no solo agregarlos.
Otro comportamiento que me resulta extraño es que mi código funciona si guardo el primer df en .csv y luego cargo ese .csv en un marco de datos.
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 una molestia tener que hacer eso.