迭代Pandas DataFrame与迭代它的Column-Names相同?

时间:2017-06-19 23:41:32

标签: python pandas dataframe

我原以为Pandas DataFrame基本上表示为列的集合。也就是说,我认为以下两行代码会生成相同的Series列表(对于某些任意DataFrame df):

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

这是为什么?这对我来说似乎非常不直观。

(要明确:我不是问如何获取DataFrame中的列列表,或者如何单步执行DataFrame的列。)

1 个答案:

答案 0 :(得分:2)

当您尝试直接迭代df时:

[item for item in df]

您正在调用df .__ iter __()方法,该方法又调用df._info_axis属性,然后调用df._info_axis_name属性,对于Dataframe,该属性是列名列表。

当你调用df [col_name]时,你正在切割数据帧的列。