如何在pandas中按多条件删除列:仅删除全为None或空白+None的列
实现方案
你可以先把列中所有空白类字符串统一转为pandas可识别的缺失值,再判断整列是否全为缺失值,将符合删除条件的列传给df.drop即可,具体代码如下:
import pandas as pd import numpy as np # 1. 把全空白字符串(含空字符串、仅含空格/制表符的内容)统一替换为NaN,和None统一为缺失值格式 df = df.replace(r'^\s*$', np.nan, regex=True) # 2. 删除全为缺失值的列 df.drop(columns=df.columns[df.isna().all()], inplace=True)
代码说明
- 正则
r'^\s*$'可以匹配所有仅包含空白字符的内容,替换后原本的None、空值、空白值都会被识别为pandas的缺失值 df.isna().all()会逐列判断是否整列全为缺失值,返回布尔值序列df.columns[df.isna().all()]会筛选出所有符合删除条件的列名,传入drop的columns参数即可完成删除
如果需要保留原df不修改,去掉inplace=True参数,把执行结果赋值给新变量即可:
new_df = df.replace(r'^\s*$', np.nan, regex=True).drop(columns=df.columns[df.replace(r'^\s*$', np.nan, regex=True).isna().all()])
效果验证
用你提到的示例场景构造测试数据,运行后会自动删除全空的A列、仅含空白和None的C列,保留存在有效数据的B列,完全符合需求。
内容的提问来源于stack exchange,提问作者massu1000
相关产品推荐
相关产品推荐

