首页 > 解决方案 > 使用 pandas 丢弃超过 25% 的缺失数据

问题描述

我有一个超过 30K 行的 csv 文件。其中一些行包含 NA 值,我想丢弃缺失值超过 25% 的行。我尝试过使用 pandas 命令 dropna(),但我只能使用命令“any”或“all”。我应该使用哪一行代码来区分缺失值超过 25% 的行?

谢谢

标签: pythonpandas

解决方案


更新:基于类似问题的一行答案:

df = df[ df.isna().mean(axis=1) <= 0.25 ]

假设你有这个数据框:

df = pd.DataFrame(dict(
    keep=dict(a=1, b=2, c=3, d=4),
    drop=dict(a=None, b=None, c=10, d=20),
    keep_2=dict(a=None, b=4, c=2, d=1),
    drop_2=dict(a=None, b=None, c=None, d=None)
)).T

您可以使用 计算行中空值的数量df.isna().sum(axis=1)。轴 1 用于显示您在行中添加项目,而不是在列中。然后你可以检查哪些行有超过 25% 的 nans 并选择所有其余的:

NANS_THRESHOLD = 0.25

nans_count_in_line = df.isna().sum(axis=1)
total_columns = len(df.columns)
is_too_many_nans = nans_count_in_line / total_columns > NANS_THRESHOLD

df[ ~is_too_many_nans ]

结果:

        a   b   c   d
keep    1   2   3   4
keep_2  NaN 4   2   1

推荐阅读