为什么我在没有NaN的情况下会收到“空切片的均值”警告?
我有一个数据表叫做 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 就聪明地给我发出了一个“空切片的平均值”的警告。