Sono così confuso con diversi metodi di indicizzazione utilizzando ilocin Panda.
Supponiamo che sto cercando di convertire un Dataframe 1-d in un Dataframe 2-d. Innanzitutto ho il seguente Dataframe 1-d
a_array = [1,2,3,4,5,6,7,8]
a_df = pd.DataFrame(a_array).T
E ho intenzione di convertirlo in un Dataframe 2-d delle dimensioni di 2x4. Comincio preselezionando il Dataframe 2-d come segue:
b_df = pd.DataFrame(columns=range(4),index=range(2))
Quindi uso for-loop per aiutarmi a convertire a_df(1-d) in b_df(2-d) con il seguente codice
for i in range(2):
b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4]
Mi dà solo i seguenti risultati
0 1 2 3
0 1 2 3 4
1 NaN NaN NaN NaN
Ma quando sono passato b_df.iloc[i,:]a b_df.iloc[i][:]. Il risultato è corretto come il seguente, che è quello che voglio
0 1 2 3
0 1 2 3 4
1 5 6 7 8
Qualcuno potrebbe spiegarmi qual è la differenza tra .iloc[i,:]e .iloc[i][:]è, e perché ha .iloc[i][:]funzionato nel mio esempio sopra ma non.iloc[i,:]
b_df.iloc[1] = a_df.iloc[0, 4:8]assegna una serie con indice[4, 5, 6, 7]a una serie con indice[0, 1, 2, 3]. Non vi è alcuna sovrapposizione, quindiNaNsi assegnano a tutti gli elementi. Fino a questo punto ha senso per me. Ma come te non sono chiaro il motivo per cuib_df.iloc[1][:] = ...si comporta diversamente: ispezionare gli oggettib_df.iloc[1]eb_df.iloc[1][:]non rivela alcuna differenza tra gli indici. La mia ipotesi migliore sarebbe che l'assegnazione diretta a una copia ([:]) sia trattata come un caso speciale da Pandas che lo fa ignorare l'indice del cessionario e creare questa discrepanza.