如何确保for循环完整遍历整个pandas DataFrame?
循环提前终止的核心原因
直接对pandas DataFrame对象做for x in df迭代时,遍历的目标是DataFrame的列名,不是行数据,循环总次数等于DataFrame的列数,和行数无关。
你得到的列表长度为87,恰好说明你的DataFrame总共有87列,循环跑完了所有列名的迭代自然终止,根本没有遍历20434行的逻辑,自然得不到对应长度的列表。
另外你的代码还存在两个隐性问题:
- 自定义变量命名为
list,会覆盖Python内置的list类型,后续如果要调用list相关方法会报错 - 循环内完全没有使用迭代得到的
row变量,靠手动维护自增索引n取值,哪怕修正了遍历方式,也很容易出现索引错位的问题
正确实现方案
你的需求不需要写显式for循环,pandas的向量化接口运行效率比手写行循环高几十到上百倍,代码也更简洁:
# 直接计算16到20列(左闭右开,对应第17到20列)的行方向均值,默认自动跳过NaN值 df["指定列均值"] = df.iloc[:, 16:20].mean(axis=1, skipna=True)
如果确实需要拿到单独的均值列表,直接调用.tolist()即可:
mean_list = df.iloc[:, 16:20].mean(axis=1, skipna=True).tolist() # 此时len(mean_list)必然等于len(df)也就是20434
如果一定要用循环实现(极度不推荐,数据量大时运行速度极慢),需要用专门的行遍历方法:
import numpy as np mean_list = [] # 用iterrows()逐行遍历,返回值第一个是行索引,第二个是行数据 for _, row in df.iterrows(): mean_list.append(np.nanmean(row.iloc[16:20]))
内容的提问来源于stack exchange,提问作者shrey_shankar
相关产品推荐
相关产品推荐

