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

如何删除指定列中缺失值达阈值的DataFrame行?

解决方案:灵活删除指定列中NaN数量超阈值的行

原始数据与需求

给定如下DataFrame:

import pandas as pd
import numpy as np
d = {'name': ['bob', 'jake','Sem'], 'F1': [3, 4, np.nan], 'F2': [14, 40, 7], 'F3': [np.nan, 1, 55]}
df = pd.DataFrame(data=d)

输出:

name   F1  F2    F3
0   bob  3.0  14   NaN
1  jake  4.0  40   1.0
2   Sem  NaN   7  55.0

需求:删除F开头的所有列(可扩展至F100)中至少有2个NaN的行,最终保留前两行。

最优实现方式

核心思路是通过灵活选列+统计每行NaN数量+布尔过滤,完全满足可调整列范围和阈值的需求:

步骤1:灵活指定要检查的列

如果目标列都是以F开头(如F1、F2...F100),用filter(like='F')可以自动匹配所有符合前缀的列,不用手动列全:

# 选中所有F开头的列
target_cols = df.filter(like='F').columns

如果需要指定具体列范围(比如F5到F20),也可以用列名列表:

# 示例:指定F1到F3的列
target_cols = ['F1', 'F2', 'F3']

步骤2:统计每行的NaN数量

用isna()标记NaN,再按行求和得到每行的NaN个数:

# 计算每行在目标列中的NaN数量
nan_count = df[target_cols].isna().sum(axis=1)

步骤3:设置阈值并过滤行

设置允许的最大NaN数量阈值(这里是2,即保留NaN数量<2的行),然后通过布尔索引筛选:

# 设置阈值:最多允许1个NaN(即删除>=2个NaN的行)
threshold = 2
filtered_df = df[nan_count < threshold]

完整代码

import pandas as pd
import numpy as np

# 原始数据
d = {'name': ['bob', 'jake','Sem'], 'F1': [3, 4, np.nan], 'F2': [14, 40, 7], 'F3': [np.nan, 1, 55]}
df = pd.DataFrame(data=d)

# 1. 灵活选择目标列(F开头的所有列)
target_cols = df.filter(like='F').columns

# 2. 统计每行NaN数量
nan_count = df[target_cols].isna().sum(axis=1)

# 3. 设置阈值并过滤
threshold = 2
filtered_df = df[nan_count < threshold]

print(filtered_df)

输出结果:

name   F1  F2   F3
0   bob  3.0  14  NaN
1  jake  4.0  40  1.0

优势说明

  • 列范围灵活:通过filter(like='F')自动匹配所有F前缀列,新增F4-F100时无需修改代码;也可手动指定列列表适配特殊需求。
  • 阈值可调:只需修改threshold变量,即可控制删除NaN数量的阈值(比如改成3,就删除至少3个NaN的行)。
  • 高效简洁:利用pandas原生向量操作,比循环遍历行效率高得多,适合处理大数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:03:17