web-dev-qa-db-fra.com

Essayer de fusionner 2 cadres de données mais obtenir ValueError

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.

52
PEREZje

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"]

0
Erol Erdogan