【问题标题】:SettingWithCopyWarning - How to use .loc[row_indexer,col_indexer] = value instead of valid.index = new_data[valid_nbr:].indexSettingWithCopyWarning - 如何使用 .loc[row_indexer,col_indexer] = value 而不是 valid.index = new_data[valid_nbr:].index
【发布时间】: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 时,错误将消失

标签: python pandas indexing


【解决方案1】:

您的代码意味着您正在使用三个数据帧:validnew_datatrain。警告表明您实际上没有三个数据帧,但这三个数据帧中的一个或多个实际上只是另一个数据帧的子集。当您更改 validtrain 的索引时,它无法判断您是要更改整个数据框的索引,还是仅更改数据框的子集。

您可以通过使用 .loc 表示法对数据框进行子集化来解决此问题。

或者,如果您使用索引创建数据框,则可以将 .copy() 放在末尾以明确创建新的数据框对象。例如df2 = df1[df1['foo']=='a'].copy()

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 2018-10-06
    • 2022-11-29
    • 2018-12-22
    • 1970-01-01
    • 2017-11-28
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多