为什么我在没有NaN的情况下会收到“空切片的均值”警告?

2 投票
2 回答
53 浏览
提问于 2025-04-14 17:59

我有一个数据表叫做 keptdata。我写了一个循环来查看这个数据表的每一行,有时候我需要计算之前的值的平均数。

这是我代码中相关的一行,它会产生一个警告:

avg = np.average(keptdata.iloc[i-500:i].price[keptdata.price != 0])

在这里,i 是在循环中用来遍历的变量,price 是数据表中的一列,我只在 price 不为零的时候才把这一行的值算入平均数。

我为什么会收到警告呢?我在网上查了一下,发现如果数据表中有 NaNs(缺失值),就可能会出现这种警告。但我用 keptdata.isnull.any().any() 检查过了,结果是 false,说明没有缺失值。

还有一种可能是,如果 i-500 变成负数,可能会导致问题。不过我把循环改成从 i = 700 开始,结果还是收到了警告。
如果我去掉 keptdata.price != 0,好像就解决了这个问题,但这样一来,这行代码的逻辑就完全变了。

这个警告的原因能不能解决?除了压制警告,我还有其他选择吗?

2 个回答

1

这个问题是因为你添加的条件引起的,也许你可以把它改成一个简单的if条件,像下面这样:

if keptdata.iloc[i].price!=0:
     avg = np.average(keptdata.iloc[i-500:i].price
2

我搞明白这个问题了。问题出在 keptdata 这个数据表里,price 这一列有至少五百个 0。这就意味着,当我加上条件 keptdata.price != 0 后,就没有数据可以用来计算平均值了,所以 numpy 就聪明地给我发出了一个“空切片的平均值”的警告。

撰写回答