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

如何检查DataFrame多列完整性并批量置空不满足条件的列?

问题描述

原始DataFrame如下:

ID  Name    Date        Code  Manager
1   Paulo   %           10    Jonh's Peter
2   Pedro   2001-01-20  20    
3   James               30    
4   Sofia   2001-01-20  40    -

需求:检查Date、Code、Manager三列是否均已填充有效值(空字符串/空白视为空值,%、-这类非空符号视为有效值)。若这三列中任意一列存在空值,则将该行的这三列所有值置空,最终结果如下:

ID  Name    Date        Code  Manager
1   Paulo   %           10    Jonh's Peter
2   Pedro           
3   James           
4   Sofia   2001-01-20  40    -
最优解决方案

使用Pandas可以高效实现该需求,步骤如下:

  1. 导入依赖并构造DataFrame
    先把原始数据转换成Pandas DataFrame,注意将空白值标记为NaN或空字符串:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        'ID': [1, 2, 3, 4],
        'Name': ['Paulo', 'Pedro', 'James', 'Sofia'],
        'Date': ['%', '2001-01-20', np.nan, '2001-01-20'],
        'Code': [10, 20, 30, 40],
        'Manager': ["Jonh's Peter", '', np.nan, '-']
    })
    
  2. 定义目标列并生成判断掩码
    针对指定列,生成一个布尔掩码,标记哪些行的三列都有有效值:

    target_cols = ['Date', 'Code', 'Manager']
    
    # 处理不同数据类型的空值判断:字符串列先去空白再判断非空,数值列直接判断非缺失
    def check_non_null(x):
        if x.dtype == object:
            return x.str.strip().ne('')
        return x.notna()
    
    mask = df[target_cols].apply(check_non_null, axis=0).all(axis=1)
    
  3. 批量置空不符合条件的行
    利用掩码定位到需要置空的行,将目标列设为空字符串:

    df.loc[~mask, target_cols] = ''
    

执行上述代码后,即可得到需求中的结果。

代码说明

  • check_non_null函数针对不同数据类型做适配:字符串类型先去除首尾空白再判断是否为空,数值类型直接判断是否为缺失值;
  • all(axis=1)确保每行的三列都满足非空条件,得到的mask为True的行是符合要求的行;
  • ~mask取反得到需要置空的行,通过loc批量修改目标列的值,效率远高于逐行遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:54:22