Saya sangat bingung dengan metode pengindeksan yang berbeda menggunakan ilocdi panda.
Katakanlah saya sedang mencoba mengubah 1-d Dataframe menjadi 2-d Dataframe. Pertama saya memiliki Dataframe 1-d berikut
a_array = [1,2,3,4,5,6,7,8]
a_df = pd.DataFrame(a_array).T
Dan saya akan mengubahnya menjadi 2-d Dataframe dengan ukuran 2x4. Saya mulai dengan menetapkan 2-d Dataframe sebagai berikut:
b_df = pd.DataFrame(columns=range(4),index=range(2))
Kemudian saya menggunakan for-loop untuk membantu saya mengkonversi a_df(1-d) ke b_df(2-d) dengan kode berikut
for i in range(2):
b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4]
Itu hanya memberi saya hasil berikut
0 1 2 3
0 1 2 3 4
1 NaN NaN NaN NaN
Tetapi ketika saya berubah b_df.iloc[i,:]menjadi b_df.iloc[i][:]. Hasilnya benar seperti berikut, yang saya inginkan
0 1 2 3
0 1 2 3 4
1 5 6 7 8
Adakah yang bisa menjelaskan kepada saya apa perbedaan antara .iloc[i,:]dan .iloc[i][:]adalah, dan mengapa .iloc[i][:]bekerja dalam contoh saya di atas tetapi tidak.iloc[i,:]
b_df.iloc[1] = a_df.iloc[0, 4:8]menetapkan seri dengan indeks[4, 5, 6, 7]ke seri dengan indeks[0, 1, 2, 3]. Tidak ada tumpang tindih jadiNaNditugaskan untuk semua elemen. Sampai pada titik ini masuk akal bagi saya. Tetapi seperti Anda, saya tidak jelas mengapab_df.iloc[1][:] = ...berperilaku berbeda — memeriksa objekb_df.iloc[1]danb_df.iloc[1][:]tidak menunjukkan perbedaan di antara indeks. Tebakan terbaik saya adalah bahwa menetapkan langsung ke salinan ([:]) diperlakukan sebagai kasus khusus oleh Pandas yang membuatnya mengabaikan indeks penerima dan membuat perbedaan ini.