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

如何查找DataFrame中含NaN的行,并删除这些行及其下方指定数量的行?

解决方案

核心思路是先定位全NaN行的位置,再将这些行及其下方指定数量的行统一标记为待删除,最后过滤即可,以下是可直接运行的实现代码:

方法1:布尔索引(推荐,代码更简洁)

无需手动处理索引越界问题,适配任意索引类型的DataFrame:

import pandas as pd
import numpy as np

# 配置参数:删除NaN行下方的行数
delete_below = 2

# 标记所有全NaN行
is_all_nan = df.isna().all(axis=1)
# 向下扩展标记范围,覆盖要删除的后续行
for i in range(1, delete_below + 1):
    is_all_nan = is_all_nan | is_all_nan.shift(fill_value=False)

# 取反得到要保留的行,重置索引可选
df_clean = df[~is_all_nan].reset_index(drop=True)

方法2:索引枚举

适合需要灵活调整删除逻辑的场景:

import pandas as pd
import numpy as np

delete_below = 2
# 定位所有全NaN行的索引
nan_row_indexes = df[df.isna().all(axis=1)].index

drop_indexes = set()
max_row = len(df)
for idx in nan_row_indexes:
    # 加入当前NaN行,以及后续delete_below行
    for offset in range(delete_below + 1):
        current_idx = idx + offset
        if current_idx < max_row:
            drop_indexes.add(current_idx)

# 删除指定行,重置索引可选
df_clean = df.drop(drop_indexes).reset_index(drop=True)

效果说明

两种方法都自动处理了重复删除的场景:如果两个全NaN行距离很近、删除范围重叠,也不会出现逻辑错误,最终输出的DataFrame会完全过滤掉所有全NaN行及其下方指定数量的非NaN行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:39:03