2014-09-18 19 views
7

Der Versuch, die Designprinzipien einiger Features der Pandas zu verstehen.Warum iteriert Pandas standardmäßig über DataFrame-Spalten?

Wenn ich einen Datenrahmen mit 3560 Zeilen und 18 Spalten haben, dann

len(frame) 

3560, aber

len([a for a in frame]) 

ist 18.

Vielleicht fühlt sich dies natürlich jemand kommen aus R; für mich fühlt es sich nicht sehr "Pythonic" an. Gibt es irgendwo eine Einführung in die zugrundeliegenden Designprinzipien für Pandas?

Antwort

14

Ein DataFrame ist in erster Linie eine spaltenbasierte Datenstruktur. Unter der Haube sind die Daten im DataFrame in Blöcken gespeichert. Grob gesagt gibt es einen Block für jeden dtype. Jede Spalte hat einen dtyp. Der Zugriff auf eine Spalte kann also durch Auswählen der entsprechenden Spalte aus einem einzelnen Block erfolgen. Im Gegensatz dazu erfordert die Auswahl einer einzelnen Zeile die Auswahl der entsprechenden Zeile aus jedem Block und dann die Bildung einer neuen Serie und das Kopieren der Daten aus jeder Blockreihe in die Serie. Das Iterieren durch Zeilen eines DataFrame ist also (unter der Haube) kein so natürlicher Vorgang wie das Iterieren von Spalten.

Wenn Sie die Zeilen durchlaufen müssen, können Sie jedoch immer noch df.iterrows() aufrufen. Sie sollten vermeiden, df.iterrows wenn möglich aus dem gleichen Grund zu verwenden, warum es unnatürlich ist - es erfordert das Kopieren, was den Prozess langsamer macht als das Durchlaufen von Spalten.

4

Es gibt eine anständige Erklärung in der docs - Iteration für Pandas DataFrames soll "dict-like" sein, so dass die Iteration über die Schlüssel (die Spalten) ist.

Es ist wohl ein wenig verwirrend, dass die Iteration für die Serie über den Werten liegt, aber wie die Dokumentation feststellt, liegt das daran, dass sie "arrayähnlicher" sind.

Verwandte Themen