我遇到了一个奇怪的问题,并尝试在这里解释一下。
看这段代码,这里“df”是 pandas 数据框,以日期为索引,以开盘价、最高价、最低价、收盘价、成交量为列。
calc(df) 是我调用来计算逻辑并在 get_update() 函数内调用 ematv() 的函数。
1.在下面的代码中,当我运行时
df = ematv(df.fillna(0),13)
没有看到错误,这是根据“收盘价”计算 EMA
2.The same function called from get_update() ,df=ematv(df['example'].fillna(0),lengthema,name='example') when i use to calculate ema where i send 'example' column as data.Here i get the error. exception occurred 'example'
我做错了什么,这对我来说可能是一个很好的教训。 下面我收到的警告很少。
def ematv(df,period,name='close'):#closely matching except the decimal
newcol ='ema'+str(period)+name
df[newcol] = df[name].ewm(span=period,min_periods=0,adjust=False,ignore_na=False).mean()
return df
def get_update(df, length=None,threshold = None,lengthema=None):
if length is None:
length = 14
lengthema=13
column_name = 't1'
else:
length = int(length)
lengthema=int(lengthema)
column_name = 'ti_{}'.format(length)
df['example']=TA.test(df)//example column with value added
df=ematv(df['example'].fillna(0),lengthema,name='example')
return df
def calc(df):
df = ematv(df.fillna(0),13)
df = get_update(df.fillna(0), length=20,threshold =0,lengthema=13)
return df
calc(df)
我收到一些警告:
pydevd_resolver.py:166: FutureWarning: Series.base is deprecated and will be removed in a future version attr = getattr(var, n) pydevd_resolver.py:166: FutureWarning: Series.data is deprecated and will be removed in a future version attr = getattr(var, n) pydevd_resolver.py:166: FutureWarning: Series.flags is deprecated and will be removed in a future version attr = getattr(var, n) pydevd_resolver.py:166: FutureWarning: Series.itemsize is deprecated and will be removed in a future version attr = getattr(var, n) pydevd_resolver.py:166: FutureWarning: Series.strides is deprecated and will be removed in a future version attr = getattr(var, n) pydevd_resolver.py:71: FutureWarning: Series.flags is deprecated and will be removed in a future version return getattr(var, attribute) pydevd_resolver.py:71: FutureWarning: Series.strides is deprecated and will be removed in a future version return getattr(var, attribute)
编辑1: 尝试通过此编辑更改代码。
def ematv(dff:DataFrame,period,name='close')-> Series:#closely matching except the decimal
newcol ='ema'+str(period)+name
dff[newcol] = dff[name].ewm(span=period,min_periods=0,adjust=False,ignore_na=False).mean()
return dff
现在计算了 ema,但我收到了这个错误 发生异常错误数量的项目通过了34,放置意味着1
最佳答案
我不太确定这是如何解决问题的,这解决了问题。添加此 df['examples']=''
可以在调用
df['examples']=ematv
def ematv(dff,period,name='close'):#closely matching except the decimal
newcol ='ema'+str(period)+name
dff[newcol] = dff[name].ewm(span=period,min_periods=0,adjust=False,ignore_na=False).mean()
return dff[newcol]
def get_update(df, length=None,threshold = None,lengthema=None):
if length is None:
length = 14
lengthema=13
column_name = 't1'
else:
length = int(length)
lengthema=int(lengthema)
column_name = 'ti_{}'.format(length)
df['example']=TA.test(df)//example column with value added
df['examples']=''
df['examples']=ematv(df['example'].fillna(0),lengthema,name='example')
return df
def calc(df):
df = ematv(df.fillna(0),13)
df = get_update(df.fillna(0), length=20,threshold =0,lengthema=13)
return df
calc(df)
关于在函数方法中执行 Pandas 操作时,发生 Python Pandas 异常 "example",简单函数有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522772/