You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用while循环计算连续均值时出现NaN问题及优化需求

问题解决与优化方案

循环错误原因及修复

你的循环后续输出NaN是因为索引更新逻辑错误:

  • 初始i=0,j=20,第一次取0:20是21行(loc是闭区间,包含两端索引)
  • 错误的更新语句i += j + 1会让i跳变到21,下一次j=40,取21:40是20行,但再下一次i=21+40+1=62,j=60,此时i>j,data.loc[i:j]返回空DataFrame,均值自然为NaN。

修复后的循环代码:

import numpy as np

mean_list = []
i = 0
batch_size = 20
total_rows = df.shape[0]

while i < total_rows:
    # 取从i开始的最多batch_size行,兼容最后一批不足20行的情况
    end_idx = min(i + batch_size - 1, total_rows - 1)
    data_1 = df.loc[i:end_idx, "RATED_TORQUE_ACTUAL"]
    mean = np.mean(data_1)
    mean_list.append(round(mean, 2))
    # 每次步进batch_size行,确保索引连续
    i += batch_size

print(mean_list)

额外说明:

  • 无需每次复制整个DataFrame,直接切片目标列即可,节省内存
  • 用min()处理最后一批行数不足20的边界情况

更优方案:用Pandas原生分组实现

Pandas的groupby可以更简洁高效地完成批量均值计算,完全替代手动循环:

# 按每20行分组,计算指定列均值并保留2位小数
mean_list = df.groupby(df.index // 20)["RATED_TORQUE_ACTUAL"].mean().round(2).tolist()

原理:

  • df.index //20会把索引0-19映射为0,20-39映射为1,以此类推,自动实现每20行一组
  • 原生分组方法代码更简洁,性能比手动循环更优,还能自动处理最后一批不足20行的情况

另外补充:你筛选CELLNO=1后df.shape仍为(1271,19),说明原数据所有行的CELLNO都是1,这一步筛选可以省略。

内容的提问来源于stack exchange,提问作者ThunderBolt_23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:17:08