根据空值的百分比

时间:2017-10-25 18:09:15

标签: python pandas

我有一个包含大约60列和200万行的数据帧。有些列大多是空的。 我使用此函数计算了每列中空值的百分比。

def missing_values_table(df): 
    mis_val = df.isnull().sum()
    mis_val_percent = 100 * df.isnull().sum()/len(df)
    mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
    mis_val_table_ren_columns = mis_val_table.rename(
    columns = {0 : 'Missing Values', 1 : '% of Total Values'})
    return mis_val_table_ren_columns

现在我想删除缺少超过80%(例如)值的列。我尝试了以下代码,但它似乎没有起作用。

df = df.drop(df.columns[df.apply(lambda col: col.isnull().sum()/len(df) > 0.80)], axis=1)

提前谢谢你。希望我不会遗漏一些非常基本的东西

我收到此错误

  

TypeError :(“'generator'对象不可调用”,u'occurred at index   Unique_Key')

2 个答案:

答案 0 :(得分:13)

您可以使用带有阈值参数

的dropna()
thresh = len(df) * .2
df.dropna(thresh = thresh, axis = 1, inplace = True)

答案 1 :(得分:0)

def missing_values(df, percentage):

    columns = df.columns
    percent_missing = df.isnull().sum() * 100 / len(df)
    missing_value_df = pd.DataFrame({'column_name': columns,
                                 'percent_missing': percent_missing})

    missing_drop = list(missing_value_df[missing_value_df.percent_missing>percentage].column_name)
    df = df.drop(missing_drop, axis=1)
    return df