2017-06-19 59 views
2

我曾以爲熊貓DataFrame基本上被表示爲一個列的集合。也就是說,我認爲下面的代碼會產生系列的相同的​​列表(對於一些任意的數據幀df)兩行:迭代Pandas DataFrame與迭代其列名相同嗎?

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

但很顯然,他們是完全不同的;治療df像一個可重複的,並加強通過它是完全一樣的,通過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 

這是爲什麼?這對我來說似乎很不直觀。

(需要明確的是:我不問如何在數據幀得到列的列表,或如何分步通過數據框的列。)

回答

2

當您嘗試將直接DF迭代像:

[item for item in df] 

您所呼叫的DF .__ ITER __()方法,進而調用df._info_axis屬性,然後df._info_axis_name屬性這對於數據幀是列名的列表。

當您調用df [col_name]時,您正在切片數據幀的列。