2017-06-19 57 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]时,您正在切片数据帧的列。