İki sütun kullanarak iki pandas veri çerçevesini birleştirmeye çalışıyorum:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
ancak aşağıdaki hatayı aldım:
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]'
Bunu yapmanın doğru yolunun ne olması gerektiği hakkında bir fikriniz var mı? Teşekkürler!
Bunu dene.
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 : solda birleştirilecek etiket veya liste veya dizi benzeri Alan adları DataFrame. uzunluğunda bir vektör veya vektör listesi olabilir. yerine belirli bir vektörü birleştirme anahtarı olarak kullanmak için DataFrame sütunlar
right_on : etiket veya liste ya da dizi benzeri Birleştirilecek alan adları in right DataFrame or vector/list of vectors per left_on docs
Buradaki sorun, kesme işaretlerini kullanarak aktarılan değeri bir dize olarak ayarlamanızdır, oysa @Shijo'nun belgelerden belirttiği gibi, işlev bir dize değil, bir etiket veya liste beklemektedir! Liste, hem sol hem de sağ veri çerçevesi için geçirilen sütunların adlarının her birini içeriyorsa, her sütun adı ayrı ayrı kesme işaretleri içinde olmalıdır. Belirtilenlerle, bunun neden uygunsuz olduğunu anlayabiliriz:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
Bu da fonksiyonu kullanmanın doğru yoludur:
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])