-1
我有一个函数保存和定义在一个不同的脚本叫TechAnalisys.py这个函数只是输出一个标量,所以我打算使用pd.rolling_apply()生成一个新列到原始数据帧中(df
) 该函数在执行时工作正常,但在使用rolling_apply()
应用程序时遇到问题。此链接Passing arguments to rolling_apply显示了您应该如何执行此操作,这就是我认为它是我的代码但它仍然显示错误“TypeError:int object is not iterable”出现熊猫rolling_apply类型错误:int对象不可迭代“
这是函数(位于脚本TechAnalisys.py)
def hurst(df,days):
import pandas as pd
import numpy as np
df2 = pd.DataFrame()
df2 = df[-days:]
rango = lambda x: x.max() - x.min()
df2['ret'] = 1 - df.PX_LAST/df.PX_LAST.shift(1)
df2 = df2.dropna()
ave = pd.expanding_mean(df2.ret)
df2['desvdeprom'] = df2.ret - ave
df2['acum'] = df2['desvdeprom'].cumsum()
df2['rangorolled'] = pd.expanding_apply(df2.acum, rango)
df2['datastd'] = pd.expanding_std(df2.ret)
df2['rango_rangostd'] = np.log(df2.rangorolled/df2.datastd)
df2['tiempo1'] = np.log(range(1,len(df2.index)+1))
df2 = df2.dropna()
model1 = pd.ols(y=df2['rango_rangostd'], x=df2['tiempo1'], intercept=False)
return model1.beta
,现在这是主要的脚本:
import pandas as pd
import numpy as np
import TechAnalysis as ta
df = pd.DataFrame(np.log(np.cumsum(np.random.randn(100000)+1)+1000),columns =['PX_LAST'])
以下工作:
print ta.hurst(df,50)
这不起作用:
df['hurst_roll'] = pd.rolling_apply(df, 15 , ta.hurst, args=(50))
哪些错误代码?
感谢您的回答! – Gabriel