J'ai 2 trames de données suivantes:
df_a =
mukey DI PI
0 100000 35 14
1 1000005 44 14
2 1000006 44 14
3 1000007 43 13
4 1000008 43 13
df_b =
mukey niccdcd
0 190236 4
1 190237 6
2 190238 7
3 190239 4
4 190240 7
Quand j'essaye de joindre ces 2 cadres de données:
join_df = df_a.join(df_b,on='mukey',how='left')
Je reçois l'erreur:
*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')
Pourquoi cela est-il ainsi? Les cadres de données ont des valeurs communes de "mukey".
Votre erreur sur l'extrait de données que vous avez posté est un peu cryptique. En effet, comme il n'y a pas de valeurs communes, l'opération de jointure échoue car les valeurs ne se chevauchent pas. Vous devez donc fournir un suffixe pour les côtés gauche et droit:
In [173]:
df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
Out[173]:
mukey_left DI PI mukey_right niccdcd
index
0 100000 35 14 NaN NaN
1 1000005 44 14 NaN NaN
2 1000006 44 14 NaN NaN
3 1000007 43 13 NaN NaN
4 1000008 43 13 NaN NaN
merge
fonctionne car il n'a pas cette restriction:
In [176]:
df_a.merge(df_b, on='mukey', how='left')
Out[176]:
mukey DI PI niccdcd
0 100000 35 14 NaN
1 1000005 44 14 NaN
2 1000006 44 14 NaN
3 1000007 43 13 NaN
4 1000008 43 13 NaN
La fonction .join()
utilise la index
du jeu de données d'argument transmis. Vous devez donc utiliser set_index
ou utiliser la fonction .merge
.
Veuillez trouver les deux exemples qui devraient fonctionner dans votre cas:
join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')
ou
join_df = df_a.merge(df_b, on='mukey', how='left')
Cette erreur indique que les deux tables ont le ou les noms de colonne portant le même nom. Le message d'erreur se traduit par: "Je peux voir la même colonne dans les deux tableaux, mais vous ne m'avez pas dit de le renommer non plus avant d'en importer un"
Soit vous voulez supprimer une des colonnes avant de la faire venir de l'autre en utilisant del df ['nom de la colonne'], soit vous utilisez lsuffix pour réécrire la colonne d'origine, ou bien rsuffix pour renommer celle qui l'a importée.
df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')