DataFrame滚动窗口应用hurst函数报错:TypeError: must be real number, not tuple
问题解决:TypeError: must be real number, not tuple
错误原因
hurst.compute_Hc()函数的返回值是一个三元组(H, c, data),其中:
- H是你需要的赫斯特指数
- c是计算过程中的常数项
- data是用于计算的缩放数据
而pandas.Series.rolling.apply()要求传入的自定义函数必须返回单个数值,你直接返回整个元组,导致后续round()函数无法处理元组类型,触发了类型错误。
修复代码
修改hurst_function,只返回元组中的赫斯特指数(即第一个元素)即可:
import hurst def hurst_function(df_col_slice): # 提取赫斯特指数H,丢弃元组中的其他元素 H, _, _ = hurst.compute_Hc(df_col_slice) return H def func(df_col): results = round(df_col.rolling(101).apply(hurst_function)[100:], 1) return results func(df_col)
额外说明
- 若需要保留
compute_Hc返回的其他值,可以在hurst_function中做额外处理(比如存入全局变量或其他数据结构),但rolling.apply的返回值必须是单个数值,才能生成有效的Series结果。 - 你已验证
df_col_slice是合法的float64类型Series,因此数据输入无问题,错误完全源于返回值类型不匹配。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

