索引未显示在数据框中 - 需要显示相应的索引,然后使用 Pandas 根据阈值删除列

Index not showing in dataframe - need to display corresponding index then delete columns based on threshold using Pandas

我刚开始学习 Python 所以非常感谢任何帮助。

所以这里的首要目的是数据探索+数据清理。

我在下面编写的函数输出一个数据框,显示每列缺失值的百分比。

def missing_values_table(df):
    missing_vals = df.isnull().sum()
    # Boolean check of all value to True for all null values, then sums for total count.
    percent_conversion = 100 * df.isnull().sum()/len(df)
    # Percent conversion.
    combined_table = pd.concat([missing_vals, percent_conversion], axis=1)
    # Merging dataframes.
    table_renamed = combined_table.rename(columns = 
        {0:'Missing Values', 1:'Percentage'})
    # Giving column labels.
    table_renamed.sort_values(['Percentage'], ascending=False, inplace=True)
    # Sort descending.
    return table_renamed

有问题的输出(它缺少索引,它会告诉我它们在原始数据框中的位置......这是巨大的):

                          Missing Values  Percentage
Engine_Horsepower                 375906   93.712932
Pushblock                         375906   93.712932
Enclosure_Type                    375906   93.712932
Blade_Width                       375906   93.712932
[...]

期望的输出:

                          Missing Values  Percentage
32 Engine_Horsepower                 375906   93.712932
15 Pushblock                         375906   93.712932
3  Enclosure_Type                    375906   93.712932
17 Blade_Width                       375906   93.712932
[...]

这些数字对应于原始数据框中的列号,已预先排序。

只有在单独调查这些列以确认可以删除这些列之后,我才会根据阈值(50%+ 空值,删除)删除这些列。

要保留列的整数位置,请将列设为 MultiIndex

df.columns = pd.MultiIndex.from_arrays([range(len(df.columns)), df.columns])

然后null的过滤和汇总会保留位置

threshold = .4
df[df.columns[df.isnull().mean() < threshold]]

这将执行您的函数的第一部分

df_null_summary = pd.concat([df.isnull().sum(), df.isnull().mean()], axis=1, keys=['Missing Values', 'Percentage'])