我正在尝试操作从Sci-Kit Learn的 train_test_split 操作中收到的数据帧。系统给了我以下内容:
/usr/local/lib/python3.6/site-packages/pandas/core/indexing.py:179: SettingWithCopyWarning:尝试在a的副本上设置值 来自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]'
pandas:0.20.3
sklearn:0.18.2
答案 0 :(得分:4)
您可以按如下方式解决问题:
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
答案 1 :(得分:3)
另一种选择是重置is_copy flat,但这似乎是train_test_split函数的错误。
Xt.is_copy=None
答案 2 :(得分:1)
熊猫一般会过于激烈地吐出这个警告,你可以在这里看到一个很好的讨论: How to deal with SettingWithCopyWarning in Pandas?
但如果我确信我的代码按预期工作,我只需使用:
pd.options.mode.chained_assignment = None
位于我的文件顶部。你总是可以告诉你是否没有更新你的df,因为你认为你所做的一切都不会在那里。