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模拟登陆类
Mar 29 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
python在非root权限下的安装方法
Jan 23 Python
python实现对csv文件的列的内容读取
Jul 04 Python
python实现简单的单变量线性回归方法
Nov 08 Python
python读取xlsx的方法
Dec 25 Python
python绘制直方图和密度图的实例
Jul 08 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 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
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
nodejs实用示例 缩址还原
2010/12/28 NodeJs
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
python查找指定具有相同内容文件的方法
2015/06/28 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
经典c++面试题二
2015/08/14 面试题
体育教师自荐信范文
2013/12/16 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
给同学的道歉信
2014/01/16 职场文书
植树节标语
2014/06/27 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
TensorFlow的自动求导原理分析
2021/05/26 Python