你为什么要收集数据=数据.dropna()'和'数据.dropna(inplace=True)'生成不同的结果?

2024-03-29 11:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较一下简单的移动平均策略的收益率和遵循教科书代码的原始收益率。唯一的区别在于对不适用数据的处理,结果完全不同。你知道吗

根据df.dropna(inplace=True)的定义,它在同一个变量中保持具有有效项的数据帧,该变量应等于df=df.dropna()。但结果不同,为什么?你知道吗

1.教科书治疗:

    data=pd.DataFrame(data)

    data['SMA1'] = data['Close'].rolling(42).mean()
    data['SMA2'] = data['Close'].rolling(252).mean()

    data['Position'] = np.where(data['SMA1'] > data['SMA2'], 1, -1)
    data['Returns'] = np.log(data['Close'] / data['Close'].shift(1))
    data['Strategy'] = data['Position'].shift(1) * data['Returns']
    data.dropna(inplace=True)

    np.exp(data[['Returns', 'Strategy']].sum())

#output 1
#Returns     4.017144
#Strategy    5.811294

2.我的治疗

    data=pd.DataFrame(data)
    data['SMA1'] = data['Close'].rolling(42).mean()
    data['SMA2'] = data['Close'].rolling(252).mean()

    data['Position'] = np.where(data['SMA1'] > data['SMA2'], 1, -1)
    data['Returns'] = np.log(data['Close'] / data['Close'].shift(1))
    data['Strategy'] = data['Position'].shift(1) * data['Returns']
    data=data.dropna()

    np.exp(data[['Returns', 'Strategy']].sum())

#output 2
#Returns     3.199432
#Strategy    4.628373

Tags: dfclosedatashiftnppositionmeanreturns