pandas DataFrame 警告(SettingWithCopyWarning)的解决


Posted in Python onJuly 23, 2019

刚接触python不久,编程也是三脚猫,所以对常用的这几个工具还没有一个好的使用习惯,毕竟程序语言是头顺毛驴。所以最近在工作中使用的时候在使用pandas的DataFrame时遇到了以下报警:

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/indexing.html#indexing-view-versus-copy

debug了半天,也在网上找了很多,还是没有解决,在报警的那一句调了半天,后来发现主要问题并不是出现在报警的那一句。

给个例子复现一下这个问题:

import pandas as pd
A = pd.DataFrame([[1,2,3],[2,3,4],[3,4,5]], columns = ['a','b','c'])
B = A[['a', 'b']]
B['a'] = B['a'] + 1 # same result by using B.loc[:,'a'] = B.loc[:,'a']+ 1

输出:

A
Out[1]:
   a  b  c
0  1  2  3
1  2  3  4
2  3  4  5

B
Out[2]:
   a  b
0  1  2
1  2  3
2  3  4

B
Out[3]:
   a  b
0  2  2
1  3  3
2  4  4

先说一下我的感觉:这个报警主要是说,你当前对B的操作可能会改变另一个DataFrame A,所以你要小心了。(当然实际的警告并不是这个意思,但是“在DataFrame的一个切片的copy上进行操作”我感觉不出来有什么问题,还请大神们解答一下。)

报警出现在第4行,但主要的问题在于第3行:应该使用.loc方法得到新的DataFrame,而不是直接使用[]引用。

C = A.loc[:,['a','b']]
C['a'] = C['a']+1

这样就不会出现报警了。

个人感觉好像是说用.loc是对原有DataFrame的一种复制性引用,而[]的引用则是指针性的引用,和python本身的赋值特性有关。不过我看了A的值也并没有在B被更改时一同被改掉。总之我现在还只是知其然,不知其所以然,希望有大神帮忙解惑。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python在校内发人人网状态(人人网看状态)
Feb 19 Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
使用python实现接口的方法
Jul 07 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
Dec 10 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
python 字典访问的三种方法小结
Dec 05 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
pandas针对excel处理的实现
Jan 15 Python
python实现层次聚类的方法
Nov 01 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 #Python
python3.x提取中文的正则表达式示例代码
Jul 23 #Python
Python Pandas 箱线图的实现
Jul 23 #Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 #Python
Pandas分组与排序的实现
Jul 23 #Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 #Python
Django logging配置及使用详解
Jul 23 #Python
You might like
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
python类继承与子类实例初始化用法分析
2015/04/17 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python学生信息管理系统(初级版)
2018/10/17 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
会计学自我鉴定
2014/02/06 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
三人合伙协议书范本
2014/10/29 职场文书
党员活动总结
2015/02/04 职场文书
民事二审代理词
2015/05/25 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python
 Python 中 logging 模块使用详情
2022/03/03 Python
python通过新建环境安装tfx的问题
2022/05/20 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL