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
Pandas:ValueError:无法将浮点 NaN 转换为整数
sklearn 的 PLSRegression:“ValueError:数组不得包含 infs 或 NaN”