2017-06-19 3 views
2

Ich hatte gedacht, dass ein Pandas DataFrame im Grunde als eine Sammlung von Spalten dargestellt wurde. Das heißt, ich dachte, dass die folgenden zwei Codezeilen die gleichen Listen Series (für einige willkürliche Datenrahmen df) produzieren:Iterieren durch einen Pandas DataFrame ist das gleiche wie Iterating durch seine Spaltennamen?

list1 = [item for item in df] 
list2 = [df[col_name] for col_name in df.columns] 

Aber anscheinend sind sie sehr verschieden sind; nur eine Liste von Spaltennamen Behandlung der df wie ein iteratable und tritt durch sie genau die gleichen wie Schreiten durch df.columns, was natürlich ist:

df = pd.DataFrame({'col_1': [1,2,3,4,5], 'col_2':[5,6,7,8,9]}) 

for a, b in zip(df, df.columns): 
    print(a,b, type(a), type(b), a==b) 

Ausgänge:

col_1 col_1 <class 'str'> <class 'str'> True 
col_2 col_2 <class 'str'> <class 'str'> True 

Warum ist das? Das erscheint mir sehr unspektakulär.

(Um klar zu sein: Ich frage nicht, wie man eine Liste der Spalten in einem Datenrahmen zu erhalten, oder wie durch die Spalten eines Datenrahmens zu dem Schritt.)

Antwort

2

Wenn Sie versuchen, eine df direkt iterieren wie:

[item for item in df] 

Sie rufen die df .__ iter __() -Methode, die wiederum ruft die df._info_axis Attribut und dann das df._info_axis_name Attribut, das für Datenrahmen ist die Liste der Spaltennamen.

Während Sie df [col_name] aufrufen, schneiden Sie die Spalte des Datenrahmens auf.

Verwandte Themen