ValueError:值都是 NaN?

Posted

技术标签:

【中文标题】ValueError:值都是 NaN?【英文标题】:ValueError: values are all NaN? 【发布时间】:2021-09-04 04:20:36 【问题描述】:

谁能告诉我在代码中哪里出错了,因为值都是我不想要的 NaN。对于每个 RSIndex 值,我希望有一系列平均高 25 个以前的 RSIndex 值(您可以将其视为回溯期)。

def AvgHigh(ser, src, cnt, val) :
    total = 0.0
    count = 0
    for i in (0, ser) :
        for a in range(i, i+cnt) :
            if src[a] > val :
                count = count + 1
                total = total + src[a]
            elif src[a] <= val :
                count = count + 0
                total = total + 0
        return round(total / count)

df['RSI_high'] = pd.Series(AvgHigh(len(df['RSIndex']), df['RSIndex'], 25, 52)).fillna(0)

dataframe image

【问题讨论】:

AvgHigh 只返回一个值。你期待它做什么?您是否可能打算使用yield 而不是return,以便为系列中的每个项目返回一个值?如果是这样,那么您还需要 for i in range(ser): 而不是只遍历两个值。 非常感谢蒂姆,是的,这就是我的意思,我希望每个项目都有一个高价值的参考,所以产量确实有很大帮助,是的,我错过了范围功能,但是当我再次运行时,它给了我一个 keyError len(df['RSIndex]) 是 29983 File "C:\Users\RAHUL\AppData\Roaming\Python\Python39\site-packages\pandas\core\indexes\range.py", line 353, in get_loc raise KeyError(key) from err KeyError: 29983 你明白为什么,不是吗?列表中有 29983 项。当您到达项目 29982 时,您仍在向前看 25 个项目,这些项目正好在列表的末尾。也许你的范围应该是range(ser-cnt) 非常感谢@TimRoberts,你这东西成功了,干杯 【参考方案1】: 你真的不需要循环,可以很简单地被矢量化 首先筛选大于指定值的行 使用head() 减少所需的行数 那么它只是mean()
df = pd.DataFrame("RSIndex":np.random.uniform(61,68,200))

# really don't need length of series, so "ser" argument is redundant    
def AvgHigh(ser, src, cnt, val):
    return src.loc[src.gt(val)].head(cnt).mean()

# df['RSI_high'] = pd.Series(AvgHigh(len(df['RSIndex']), df['RSIndex'], 25, 52)).fillna(0)
df['RSI_high'] = AvgHigh(len(df['RSIndex']), df['RSIndex'], 25, 52)
df

取样

RSIndex RSI_high
0 65.9272 65.0022
1 67.5969 65.0022
2 63.9528 65.0022
3 67.0719 65.0022
4 64.2278 65.0022
5 64.9158 65.0022
6 66.0637 65.0022
7 66.3771 65.0022
8 66.9548 65.0022
9 63.3385 65.0022

【讨论】:

感谢@RobRaymond 提出了一种有效的方法,我试过了,但这只是给我整个数据框前 ​​25 行的平均值,因为我得到的最终值在整个数据帧中都是相同的数据框,我想要窗口 25 的滚动平均值,它将 ref 更改为 RSIndex 值

以上是关于ValueError:值都是 NaN?的主要内容,如果未能解决你的问题,请参考以下文章

当所有值都是 NaN 时,Pandas 重新采样以返回 NaN

ES6 - Object.is()

Pandas:ValueError:无法将浮点 NaN 转换为整数

sklearn 的 PLSRegression:“ValueError:数组不得包含 infs 或 NaN”

ValueError:输入包含 NaN、无穷大或对于 dtype 来说太大的值

ValueError:无法使用包含 NA / NaN 值的向量进行索引