2014-09-18 47 views
7

Cercando di capire la logica del design dietro alcune delle caratteristiche di Pandas.Perché Pandas esegue iterazioni sulle colonne DataFrame per impostazione predefinita?

Se ho un dataframe con 3560 righe e 18 colonne, quindi

len(frame) 

è 3560, ma

len([a for a in frame]) 

è 18.

Forse questo si sente naturale a qualcuno proveniente da R; per me non mi sembra molto "Pythonic". C'è un'introduzione alle motivazioni del design sottostante per Pandas da qualche parte?

risposta

14

Un DataFrame è principalmente una struttura di dati basata su colonne. Sotto il cofano, i dati all'interno di DataFrame sono memorizzati in blocchi. In parole povere c'è un blocco per ogni dtype. Ogni colonna ha un dtype. Quindi l'accesso a una colonna può essere fatto selezionando la colonna appropriata da un singolo blocco. Al contrario, selezionando una singola riga è necessario selezionare la riga appropriata da ciascun blocco e quindi formare una nuova serie e copiare i dati dalla fila di ogni blocco nella serie. Quindi, scorrere le righe di un DataFrame è (sotto la cappa) non come un processo naturale come iterando attraverso le colonne.

Se è necessario scorrere le righe, è comunque possibile chiamare df.iterrows(). Dovresti evitare di usare df.iterrows se possibile per lo stesso motivo per cui è innaturale - richiede la copia che rende il processo più lento di iterare attraverso le colonne.

4

C'è una spiegazione decente in docs - iterazione per Pandas DataFrames è pensata per essere "dict-like", quindi l'iterazione è sulle chiavi (le colonne).

Probabilmente è un po 'di confusione che l'iterazione di Series superi i valori, ma come notano i documenti, è perché sono più "array".

Problemi correlati