次の2つのデータフレームがあります。
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
これら2つのデータフレームを結合しようとすると:
join_df = df_a.join(df_b,on='mukey',how='left')
エラーが表示されます:
*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')
これはなぜですか?データフレームには共通の「mukey」値があります。
投稿したデータのスニペットのエラーは少しわかりにくいです。共通の値がないため、値が重複しないため、左側と右側に接尾辞を指定する必要があるため、結合操作が失敗します。
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
は、この制限がないため機能します。
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
.join()
関数は、渡された引数データセットのindex
を使用しているため、代わりにset_index
を使用するか、.merge
関数を使用する必要があります。
あなたのケースで動作するはずの2つの例を見つけてください:
join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')
または
join_df = df_a.merge(df_b, on='mukey', how='left')
このエラーは、2つのテーブルに同じ列名を持つ1つ以上の列名があることを示しています。エラーメッセージは次のように変換されます。「両方のテーブルに同じ列が表示されていますが、どちらか一方を取り込む前に名前を変更するように指示されていません」
Del df ['column name']を使用して、他の列から取り込む前に列の1つを削除するか、lsuffixを使用して元の列を書き直すか、rsuffixを使用して列を変更します。
df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')