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

Pandas统计每列最大连续NaN值 按阈值填充或删除整列

Pandas 连续缺失值规则处理实现

直接按规则写向量化实现即可,不需要逐行循环,运行效率更高:

完整代码

import pandas as pd
import numpy as np

# 1. 计算每列最大连续NaN长度
is_na = df.isna()
# 对连续NaN块做分组标记
na_cumsum = is_na.cumsum()
# 统计每个连续NaN块的长度,取每列最大值,整列全为NaN时直接取列总长度
max_consec_nan = na_cumsum[~is_na].apply(
    lambda col: col.diff.diff().fillna(col.iloc[0]).max() if len(col) > 0 else len(df)
)

# 2. 筛选保留列:最大连续NaN长度小于3
keep_columns = max_consec_nan[max_consec_nan < 3].index

# 3. 对保留列做前向填充
df_result = df[keep_columns].ffill()

逻辑说明

  • 连续NaN长度统计用cumsum()给连续NaN块打统一标签,再算差值得到每个块的长度,比写循环快很多,数据量大的时候性能差距很明显
  • 判定规则完全匹配需求:单列最长连续NaN≥3直接删整列,<3的列执行前向填充,缺失位置取上方最近的非NaN值补全
  • 若列最开头存在连续NaN(上方无有效值),前向填充后该位置仍为NaN,本身不存在可用于填充的前侧有效值,符合逻辑

样例数据处理结果

对你提供的测试数据集,处理后仅保留100285、114157两列:

  • 被删除列共4个:113550、112283、101668三列全为NaN,连续长度20远大于3;100019列存在长度为4的连续NaN段(第4到第7行),满足删除条件
  • 保留的100285列最长连续NaN仅1(仅第7行单独缺失),114157列最长连续NaN仅1(第0、4、18行单独缺失),前向填充后所有可填充的缺失值都能被上方有效值补全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:03:25