0

0

如何在 Pandas 中基于多条件安全删除 DataFrame 行

聖光之護

聖光之護

发布时间:2026-01-29 19:33:16

|

885人浏览过

|

来源于php中文网

原创

如何在 Pandas 中基于多条件安全删除 DataFrame 行

本文详解如何使用布尔索引高效、安全地删除满足多个条件(如 column1 为 "b" 且 column4 为 nan)的 dataframe 行,避免循环修改导致的错误和无效操作。

在 Pandas 中,切勿在遍历 DataFrame 的同时直接调用 df.drop() 修改原数据——这不仅效率极低,还因索引动态变化和链式赋值问题导致操作“看似无错却毫无效果”(如题中 for row in df.iterrows(): ... df.drop() 不生效)。正确做法是采用向量化布尔索引(Boolean Indexing),一次性生成逻辑掩码并过滤数据。

核心思路是:保留不满足“删除条件”的行。题目要求删除 column1 == 'B' column4.isna() 的行,因此保留条件为二者至少一个不成立,即:

# ✅ 推荐写法:使用 .ne() 和 .notna(),语义清晰
df_filtered = df[df['column1'].ne('B') | df['column4'].notna()]

# ✅ 等价写法:使用德·摩根定律(De Morgan's Law)
df_filtered = df[~(df['column1'].eq('B') & df['column4'].isna())]

两种写法逻辑等价,均返回新 DataFrame(原 DataFrame 不变)。其中:

  • .ne('B') 等价于 != 'B',判断 column1 是否不等于 'B';
  • .notna() 判断 column4 是否非空(非 NaN)
  • | 是按元素的逻辑“或”,& 是逻辑“与”,~ 表示逻辑“非”;
  • 所有操作均为向量化,无需循环,性能优异且线程安全。

以原始数据为例:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'column1': ['A', 'B', 'B', 'B'],
    'column2': [1, 1, 1, 1],
    'columns3': [2, 2, 2, 2],
    'column4': [3.0, 3.0, np.nan, np.nan]
})

执行 df_filtered = df[df['column1'].ne('B') | df['column4'].notna()] 后,结果为:

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载
  column1  column2  columns3  column4
0       A        1         2      3.0
1       B        1         2      3.0

✅ 第 2、3 行(索引 2 和 3)被成功剔除:它们同时满足 column1 == 'B' 且 column4.isna()。

⚠️ 注意事项:

  • 若需原地修改原 DataFrame,请显式赋值:df = df[...](推荐)或使用 inplace=True 参数(如 df.drop(df[...].index, inplace=True),但布尔索引更简洁);
  • 避免使用 df.column1 == 'B' 这类点号访问含空格/特殊字符列名的列(应统一用 df['column1']);
  • isna() 和 isnull() 功能完全相同,但 isna() 是官方推荐写法;
  • 多条件组合务必用圆括号包裹每个子条件(如 (df['A'] > 0) & (df['B'].isin(['x','y']))),否则运算符优先级可能导致逻辑错误。

掌握布尔索引,是写出高效、健壮 Pandas 代码的关键一步——告别低效循环,拥抱向量化思维。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

61

2025.12.04

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

350

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

29

2025.11.30

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

87

2025.10.17

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

503

2023.08.10

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

12

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
誉天教育RHCE视频教程
誉天教育RHCE视频教程

共9课时 | 1.4万人学习

尚观Linux RHCE视频教程(二)
尚观Linux RHCE视频教程(二)

共34课时 | 5.8万人学习

尚观RHCE视频教程(一)
尚观RHCE视频教程(一)

共28课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号