2017-06-19 11 views
2

私はPandas DataFrameが基本的に列のコレクションとして表現されていると思っていました。それは私が(いくつかの任意DATAFRAME df用)シリーズの同じリストを生成するコードの次の2行を考え、次のとおりです。Pandas DataFrameの反復処理は、列名の反復処理と同じですか?

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

しかし、どうやら、彼らは非常に異なっています。

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) 

出力:

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

なぜこれがあるiteratableとそれを介してステッピングようdfを処理することは、もちろん単なる列名のリストである、df.columnsをステップ実行とまったく同じですか?これは私にとって非常に直感的ではないようです。

(明確にするために:私は、データフレームの列のリストを取得する方法を求めて、あるいはどのようにデータフレームの列をステップ実行しないようにしています。)

答えて

2

をあなたが直接DFを反復処理しようとすると、以下のような:

[item for item in df] 

あなたは順番にdf._info_axis属性と呼び出したDF .__ ITER __()メソッドを呼び出している、その後のデータフレームの列名のリストがあるdf._info_axis_name属性。

df [col_name]を呼び出すと、データフレームの列がスライスされます。