Hai, saya memiliki kerangka data berikut:
> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1
> df2
concept
0 A
1 B
Bagaimana cara menggabungkan indeks untuk mendapatkan:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Saya bertanya karena ini adalah pemahaman saya merge()
yaitu df1.merge(df2)
menggunakan kolom untuk melakukan pencocokan. Bahkan, melakukan ini saya dapatkan:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
self._validate_specification()
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on
Apakah praktik yang buruk untuk menggabungkan pada indeks? Apakah itu tidak mungkin? Jika demikian, bagaimana saya bisa menggeser indeks ke kolom baru yang disebut "indeks"?
Terima kasih
df1.join(df2)
Jawaban:
Gunakan
merge
, yang merupakan gabungan internal:Atau
join
, yang dibiarkan bergabung secara default:Atau
concat
, yang merupakan join luar secara default:Sampel :
sumber
.transpose()
salah satu dfs Anda untuk menyinkronkan indeks - itu masalah sayaconcat
harus meletakkan df di kurung sementarajoin
danmerge
tidak?dfs = [df1, df2, df3,... dfn]
dan kemudiandf = pd. concat(dfs)
Anda dapat menggunakan concat ([df1, df2, ...], axis = 1) untuk menggabungkan dua atau lebih DF yang selaras dengan indeks:
atau digabung untuk digabungkan dengan bidang / indeks khusus:
atau bergabung untuk bergabung dengan indeks:
sumber
Secara default:
join
adalah join kiri kolom-bijaksanapd.merge
adalah join dalam kolom-bijaksanapd.concat
adalah join luar bijaksana-barispd.concat
:mengambil argumen yang dapat diterima. Dengan demikian, itu tidak dapat mengambil DataFrames secara langsung (menggunakan
[df,df2]
)Dimensi DataFrame harus cocok dengan sumbu
Join
danpd.merge
:dapat mengambil argumen DataFrame
sumber
Bug konyol yang membuat saya: gabungan gagal karena indeks
dtypes
berbeda. Ini tidak jelas karena kedua tabel adalah tabel pivot dari tabel asli yang sama. Setelah itureset_index
, indeks-indeks itu terlihat identik di Jupyter. Itu hanya terungkap saat menyimpan ke Excel ...Diperbaiki dengan:
df1[['key']] = df1[['key']].apply(pd.to_numeric)
Semoga ini menyelamatkan seseorang satu jam!
sumber
Jika Anda ingin bergabung dengan dua dataframe dalam panda, Anda cukup menggunakan atribut yang tersedia seperti
merge
atauconcatenate
. Misalnya jika saya memiliki dua kerangka datadf1
dandf2
saya dapat bergabung dengan:sumber