python - ValueError:值都是 NaN?
问题描述
谁能告诉我在代码中哪里出错了,因为值都是我不想要的 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)
解决方案
- 你真的不需要做循环,可以很简单地被矢量化
- 首先过滤到大于指定值的行
- 减少使用
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
取样
指数 | 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 |