2つのpandasデータフレームを、2つのカラムを使って結合しようとしています。
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
を使用して結合しようとしていますが、次のようなエラーが発生しました。
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'
何か正しい方法はないでしょうか?ありがとうございます。
お試しください
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])
http://pandas.pydata.org/pandas-docs/version/0.19.1/generated/pandas.DataFrame.merge.html
left_on : ラベルまたはリスト、または配列のようなもの 左側で結合するフィールド名 DataFrame.の長さのベクターまたはベクターのリストを指定できます。 DataFrameの結合キーとして特定のベクトルを使用するには 列
right_on : ラベルまたはリスト、または配列のような結合するフィールド名 右側のDataFrameの> または左側のDataFrameのベクター/リスト。
ここでの問題は、アポストロフィーを使用することで、渡される値を文字列に設定していることです。実際には、@Shijo氏がドキュメントで述べているように、この関数は文字列ではなく、ラベルやリストを想定しています。リストに、左右のデータフレームで渡された各カラム名が含まれている場合、各カラム名は個別にアポストロフィー内になければなりません。これまで述べてきたことで、なぜこれが不正確なのかを理解することができます。
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
そして、これがこの関数の正しい使用方法です。
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])