You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy的linregress计算SMA斜率返回NaN的问题咨询

斜率返回NaN的原因
  • 直接原因:scipy.stats.linregress对输入的序列有非空要求,只要自变量或因变量中存在NaN值,回归计算的所有返回值都会是NaN。你提供的数据集里SMA列前10行全部为空值,直接传入全量数据计算就会得到NaN结果。
  • 次要校验:你可以运行print(df['SMA'].isna().sum())查看空值数量,当前数据集的空值数为10,符合这个触发条件。
修复方案

你只需要先筛选出SMA列非空的子集再做回归计算即可,参考代码如下:

import pandas as pd
import datetime as dt
from scipy import stats

# 原有日期处理逻辑不变
df.date = pd.to_datetime(df.date)
df['date_ordinal'] = df['date'].map(dt.toordinal)

# 新增筛选有效数据的步骤
valid_data = df.dropna(subset=['SMA'])
slope, intercept, r_value, p_value, std_err = stats.linregress(valid_data['date_ordinal'], valid_data['SMA'])

# 赋值斜率到全表
df['slope'] = slope

注:如果你需要计算滚动窗口的斜率而非全局斜率,需要将上述计算逻辑放到rolling.apply中实现。

内容的提问来源于stack exchange,提问作者confused

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:09:02