如何删除缺失值数量达指定阈值或比例的数据集行?
删除含指定数量/占比缺失值的行解决方案
假设你用Python的pandas库处理这份表格数据(这是处理这类结构化数据最常用的工具),我会一步步帮你实现需求:
1. 先把原始数据转换成DataFrame
首先我们把你给出的数据集加载成pandas的DataFrame格式:
import pandas as pd import numpy as np # 构建你的数据集 data = { 'A': [0.46, 0.65, np.nan, 0.50, 0.45, np.nan, 0.32, 0.82, 0.65, 0.36], 'B': [0.23, 0.48, 1.00, 0.97, 0.44, 0.39, 0.87, 0.67, np.nan, 0.23], 'C': [np.nan, 0.07, 0.79, 0.07, 0.23, np.nan, 0.73, 0.73, np.nan, 1.00], 'D': [0.41, 0.15, 0.09, 0.55, 0.41, 0.31, 0.57, 0.19, 0.81, 0.51] } df = pd.DataFrame(data)
原始数据的输出样式:
A B C D 0 0.46 0.23 NaN 0.41 1 0.65 0.48 0.07 0.15 2 NaN 1.00 0.79 0.09 3 0.50 0.97 0.07 0.55 4 0.45 0.44 0.23 0.41 5 NaN 0.39 NaN 0.31 6 0.32 0.87 0.73 0.57 7 0.82 0.67 0.73 0.19 8 0.65 NaN NaN 0.81 9 0.36 0.23 1.00 0.51
2. 两种方式实现删除逻辑
方式一:删除包含2个及以上缺失值的行
用pandas内置的dropna()方法,通过thresh参数指定至少需要多少个非缺失值的行才会被保留。你的数据有4列,要删除含2个及以上缺失值的行,意味着只保留非缺失值≥3的行,所以设置thresh=3:
# 保留至少3个非缺失值的行(即缺失值≤1的行) filtered_df = df.dropna(thresh=3)
方式二:删除缺失值占比超过50%的行
如果需要按缺失值占比来过滤,先计算每行的缺失值占比,再保留占比≤50%的行(对你的4列数据来说,50%就是2个缺失值,和方式一效果一致):
# 计算每行缺失值占比,筛选占比不超过50%的行 filtered_df = df[df.isna().mean(axis=1) <= 0.5]
3. 最终处理结果
运行上述任意一种代码后,得到的结果如下:
A B C D 0 0.46 0.23 NaN 0.41 1 0.65 0.48 0.07 0.15 2 NaN 1.00 0.79 0.09 3 0.50 0.97 0.07 0.55 4 0.45 0.44 0.23 0.41 6 0.32 0.87 0.73 0.57 7 0.82 0.67 0.73 0.19 9 0.36 0.23 1.00 0.51
可以看到第5行和第8行(都包含2个缺失值)已经被成功删除,完全符合你的需求。
内容的提问来源于stack exchange,提问作者michael0196




