2014-09-18 17 views
7

Próba zrozumienia racjonalności projektu niektórych funkcji Pandy.Dlaczego Pandy domyślnie przechodzą przez kolumny DataFrame?

Jeśli mam DataFrame z 3560 wierszy i 18 kolumn, a następnie

len(frame) 

jest 3560, ale

len([a for a in frame]) 

jest 18.

Może ten ktoś czuje naturalne pochodzące z R; dla mnie to nie jest bardzo "Pythoniczne". Czy istnieje jakiś wstęp do racjonalnego uzasadnienia projektu dotyczącego Pand?

Odpowiedz

14

DataFrame to przede wszystkim struktura danych oparta na kolumnach. Pod maską dane wewnątrz DataFrame są przechowywane w blokach. Z grubsza rzecz biorąc, dla każdego typu dtype jest jeden blok. Każda kolumna ma jeden typ dtype. W ten sposób dostęp do kolumny można uzyskać, wybierając odpowiednią kolumnę z pojedynczego bloku. Natomiast wybranie pojedynczego wiersza wymaga wybrania odpowiedniego wiersza z każdego bloku, a następnie utworzenia nowej serii i skopiowania danych z każdego wiersza bloku do serii. Tak więc, powtarzanie przez wiersze obiektu DataFrame (pod maską) nie jest tak naturalnym procesem jak iterowanie po kolumnach.

Jeśli potrzebujesz powtórzyć kolejne wiersze, nadal możesz dzwonić pod numer df.iterrows(). Powinieneś unikać używania df.iterrows, jeśli to możliwe, z tego samego powodu, dla którego jest nienaturalny - wymaga on kopiowania, który sprawia, że ​​proces jest wolniejszy niż iterowanie po kolumnach.

4

Jest przyzwoite wytłumaczenie w docs - iteracja dla Pandas DataFrames ma być "dyktowana", więc iteracja jest nad kluczami (kolumnami).

Prawdopodobnie jest trochę mylące, że iteracja dla serii przekracza wartości, ale jak zauważają docs, to dlatego, że są bardziej "tablicowe".

Powiązane problemy