iloc
Pandalarda kullanılan farklı indeksleme yöntemleri ile çok karıştım.
Diyelim ki bir 1-d Dataframe'i 2-d Dataframe'e dönüştürmeye çalışıyorum. İlk olarak aşağıdaki 1-D Dataframe var
a_array = [1,2,3,4,5,6,7,8]
a_df = pd.DataFrame(a_array).T
Ve bunu 2 boyutlu bir Dataframe'e dönüştüreceğim 2x4
. 2-boyutlu Dataframe'i aşağıdaki gibi hazırlayarak başlıyorum:
b_df = pd.DataFrame(columns=range(4),index=range(2))
Daha sonra for-loop'u a_df
(1-d) 'i b_df
(2-d)' ye aşağıdaki kodla dönüştürmeme yardımcı olmak için kullanıyorum
for i in range(2):
b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4]
Sadece bana aşağıdaki sonuçları veriyor
0 1 2 3
0 1 2 3 4
1 NaN NaN NaN NaN
Ama değiştim zaman b_df.iloc[i,:]
için b_df.iloc[i][:]
. Sonuç aşağıdaki gibi doğru, istediğim bu
0 1 2 3
0 1 2 3 4
1 5 6 7 8
Herkes bana açıklayabilir misiniz neyi arasındaki fark .iloc[i,:]
ve .iloc[i][:]
ve neden .iloc[i][:]
yukarıda ama benim örnekte çalıştı.iloc[i,:]
b_df.iloc[1] = a_df.iloc[0, 4:8]
atar endeksi ile bir dizi[4, 5, 6, 7]
indeksi olan bir dizi[0, 1, 2, 3]
. Hiçbir çakışma yoktur, bu nedenleNaN
tüm öğelere atanır. Bu noktaya kadar bana mantıklı geliyor. Ama senin gibi ben niye belirsiz duyuyorumb_df.iloc[1][:] = ...
davranacağını nesneleri farklı-teftişb_df.iloc[1]
veb_df.iloc[1][:]
indeksleri arasında hiçbir fark ortaya koymaktadır. En iyi tahminim, doğrudan bir kopyaya ([:]
) atanmasının, tahsis eden kişinin dizinini göz ardı etmesini ve bu tutarsızlığı yaratmasını sağlayan Pandas tarafından özel bir durum olarak ele alınmasıdır.