You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除Pandas DataFrame中含指定列空值的整类数据

解决Pandas中删除含空值的整本书所有条目的问题

问题描述

假设有如下Pandas DataFrame:

bookpagewords_per_pagecharacters
Book 1127NaN
Book 12NaN30
Book 123025
Book 213026
Book 222830

需求是:删除那些在words_per_page或characters列中至少存在一个空值的整本书的所有条目。比如上述场景中,Book 1存在空值,需要删除它的所有相关行。要求使用直接在DataFrame上操作的高效方法,避免外部if语句,适配大数据量场景。

高效解法

可以通过Pandas的分组和向量化运算实现,全程内部操作,无需外部循环:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'book': ['Book 1', 'Book 1', 'Book 1', 'Book 2', 'Book 2'],
    'page': [1, 2, 2, 1, 2],
    'words_per_page': [27, np.nan, 30, 30, 28],
    'characters': [np.nan, 30, 25, 26, 30]
})

# 步骤1:标记每行所在书籍是否在目标列存在空值
has_null = df.groupby('book')[['words_per_page', 'characters']].transform(lambda x: x.isnull().any())

# 步骤2:生成保留行的掩码(所在书籍无任何空值的行)
mask = ~has_null.any(axis=1)

# 步骤3:筛选得到结果
result_df = df[mask]

print(result_df)

代码说明

  • groupby('book').transform(...):按书籍分组后,将每组的空值检查结果广播到组内每一行,生成与原DataFrame同结构的布尔矩阵,标记每行所在组的对应列是否有null。
  • has_null.any(axis=1):对每行的两个列的布尔值取逻辑或,得到该行所在书籍是否在任意目标列存在空值。
  • ~mask取反后,筛选出所有所在书籍无空值的行,最终得到符合要求的DataFrame。

这种方法利用Pandas的向量化特性,处理大数据量时效率远高于循环或外部判断,完全满足性能要求。

内容的提问来源于stack exchange,提问作者OanaB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:16:02