如何在Pandas中删除空值占比超过60%的列?
解决方法:删除空值占比超60%的列
没问题,我来帮你搞定这个需求!咱们一步一步来处理:
步骤1:统一标记所有空值
你的DataFrame里存在'NULL'、纯空格这类自定义空值,首先得把它们转换成Pandas能识别的NaN,这样才能准确计算空值占比:
import pandas as pd import numpy as np # 初始化你的DataFrame data = { 'c1': ['Test1','Test2','NULL','Test3',' ','Test4','Test4','Test1',"Test3"], 'c2': [' ','Test1',' ','NULL',' ','NULL','NULL','NULL','NULL'], 'c3': [0,0,0,0,0,1,5,0,0], 'c4': ['NULL', 'Test2', 'Test1','Test1', 'Test2', 'Test2','Test1','Test1','Test2'] } df = pd.DataFrame(data) # 先处理字符串列的全空格情况,再替换'NULL'为标准NaN df = df.apply(lambda col: col.str.strip().replace('', np.nan) if col.dtype == 'object' else col) df.replace('NULL', np.nan, inplace=True)
这一步的作用是把所有“空值”统一成Pandas标准的NaN,避免漏统计那些自定义的空标记。
步骤2:计算每列的空值占比
接下来计算每列中空值的比例,用isna()判断空值,mean()直接得到占比(因为True=1,False=0,均值就是空值在列中的占比):
# 计算每列的空值占比 null_ratio = df.isna().mean()
运行后你会得到类似这样的结果:
c1 0.222222 c2 0.777778 c3 0.000000 c4 0.111111 dtype: float64
步骤3:筛选保留符合条件的列
最后只保留空值占比≤60%(也就是0.6)的列:
# 筛选出空值占比不超过60%的列 filtered_df = df.loc[:, null_ratio <= 0.6]
最终filtered_df就会去掉空值占比超60%的c2列,保留c1、c3、c4三列。
内容的提问来源于stack exchange,提问作者Krypt
相关产品推荐
相关产品推荐

