python - 迭代 Pandas DataFrame 与迭代其列名相同吗?

标签 python pandas dataframe

我曾认为 Pandas DataFrame 基本上表示为列的集合。也就是说,我认为以下两行代码会生成相同的系列列表(对于某些任意 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 的列。)

最佳答案

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

[item for item in df]

您正在调用 df.__iter__() 方法,该方法依次调用 df._info_axis 属性,然后调用 df._info_axis_name 属性,对于 Dataframe 来说,该属性是列名称列表。

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

关于python - 迭代 Pandas DataFrame 与迭代其列名相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641538/

相关文章:

python - 有没有办法在拉取更新之前查看中央 Mercurial 存储库是否有可用的更新?

python - Django 按多个字段分组

python - 简化 Python 中多重哈希的使用

python - Pandas 的有条件替换

python - 获取两个日期 Pandas 之间的周数

python - 在构造函数中子类化 Pandas 数据框和设置字段

python - 使用 python 正则表达式在 HTML 中查找随机句子

python - 如何对 Dask 数据框组中的值进行排序?

r - 如何将结构松散的文本文件中的表格读入 R 中的数据框?

java - 如何解析 tensorflow 模型的字符串输出