2016-03-22 46 views
-1

は、次のように私はデータフレームがあると、行のNA値持つ列を削除する - Pythonの

import pandas as pd 

columns=['A','B','C','D', 'E', 'F'] 
index=['1','2','3','4','5','6'] 
df = pd.DataFrame(columns=columns,index=index) 
df['D']['1'] = 1 
df['E'] = 1 
df['F']['1'] = 1 
df['A']['2'] = 1 
df['B']['3'] = 1 
df['C']['4'] = 1 
df['A']['5'] = 1 
df['B']['5'] = 1 
df['C']['5'] = 1 
df['D']['6'] = 1 
df['F']['6'] = 1 
df 

    A B C D E F 
1 NaN NaN NaN 1 1 1 
2 1 NaN NaN NaN 1 NaN 
3 NaN 1 NaN NaN 1 NaN 
4 NaN NaN 1 NaN 1 NaN 
5 1 1 1 NaN 1 NaN 
6 NaN NaN NaN 1 1 1 

を私の状態は私が唯一のときA、B、C(一緒に値を持つ列を削除したいです)に値がありません。どの列がA列、B列、C列とも互いに排他的であるかを知りたい。私はAまたはBまたはCに値があるときだけ値を持つ列を見つけることに興味があります。ここでの出力は、D、F列を削除することです。しかし、私のデータフレームには400の列があり、これをA、B、Cの残りの列に対してチェックする方法が必要です。私は考えることができます

一つの方法、

df = df[np.isfinite(df['A'])] 
df = df[np.isfinite(df['B'])] 
df = df[np.isfinite(df['C'])] 

C

をA、BからNAの行を削除し、すべての列のNAカウントを取得し、行の合計数を確認し、

df.isnull().sum() 

と一致する数を削除します。

これを行うにはより効率的な方法がありますか?

おかげ

答えて

0

よりもむしろ行を削除、ちょうど同時にNaNに等しいA、B、Cを持っていない人を選択します。

mask = df[["A", "B", "C"]].isnull().all(axis=1) 
df = df[~mask] 
+0

対応する列を削除します。それを行う方法を見つけることができますか? – haimen

+0

あなたは説明に必要な結果を追加できますか? –

関連する問題