python使用dataframe报错SettingWithCopyWarning(保姆级图文+代码注释)

本文主要是介绍python使用dataframe报错SettingWithCopyWarning(保姆级图文+代码注释),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

步骤

  • 系列文章
  • 前言
    • 1.新建一个测试用的DataFrame
    • 2.测试错误的修改方式(会报错)
    • 3.测试正确的修改方式
    • 4.完整代码
  • 总结

系列文章

提示:转到python专栏,观看更多内容!
点我直达–>python专栏


前言

使用Pandas-DataFrame修改DataFrame数组的某个值时出现SettingWithCopyWarning报错
具体如下:

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

原因分析:使用CopyWarning设置:试图在数据帧切片的副本上设置值请参阅文档中的注意事项。
涉及了Pandas-DataFrame的底层架构,网上也有大佬深度分析,作为初学者我就长话短说,说说怎么修改DataFrame数组的某个值不报错的方法。

就是不能直接用列表名索引的方式访问数据并修改,必须用loc遍历数组的方式修改!


1.新建一个测试用的DataFrame

import pandas as pd
data = {'id':['a','b','c','d','e'],'name':[1,2,3,4,5],'score':[x for x in range(6,11)]#生成一个6-10的列表,左开右闭
}
frame = pd.DataFrame(data)
# 输出效果
#   id  name  score
# 0  a     1      6
# 1  b     2      7
# 2  c     3      8
# 3  d     4      9
# 4  e     5     10

在这里插入图片描述


2.测试错误的修改方式(会报错)

print("测试错误的修改方式,测试时注释下一段代码")
print(frame['id'][0])#打印了 id列的第0位元素-> a
frame_new=frame.copy()
frame_new['id'][0]='q'#错误的修改 id列的第0位元素为q,报错SettingWithCopyWarning
print(frame_new)

在这里插入图片描述

3.测试正确的修改方式

核心区别是不能直接用列表名索引的方式访问数据并修改,必须用loc遍历数组的方式修改!

print("测试正确的修改方式,测试时注释上一段代码")
print(frame.loc[0][0])#打印了 id列的第0位元素-> a
frame_new=frame.copy()
frame_new.iloc[0,0]="q" #正确的修改 id列的第0位元素为q,不会报错
print(frame_new)

在这里插入图片描述

4.完整代码

# @Time    : 2021/12/8 8:50
# @Author  : 南黎
# @FileName: test.py
import pandas as pdprint("新建一个测试用的DataFrame")
data = {'id':['a','b','c','d','e'],'name':[1,2,3,4,5],'score':[x for x in range(6,11)]#生成一个6-10的列表,左开右闭
}
frame = pd.DataFrame(data)
# 输出效果
#   id  name  score
# 0  a     1      6
# 1  b     2      7
# 2  c     3      8
# 3  d     4      9
# 4  e     5     10print("测试错误的修改方式,测试时注释下一段代码")
print(frame['id'][0])#打印了 id列的第0位元素-> a
frame_new=frame.copy()
frame_new['id'][0]='q'#错误的修改 id列的第0位元素为q,报错SettingWithCopyWarning
print(frame_new)print("测试正确的修改方式,测试时注释上一段代码")
print(frame.loc[0][0])#打印了 id列的第0位元素-> a
frame_new=frame.copy()
frame_new.iloc[0,0]="q" #正确的修改 id列的第0位元素为q,不会报错
print(frame_new)

总结

大家喜欢的话,给个👍,点个关注!继续跟大家分享敲代码过程中遇到的问题!


这篇关于python使用dataframe报错SettingWithCopyWarning(保姆级图文+代码注释)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009699

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La