Ce sont mes deux trames de données enregistrées dans deux 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
J'essaie de fusionner ces deux en utilisant ce code:
new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')
Le how = 'left' est ajouté car j'ai moins de points de données dans mon ranking_df que dans mon df standard.
Le comportement attendu est en tant que tel:
> 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
Mais je reçois cette erreur:
ValueError: vous essayez de fusionner sur les colonnes objet et int64. Si vous souhaitez continuer, vous devez utiliser pd.concat
Mais je ne souhaite pas utiliser concat car je veux fusionner les arbres et pas seulement les ajouter.
Un autre comportement bizarre dans mon esprit est que mon code fonctionne si j'enregistre le premier df dans .csv et que je charge ensuite ce .csv dans une trame de données.
Le code pour cela:
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')
Je pense que cela a à voir avec le paramètre index_col = 0. Mais je n'ai aucune idée de le réparer sans avoir à le sauvegarder, cela n'a pas beaucoup d'importance mais c'est une sorte de gêne que je dois faire ça.
Vérifiez d'abord le type de colonnes que vous souhaitez fusionner. Vous verrez l'un d'eux est une chaîne où l'autre est int. Puis convertissez-le en int comme codes suivants
df. ["quelque chose"] = df ["quelque chose"]. astype (int)
merged = df.merge [df1, on = "something"]