SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
在使用pandas时遇到了一个问题:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
翻译:(你)试图改变DataFrame(类似于一个pandas向量)中的一个副本中的值
解决方法就是使用loc
执行代码如下:
import pandas as pd
import numpy as npaa=np.array([1,2,3,4])
bb=pd.DataFrame(aa.T,columns=['first'])
print(bb,'\n***********')
bb['two']=0
print(bb,'\n***********')
bb['first'][0]=3
print(bb)
输出如下:
first
0 1
1 2
2 3
3 4
first two
0 1 0
1 2 0
2 3 0
3 4 0
Warning (from warnings module):
File “D:/pProject/mlRegression/meaningless.py”, line 9
bb[‘first’][0]=3
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
first two
0 3 0
1 2 0
2 3 0
3 4 0
我们看Warning 提出的帮助文档:
也就是说,这就类似于C++中传入函数的参数只是形参,在这里是__getitem__()函数,如果你在函数中尝试改变形参是毫无意义的,python 就会发出警告。
解决方案
方案就是用它提示的loc函数
import pandas as pd
import numpy as npaa=np.array([1,2,3,4])
bb=pd.DataFrame(aa.T,columns=['first'])
print(bb,'\n***********')
bb['two']=0
print(bb,'\n***********')
#bb['first'][0]=3
bb.loc['first',0]=3#改用loc
print(bb)
loc函数保证返回的是bb本身(类似于C++的引用,而不是bb的一个副本)
再举类似一个例子
import pandas as pd
import numpy as npaa=np.array([1,2,3,4])
bb=pd.DataFrame(aa.T,columns=['first'])
bb['two']=0cc=bb.iloc[:,0]
cc[3]=13
print(bb)
print(cc)
输出结果:
Warning (from warnings module):File "D:\pProject\mlRegression\meaningless.py", line 9cc[3]=13
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copyfirst two
0 1 0
1 2 0
2 3 0
3 13 0
0 1
1 2
2 3
3 13
Name: first, dtype: int32
可以看到,警告的事情发生了!
bb的值连带着cc的值发生了改变!说明cc是bb的一个引用,cc值改变会引起bb 改变
正确做法:用深copy(而不是浅copy)
import pandas as pd
import numpy as npaa=np.array([1,2,3,4])
bb=pd.DataFrame(aa.T,columns=['first'])
bb['two']=0cc=bb.iloc[:,0]
cc=cc.copy()#加上这么一句
cc[3]=13
print(bb)
print(cc)
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame相关推荐
- 成功解决SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See
解决问题 SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See ...
- SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 设置拷贝警告:试图在 ...
- pandas模块之SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
利用python进行数据处理的时候,经常会使用到pandas这一强大的数据处理模块.将数据存储为DataFrame形式,进行一系列的操作. 之前以及最近在处理数据的时候经常出现到的一个问题,将这个问题 ...
- 解决Dataframe删除操作时警告:SettingWithCopyWarning:A value is trying to be set on a copy of a slice from a...
完整警告为:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See ...
- SettingWithCopyWarning:A value is trying to be set on a copy of a slice from a DataFrame(Pandas库)
pandas警告SettingWithCopyWarning: A value is trying to ...原理和解决方案_Lucky0928的博客-CSDN博客 以下内容是对这篇文章 ...
- (完全解决)Dataframe的赋值问题SettingWithCopyWarning: A value is trying to be set on a copy of a slice
情况 sample.loc[0][1]=-1 发出警告: 其实,这个根本不是警告,而是报错.因为我发现sample的值根本没有改变. 原因 不要使用切片的方式去赋值.上面其实可以分为两步,你这种索引方 ...
- 成功解决pandas\core\indexing.py:179: SettingWithCopyWarning: A value is trying to be set on a copy of a
成功解决pandas\core\indexing.py:179: SettingWithCopyWarning: A value is trying to be set on a copy of a ...
- 成功解决pandas\core\frame.py:2754: SettingWithCopyWarning: A value is trying to be set on a copy of a s
成功解决pandas\core\frame.py:2754: SettingWithCopyWarning: A value is trying to be set on a copy of a s ...
- 成功解决pandas\core\generic.py:3660: SettingWithCopyWarning: A value is trying to be set on a copy of a
成功解决pandas\core\generic.py:3660: SettingWithCopyWarning: A value is trying to be set on a copy of a ...
最新文章
- AI 女神李飞飞最新文章:发展人工智能应该以人为本
- 需要我们了解的SQL Server阻塞原因与解决方法 - sym_cn
- ORACLE数据库实现自增的方式
- container_of 用法解析
- c程序设计语言选修难吗,欢迎大家选修C语言程序设计这门课,本帖解释一下一些常见的问题...
- 如何使用JavaScript检查输入是否为空
- 快速构建Windows 8风格应用34-构建Toast通知
- Spark1.0新特性--Spark SQL
- CIO思考:混合云为行业注入了哪些活力?
- 获取当前html的名字,c#获取当前页面名字
- php经过twemproxy无法delete后端memcache值的解决方法
- NETARM(NSMS)自定义万能表单系统使用说明
- IDEA+Java控制台实现教材管理系统
- Prelude CC 2019 for Mac附激活补丁 v8.1.0中文版
- Bit称万夫不当之勇,逆流而上。
- 16年9月第二周---deadline
- 语言本地化的救急解决方案 (非Unicode编码的程序)
- 解决无法删除文件夹的情况
- 2011款iMac的AirDrop使用方法。
- OpenCV-图像翻转函数cv::filp