Comment réparer : vous essayez de fusionner des colonnes objet et int64



Une erreur que vous pouvez rencontrer lors de l’utilisation de pandas est :

ValueError: You are trying to merge on int64 and object columns.
            If you wish to proceed you should use pd.concat

Cette erreur se produit lorsque vous tentez de fusionner deux DataFrames pandas mais que la colonne sur laquelle vous fusionnez est un objet dans un DataFrame et un entier dans l’autre DataFrame.

L’exemple suivant montre comment corriger cette erreur dans la pratique.

Comment reproduire l’erreur

Supposons que nous créions les deux DataFrames pandas suivants :

import pandas as pd

#create DataFrame
df1 = pd.DataFrame({'year': [2015, 2016, 2017, 2018, 2019, 2020, 2021],
                    'sales': [500, 534, 564, 671, 700, 840, 810]})

df2 = pd.DataFrame({'year': ['2015', '2016', '2017', '2018', '2019', '2020', '2021'],
                    'refunds': [31, 36, 40, 40, 43, 70, 62]})

#view DataFrames
print(df1)

   year  sales
0  2015    500
1  2016    534
2  2017    564
3  2018    671
4  2019    700
5  2020    840
6  2021    810

print(df2)

   year  refunds
0  2015       31
1  2016       36
2  2017       40
3  2018       40
4  2019       43
5  2020       70
6  2021       62

Supposons maintenant que nous tentions de fusionner les deux DataFrames :

#attempt to merge two DataFrames
big_df = df1.merge(df2, on='year', how='left')

ValueError: You are trying to merge on int64 and object columns.
            If you wish to proceed you should use pd.concat

Nous recevons une ValueError car la variable année dans le premier DataFrame est un entier mais la variable année dans le deuxième DataFrame est un objet.

Comment réparer l’erreur

Le moyen le plus simple de corriger cette erreur consiste simplement à convertir la variable d’année du deuxième DataFrame en un entier, puis à effectuer la fusion.

La syntaxe suivante montre comment procéder :

#convert year variable in df2 to integer
df2['year']=df2['year'].astype(int)

#merge two DataFrames
big_df = df1.merge(df2, on='year', how='left')

#view merged DataFrame
big_df

	year	sales	refunds
0	2015	500	31
1	2016	534	36
2	2017	564	40
3	2018	671	40
4	2019	700	43
5	2020	840	70
6	2021	810	62

Notez que nous ne recevons aucune ValueError et que nous parvenons à fusionner avec succès les deux DataFrames en un seul.

Ressources additionnelles

Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :

Comment réparer : les colonnes se chevauchent mais aucun suffixe n’est spécifié
Comment réparer : l’objet ‘numpy.ndarray’ n’a pas d’attribut ‘append’
Comment réparer : si vous utilisez toutes les valeurs scalaires, vous devez transmettre un index

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *