循环访问 Pandas 数据帧与循环访问其列名相同



我原以为Pandas 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

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

(需要明确的是:我不是在问如何获取数据帧中的列列表,或者如何单步执行数据帧的列。

当你尝试直接迭代 df 时,如下所示:

[item for item in df]

您正在调用 df.__iter__(( 方法,该方法又调用 df._info_axis 属性,然后调用 df._info_axis_name 属性,对于数据帧,该属性是列名列表。

调用 df[col_name] 时,正在对数据帧的列进行切片。

最新更新