当前位置: 首页 > news >正文

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)

代码解释

  1. 找到需要删除的行和列

    • 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[...]:返回需要删除的列的名称。
  2. 删除这些行和列

    • 使用 drop() 方法同时删除行和列。
  3. 打印删除的行和列

    • rows_to_deletecols_to_delete 保存了被删除的行和列的索引和名称,可以直接打印。
  4. 打印删除后的 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)
http://www.lryc.cn/news/513153.html

相关文章:

  • IO Virtualization with Virtio.part 1 [十二]
  • ShardingSphere-Proxy分表场景:go测试案例
  • OpenStack系列第四篇:云平台基础功能与操作(Dashboard)
  • ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础
  • 25上半年软考高级系统分析师易混淆知识点
  • 采集JSON解析错误的修复
  • Java中实现对象的深拷贝(Deep Copy)
  • 位置编码-APE
  • MySQL有哪些锁?
  • Everything实现,快速搜索文件
  • [硬件] DELL BIOS 相关注意事项
  • Rocky Linux 下安装Liboffice
  • 【每日学点鸿蒙知识】长时任务、HarmonyAppProvision申请、preferences、Testing工具、应用保活
  • 步进电机驱动算法——S形加减速算法原理
  • 【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
  • 2024年中国新能源汽车用车发展怎么样 PaperGPT(一)
  • 数据结构-排序思想
  • python 快速排序(Quick Sort)
  • MySQL数据库——常见慢查询优化方式
  • 【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火
  • C语言性能优化:从基础到高级的全面指南
  • 常用的公共 NTP(网络时间协议)服务器
  • Kafka中的Topic和Partition有什么关系?
  • Unity 使用UGUI制作卷轴开启关闭效果
  • MarkDown怎么转pdf;Mark Text怎么使用;
  • 整合版canal ha搭建--基于1.1.4版本
  • QGIS移动图元功能
  • 【模电刷题复习--填空】
  • shardingsphere-jdbc-core-spring-boot-starter的性能问题(理论)
  • Java Map 集合详解:基础用法、常见实现类与高频面试题解析