2016-12-11 6 views
1

私はちょうど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%+ヌル値、削除)に基づいて列を削除します。

+1

ファーストオフ。パーセンテージを得るために 'df.isnull()。sum()'を使わないでください。 'df.isnull()。mean()'を使用してください。 –

答えて

1

は、列に

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

をマルチインデックスを作成し、列のあなたの整数の位置を維持し、その後、ヌルのフィルタリングおよび概要は場所

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']) 
+0

うわー、これは美しいです。 – Jakub

+0

これは最終的に2つの関数になります。最初のコードは、一般的な探索の目的で書き込んだコードです(列を削除できるようにするなど)。なぜインデックスが印刷されないのか、私は少し混乱しています。 ここでは2番目のコードが正確にあなたのコードです。これはしきい値に基づいて削除されます。 – jhub1

+0

私はおそらくあなたの目的を完全には理解していませんが、私はどんな機能も必要としません。この1行のコードは、40%未満の値を持つ列をnullとして見つけ出し、それらをフィルタリングします。 –

関連する問題