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 相关文章推荐
在Django框架中设置语言偏好的教程
Jul 27 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
django-allauth入门学习和使用详解
Jul 03 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
python GUI模拟实现计算器
Jun 22 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
Python 求向量的余弦值操作
Mar 04 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
2019十大人气国漫
2020/03/13 国漫
怎么使 Mysql 数据同步
2006/10/09 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
Python 文件和输入输出小结
2013/10/09 Python
使用python实现rsa算法代码
2016/02/17 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
详解Python中is和==的区别
2019/03/21 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
python的pip有什么用
2020/06/17 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
科研先进个人典型材料
2014/01/31 职场文书
司马光教学反思
2014/02/01 职场文书
会计学生自我鉴定
2014/02/06 职场文书
单位工作证明
2014/10/07 职场文书
大学军训心得体会800字
2016/01/11 职场文书
干部理论学习心得体会
2016/01/21 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
Oracle用户管理及赋权
2022/04/24 Oracle