Python 为什么';data=data.dropna()';和';data.dropna(inplace=True)和#x27;产生不同的结果?
我想比较一下简单移动平均策略的收益率和遵循教科书代码的原始收益率。唯一的区别在于N/A数据的处理,结果完全不同 根据Python 为什么';data=data.dropna()';和';data.dropna(inplace=True)和#x27;产生不同的结果?,python,pandas,Python,Pandas,我想比较一下简单移动平均策略的收益率和遵循教科书代码的原始收益率。唯一的区别在于N/A数据的处理,结果完全不同 根据df.dropna(inplace=True)的定义,它在同一个变量中保留数据帧的有效条目,该变量应等于df=df.dropna()。但结果不同,为什么 1.教科书治疗: data=pd.DataFrame(data) data['SMA1'] = data['Close'].rolling(42).mean() data['SMA2'] = data['
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
这很奇怪。你能分享这些数据吗?或者您可以尝试用这两种方法检查
数据.形状
和数据的内容
。如果你一个接一个地运行它们,data=pd.DataFrame(data)
不会在治疗2中重新初始化数据帧。它从您停止的位置(上一次计算的结束)复制它,因此这些计算不是从同一点开始的。正如其他人所说,重新启动内核并分别运行它们。他们应该返回相同的结果。谢谢大家,你们已经解决了我的问题!由于数据形状的变化,每次操作后的结果都会有所不同。我原以为代码data=pd.DataFrame(data)
中的第二个“data”是指原始的panda系列。@RochelleWang没有,因为data
变成了您的数据帧,您可以修改它,panda从数据帧构造数据帧没有问题(这就是为什么以后它会被忽略的原因)。我只想把你的数据框命名为df而不是data,这很奇怪。你能分享这些数据吗?或者您可以尝试用这两种方法检查数据.形状
和数据的内容
。如果你一个接一个地运行它们,data=pd.DataFrame(data)
不会在治疗2中重新初始化数据帧。它从您停止的位置(上一次计算的结束)复制它,因此这些计算不是从同一点开始的。正如其他人所说,重新启动内核并分别运行它们。他们应该返回相同的结果。谢谢大家,你们已经解决了我的问题!由于数据形状的变化,每次操作后的结果都会有所不同。我原以为代码data=pd.DataFrame(data)
中的第二个“data”是指原始的panda系列。@RochelleWang没有,因为data
变成了您的数据帧,您可以修改它,panda从数据帧构造数据帧没有问题(这就是为什么以后它会被忽略的原因)。我只想命名您的数据帧df
,而不是数据。