【问题标题】:Pandas shows SettingWithCopyWarning after train_test_split [duplicate]Pandas 在 train_test_split 之后显示 SettingWithCopyWarning [重复]
【发布时间】:2017-12-18 19:51:07
【问题描述】:

我正在尝试操作从 Sci-Kit Learn 的 train_test_split 操作收到的数据帧。系统给了我以下信息:

/usr/local/lib/python3.6/site-packages/pandas/core/indexing.py:179: SettingWithCopyWarning:试图在一个副本上设置一个值 从 DataFrame 切片

以下内容会在我的系统上引发警告:

import pandas as pd
from sklearn.model_selection import train_test_split
X=pd.DataFrame({'A':[2,5,7,8,9],'B':[2,5,3,51,5]})
(Xt,Xv)=train_test_split(X)
Xt.iloc[0,0]=6

我使用以下版本:

python: '3.6.1(默认,2017 年 6 月 26 日,19:29:26)\n[GCC 4.9.2]'

熊猫:0.20.3

sklearn:0.18.2

【问题讨论】:

    标签: python pandas scikit-learn


    【解决方案1】:

    您可以按以下方法解决它:

    In [16]: Xt = Xt.copy()
    
    In [17]: Xt.iloc[0,0]=6
    
    In [18]: Xt
    Out[18]:
       A  B
    0  6  2
    2  7  3
    1  5  5
    
    In [19]: X
    Out[19]:
       A   B
    0  2   2     # <--- NOTE: the value in the original DF has NOT been changed
    1  5   5
    2  7   3
    3  8  51
    4  9   5
    

    您也可以使用numpy.split(...) method

    【讨论】:

    • 谢谢,这对我有用。但是每次使用后复制train_test_split的所有输出变量似乎非常麻烦和低效。我想我可以像这样'map(lambda x:x.copy(),train_test_split(X,y))'
    • @Jonathan,您也可以尝试使用np.split() 而不是train_test_split - 我添加了答案链接,其中包含一个示例...
    • 我对此进行了测试,它也适用于我。你知道 np.split 是否复制数据吗? (我假设为 train_test_split 引发了警告,因为它不复制数据而是创建一个“视图”?)
    • @Jonathan,我猜np.split() 返回副本...
    【解决方案2】:

    另一种选择是重置 is_copy flat,但这似乎是 train_test_split 函数的错误。

    Xt.is_copy=None
    

    【讨论】:

    • 我应该在 sci-kit learn 或 pandas 错误列表上发布一些内容吗?
    • 我认为该功能是 sci-kit learn 的一部分。
    • 为什么会有这样的解决方案?为什么你认为这是 sklearn 中的错误?
    【解决方案3】:

    Pandas 通常过于激进地吐出这个警告,你可以在这里看到一个很好的讨论: How to deal with SettingWithCopyWarning in Pandas?

    但如果我确信我的代码按预期工作,我只需使用:

    pd.options.mode.chained_assignment = None
    

    在我的文件顶部。您将始终能够判断您是否没有更新您的 df,因为您认为您所做的任何事情都不会出现。

    【讨论】:

    • 我不使用链式分配
    • 为我工作\m/ :) 谢谢。
    猜你喜欢
    • 2014-12-30
    • 2021-07-16
    • 2014-10-18
    • 2017-06-25
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多