【发布时间】:2019-09-12 22:47:36
【问题描述】:
我正在尝试绘制一个股票预测模型。在我尝试索引和绘图之前,一切正常。
valid['Predictions'] = 0
valid['Predictions'] = preds
valid.index = new_data[valid_nbr:].index
train.index = new_data[:train_nbr].index
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])
这是我运行后得到的错误信息:
/usr/lib/python3/dist-packages/ipykernel_launcher.py:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
/usr/lib/python3/dist-packages/ipykernel_launcher.py:3: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
This is separate from the ipykernel package so we can avoid doing imports until
如何转换我的代码以遵循错误提供的文档?谢谢。
【问题讨论】:
-
stackoverflow.com/questions/20625582/… 这是误报,您可能不想更改代码。试试
pd.options.mode.chained_assignment = None。 -
^^ 不,我不会那样做。您应该尝试理解错误。当您没有链式分配并且出现此错误时,通常是因为您在前面的步骤中保留了一个 DataFrame,它返回的是原始视图,而不是它自己的对象。这通常发生在像
df = df[some_mask]或df = df.drop_duplicates()这样的步骤中。这些都不会创建新对象,因此后面的步骤会引发警告。在代码末尾添加.copy()以确保获得新对象,然后当您执行valid['predictions'] = 0时,错误将消失