pandas删除值全部为0的整行和整列,还有0.0,0.000000也要删除
在 Pandas 中,如果需要删除全部为 0 的行或列,可以通过 .all() 方法来判断行或列是否所有元素都为 0,然后删除这些行或列。
代码示例
示例数据:
import pandas as pd# 示例数据
data = {'A': [0, 2, 0, 4],'B': [0, 0, 0, 0],'C': [0, 10, 11, 12]
}
df = pd.DataFrame(data)print("原始数据:")
print(df)
输出:
A B C
0 0 0 0
1 2 0 10
2 0 0 11
3 4 0 12
1. 删除全部为 0 的行
使用 .all(axis=1) 判断行是否所有值都为 0,然后通过布尔索引删除这些行。
# 删除全为 0 的行
df_cleaned = df.loc[~(df == 0).all(axis=1)]print("\n删除全为 0 的行:")
print(df_cleaned)
输出:
删除全为 0 的行:A B C
1 2 0 10
2 0 0 11
3 4 0 12
2. 删除全部为 0 的列
使用 .all(axis=0) 判断列是否所有值都为 0,然后通过布尔索引删除这些列。
# 删除全为 0 的列
df_cleaned = df.loc[:, ~(df == 0).all(axis=0)]print("\n删除全为 0 的列:")
print(df_cleaned)
输出:
删除全为 0 的列:A C
0 0 0
1 2 10
2 0 11
3 4 12
3. 同时删除全部为 0 的行和列
可以结合以上两个方法,先删除全部为 0 的行,再删除全部为 0 的列。
# 删除全为 0 的行
df = df.loc[~(df == 0).all(axis=1)]# 删除全为 0 的列
df_cleaned = df.loc[:, ~(df == 0).all(axis=0)]print("\n删除全为 0 的行和列:")
print(df_cleaned)
输出:
删除全为 0 的行和列:A C
1 2 10
2 0 11
3 4 12
参数解释
(df == 0).all(axis=1):axis=1表示按行判断,检查每一行是否全为0。- 返回一个布尔数组,用于判断哪些行满足条件。
(df == 0).all(axis=0):axis=0表示按列判断,检查每一列是否全为0。- 返回一个布尔数组,用于判断哪些列满足条件。
扩展:原地删除(inplace=True)
如果希望直接修改原 DataFrame 而不返回新的对象,可以结合 inplace=True 选项。
示例:
# 删除全为 0 的行
df.drop(index=df[(df == 0).all(axis=1)].index, inplace=True)# 删除全为 0 的列
df.drop(columns=df.columns[(df == 0).all(axis=0)], inplace=True)print("\n原地删除全为 0 的行和列:")
print(df)
总结
| 操作 | 示例代码 |
|---|---|
| 删除全为 0 的行 | df.loc[~(df == 0).all(axis=1)] |
| 删除全为 0 的列 | df.loc[:, ~(df == 0).all(axis=0)] |
| 同时删除全为 0 的行和列 | 结合上述两条代码 |
打印删除了哪些行和列
要打印出被删除的行和列,可以在删除操作之前获取需要删除的行或列的索引,并在删除后将这些行或列打印出来。
方法:打印删除的行和列
以下是删除全为 0 的行或列并打印它们的完整代码示例。
示例代码
import pandas as pd# 示例数据
data = {'A': [0, 2, 0, 4],'B': [0, 0, 0, 0],'C': [0, 10, 11, 12]
}
df = pd.DataFrame(data)print("原始数据:")
print(df)# 找到需要删除的行和列
rows_to_delete = df.index[(df == 0).all(axis=1)].tolist() # 行索引
cols_to_delete = df.columns[(df == 0).all(axis=0)].tolist() # 列名称# 删除这些行和列
df_cleaned = df.drop(index=rows_to_delete, columns=cols_to_delete)# 打印删除的行和列
print("\n删除的行索引:", rows_to_delete)
print("删除的列名称:", cols_to_delete)# 打印删除后的 DataFrame
print("\n删除后的数据:")
print(df_cleaned)
代码解释
-
找到需要删除的行和列:
rows_to_delete = df.index[(df == 0).all(axis=1)]:df == 0:生成一个布尔矩阵,表示每个值是否为 0。.all(axis=1):检查每一行是否全为 0。df.index[...]:返回需要删除的行的索引。
cols_to_delete = df.columns[(df == 0).all(axis=0)]:.all(axis=0):检查每一列是否全为 0。df.columns[...]:返回需要删除的列的名称。
-
删除这些行和列:
- 使用
drop()方法同时删除行和列。
- 使用
-
打印删除的行和列:
rows_to_delete和cols_to_delete保存了被删除的行和列的索引和名称,可以直接打印。
-
打印删除后的 DataFrame:
- 检查最终清理后的数据。
输出示例
原始数据:
A B C
0 0 0 0
1 2 0 10
2 0 0 11
3 4 0 12
输出:
删除的行索引: [0]
删除的列名称: ['B']删除后的数据:A C
1 2.0 10
2 0.0 11
3 4.0 12
扩展:原地删除并打印
如果需要直接在原始 DataFrame 中删除,同时打印出被删除的行和列:
# 找到需要删除的行和列
rows_to_delete = df.index[(df == 0).all(axis=1)].tolist()
cols_to_delete = df.columns[(df == 0).all(axis=0)].tolist()# 打印即将删除的行和列
print("\n即将删除的行索引:", rows_to_delete)
print("即将删除的列名称:", cols_to_delete)# 原地删除
df.drop(index=rows_to_delete, columns=cols_to_delete, inplace=True)# 打印最终结果
print("\n删除后的数据:")
print(df)
总结
| 操作 | 示例代码 |
|---|---|
| 找到需要删除的行索引 | rows_to_delete = df.index[(df == 0).all(axis=1)].tolist() |
| 找到需要删除的列名称 | cols_to_delete = df.columns[(df == 0).all(axis=0)].tolist() |
| 打印删除的行和列 | print("删除的行索引:", rows_to_delete) 和 print("删除的列名称:", cols_to_delete) |
| 删除行和列 | df.drop(index=rows_to_delete, columns=cols_to_delete) |
相关文章:
pandas删除值全部为0的整行和整列,还有0.0,0.000000也要删除
在 Pandas 中,如果需要删除全部为 0 的行或列,可以通过 .all() 方法来判断行或列是否所有元素都为 0,然后删除这些行或列。 代码示例 示例数据: import pandas as pd# 示例数据 data {A: [0, 2, 0, 4],B: [0, 0, 0, 0],C: [0, …...
IO Virtualization with Virtio.part 1 [十二]
久等了各位! 本篇开始讲解 IO 虚拟化中的 virtio,我会以 Linux 的 IIC 驱动为例,从 IIC 驱动的非虚拟化实现,到 IIC 驱动的半虚拟化实现,再到最后 X-Hyper 中如何通过 virtio 来实现前后端联系,一步步把 v…...
ShardingSphere-Proxy分表场景:go测试案例
接续上篇文章《ShardingSphere-Proxy分表场景测试案例》 go测试用例: package mainimport ("fmt""math/rand""time""github.com/bwmarrin/snowflake""gorm.io/driver/mysql""gorm.io/gorm""gor…...
OpenStack系列第四篇:云平台基础功能与操作(Dashboard)
文章目录 1. 镜像(Image)添加镜像查看镜像删除镜像 2. 卷(Volume)创建卷查看卷删除卷 3. 网络(虚拟网络)创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对(…...
ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础
文章目录 简介为什么需要I2S?关于音频信号采样率分辨率音频声道 怎样使用I2S传输音频?位时钟BCLK字时钟WS串行数据SD I2S传输模型I2S通信格式I2S格式左对齐格式右对齐格式 i2s基本配置i2s 底层API加载I2S驱动设置I2S使用的引脚I2S读取数据I2S发送数据卸载…...
25上半年软考高级系统分析师易混淆知识点
第1章 系统工程与信息系统基础 易混淆点1:系统工程生命周期与信息系统的生命周期 1、系统工程生命周期阶段 探索性研究→概念阶段→开发阶段→生产阶段→使用阶段→保障阶段→退役阶段 2、信息系统的生命周期 产生阶段→开发阶段(单个系统开发&…...
采集JSON解析错误的修复
两段采集来的JSON格式: 一: {"hwgOnlineId":"554312", "jiwuChatId":"", "phoneCategoryId":"20006", "cuxiaoSeq":{voucherTitle:1,lh 二: {"pic":&q…...
Java中实现对象的深拷贝(Deep Copy)
在Java中实现对象的深拷贝(Deep Copy)意味着创建一个对象的副本,使得原对象和副本对象完全分离,对副本对象的任何修改都不会影响到原对象。以下是几种实现深拷贝的方法: 1. 手动实现深拷贝 对于自定义类,…...
位置编码-APE
Transformer 中的绝对位置编码 (以下由gpt 生成) Transformer 的绝对位置编码(Absolute Position Encoding, APE)是用于对序列数据中的位置信息进行建模的一种方法。在 Transformer 的架构中,输入数据(如句…...
MySQL有哪些锁?
1.MySQL有哪些锁? 全局锁表级锁 表锁元数据锁意向锁 行级锁 记录锁间隙锁临键锁临时意向锁 我了解的是MySQL的锁可以分为全局锁、表级锁、行级锁。 我比较熟悉的是表级锁和行级锁,如果我们对表结构进行修改时,MySQL就会对这个表结构加一个…...
Everything实现,快速搜索文件
最近编写NTFS文件实时搜索工具, 类似 Everything 这样, 翻阅了很多博客, 结果大致如下: 1.分析比较肤浅, 采用USN日志枚举来获取文件记录 速度一言难尽, 因为日志枚举的是全盘所有文件的所有日志, 记录比文件记录还多, 速度当然很慢, 还有的甚至于是 使用 DeviceIoControl 函数…...
[硬件] DELL BIOS 相关注意事项
前言 前段时间重装系统. DELL BIOS属实资料少, 又难用. 这里给出相关的注意事项, 并且配上图片. BIOS相关注意事项 进入BIOS ESC/F2/ F12. 都可以进入BIOS, 当进U盘的入Win PE系统时, 使用F12 效果更佳. 关闭安全模式 切换到Boot Configuration选项,将Secure Boot选项off选…...
Rocky Linux 下安装Liboffice
Rocky Linux下安装Liboffice。 Step1: 在桌面,单击击键盘的Window键,点击出现的白色software按钮图标; Step2: 输入lib,即可自动跳出libre Office, 进行安装; Step3: Have fun with Rocky Linux....
【每日学点鸿蒙知识】长时任务、HarmonyAppProvision申请、preferences、Testing工具、应用保活
1、HarmonyOS 如何解决语音聊天、通信app退后台系统采集播放回调就会停止,回前台未恢复? 关于应用切到后台系统采集播放回调停止的问题原因如下:为了降低设备耗电速度、保障用户使用流畅度,系统会对退至后台的应用进行管控&#…...
步进电机驱动算法——S形加减速算法原理
1. 前言: 最近项目又用到了步进电机,为了在运动中加减速更加平稳决定研究一下S型加减速,原来用过野火的s型加减速程序,云里雾里的移植成功了,今天再翻来程序看一脸懵逼,重新学习了一下发现所有公式都能看懂…...
【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 完整代码和训练好的模型权重文件下载链接见本文底…...
2024年中国新能源汽车用车发展怎么样 PaperGPT(一)
概述 在国家政策的强力扶持下,2024年中国新能源汽车市场迎来了新的发展机遇。本文将基于《中国新能源汽车用车报告(2024年)》的数据,对新能源汽车的市场发展和用车趋势概述。 新能源汽车市场发展 政策推动:国家和地…...
数据结构-排序思想
直接插入排序 将后面的无序区中的元素挨个向前面的有序区中插入。 1.将顺序表中R[0]用作哨兵,按索引i2...n的次序,将R[i]向有序区R[1...i-1]中执行插入操作。 2.插入操作可采取在有序区中从后向前的查找比较和移动的方法。 3.此操作中比较的次数与原序列…...
python 快速排序(Quick Sort)
快速排序(Quick Sort) 快速排序是一种高效的排序算法,采用分治法(Divide and Conquer)策略。它的基本思想是:选择一个基准元素(pivot),将数组分为两部分,使得…...
MySQL数据库——常见慢查询优化方式
本文详细介绍MySQL的慢查询相关概念,分析步骤及其优化方案等。 文章目录 什么是慢查询日志?慢查询日志的相关参数如何启用慢查询日志?方式一:修改配置文件方式二:通过命令动态启用 分析慢查询日志方式一:直…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
OPENCV图形计算面积、弧长API讲解(1)
一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...
Linux中INADDR_ANY详解
在Linux网络编程中,INADDR_ANY 是一个特殊的IPv4地址常量(定义在 <netinet/in.h> 头文件中),用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法,允许套接字监听所有本地IP地址上的连接请求。 关…...
