无法删除动态生成的列。我是pandas(和python)的新手,并且修改了现有的pandas库,所以如果代码看起来有一半的能力,那就是为什么会有一半疯狂。
def _get_macd_c(df, f, s, g):
fast = df['close_'+str(f)+'_ema']
slow = df['close_'+str(s)+'_ema']
df['macd'] = fast - slow
df['macds'] = df['macd_'+str(g)+'_ema']
df['macdh'] = (df['macd'] - df['macds'])
del df['macd_'+str(g)+'_ema']
del fast
del slow
由变量**' fast'表示的列*并且“慢”'坚持df obj。为什么?
如果字符串不是动态df['close_10_ema']
(原来的话),那么它就不是问题。我不清楚为什么这个改变使代表该列的变量不可删除。
答案 0 :(得分:0)
如果使用del fast
和del slow
,则删除Series
而不是列。
因此,要删除列名为fast
的列,slow
,macd_'+str(g)+'_ema
需要:
del df['fast']
del df['slow']
del df['macd_'+str(g)+'_ema']
但是,对于删除多列,最好使用drop
:
df = df.drop(['fast','slow','macd_'+str(g)+'_ema'], axis=1)
在你的函数中,最好不要创建新列然后删除它们:
def _get_macd_c(df, f, s, g):
#subtract 2 columns to Series macd
macd = df['close_'+str(f)+'_ema'] - df['close_'+str(s)+'_ema']
df['macdh'] = macd - df['macd_'+str(g)+'_ema']
#if need remove column
df = df.drop('macd_'+str(g)+'_ema', axis=1)
return df
我尝试重写你的功能:
def _get_macd_c(df, f, s, g):
colf = 'close_'+str(f)+'_ema'
cols = 'close_'+str(s)+'_ema'
colg = 'macd_'+str(g)+'_ema'
df['macd'] = df[colf] - df[cols]
df['macds'] = df[colg]
df['macdh'] = (df['macd'] - df['macds'])
df = df.drop([colf, cols, colg], axis=1)
return df
答案 1 :(得分:0)
似乎最好的解决方法是不按引用/变量删除列,而是按名称删除。我还不清楚为什么会这样。很高兴将此解释为正确答案,我的解决方案感觉有点黑客。
def _get_macd_c(df, f, s, g):
fast = df['close_'+str(f)+'_ema']
slow = df['close_'+str(s)+'_ema']
df['macd'] = fast - slow
df['macds'] = df['macd_'+str(g)+'_ema']
df['macdh'] = (df['macd'] - df['macds'])
del df['macd_'+str(g)+'_ema']
del df['close_'+str(f)+'_ema']
del df['close_'+str(s)+'_ema']