2017-03-28 13 views
1

I以下のデータフレームがありますいくつかのケースではフィルター行

In [48]: df.head(10) 
Out[48]: 
         beat1 beat2 beat3 beat4 beat5 beat6 beat7 
filename                  
M46_MI_RhHy61d.dat 0.7951 0.8554 0.9161 1.0789 0.6664 0.7839 0.6076 
M60_MI_AH53d.dat  0.7818 0.7380 0.8657 0.9980 0.7491 0.9272 0.8781 
M57_Car_AF0489d.dat 1.1040 1.1670 1.7740 1.3080 1.2190 1.0800 1.2390 
F62_MI_AH39d.dat  1.2150 0.9360 0.9890 1.1960 0.8420 1.1530 1.1360 
F81_MI_DM10d.dat  1.0650 1.1190 1.1330 1.2040 1.1220 1.1640 1.0600 
M61_My_508d.dat  0.6963 0.7910 0.6362 0.6938 0.7410 0.7198 0.7060 
M69_MI_554d.dat  1.0400 1.0890 1.0190 0.9600 1.0720 1.0870 1.0100 
F78_MI_548d.dat  1.1410 1.3290 0.8620 0.0000 1.3160 1.2180 1.2870 
F68_MI_AH152d.dat 1.1910 1.1170 1.1030 1.2430 1.0100 0.0000 0.0000 
M46_Myo_484d.dat  0.6799 0.7278 0.6808 0.7059 0.7973 0.6956 0.6685 

を、いくつかの(しかし、必ずしもその必要はない、すべての)列の値が0に等しく、私はドン」特定の行に対してどの列が表示されるかを知ることはできません。たとえば、上記のデータフレームでは、2番目の最後の行の最後の2つの値はゼロです。私はそのような行をデータフレームから削除したい。これらの値が表示される列を知っていれば私はそれを行うことができますが、正確には私が知らないものです。これを行うためのアイデアですか?

答えて

3

IIUC:

ゼロを含む行を削除しますか?オプション1
pd.DataFrame.mask

ブール配列引数がTrueあるnp.nanでデータフレームを返します。 dropnaはデフォルトでヌル値が存在する行を削除することができます。行のすべての値は

df.mask(df == 0).dropna() 

         beat1 beat2 beat3 beat4 beat5 beat6 beat7 
filename                 
M46_MI_RhHy61d.dat 0.7951 0.8554 0.9161 1.0789 0.6664 0.7839 0.6076 
M60_MI_AH53d.dat  0.7818 0.7380 0.8657 0.9980 0.7491 0.9272 0.8781 
M57_Car_AF0489d.dat 1.1040 1.1670 1.7740 1.3080 1.2190 1.0800 1.2390 
F62_MI_AH39d.dat  1.2150 0.9360 0.9890 1.1960 0.8420 1.1530 1.1360 
F81_MI_DM10d.dat  1.0650 1.1190 1.1330 1.2040 1.1220 1.1640 1.0600 
M61_My_508d.dat  0.6963 0.7910 0.6362 0.6938 0.7410 0.7198 0.7060 
M69_MI_554d.dat  1.0400 1.0890 1.0190 0.9600 1.0720 1.0870 1.0100 
M46_Myo_484d.dat  0.6799 0.7278 0.6808 0.7059 0.7973 0.6956 0.6685 

オプション2
使用locないゼロ

df.loc[(df != 0).all(1)] 

オプション3
numpy効率の多くを与えます。オプション2と同様の考え方。ただし、ゼロから再構築します。

v = df.values 
mask = (v != 0).all(1) 
pd.DataFrame(v[mask], df.index[mask], df.columns) 

ナイーブ時間勤務

enter image description here

+0

をテスト!親切にも説明をしていただけますか? – Peaceful

+0

特に、 'df = df [df> 0]'がうまくいかない理由を知りたい。 – Peaceful

+1

@Peaceful well 'df [df> 0]'ちゃんと動作します。 'df> 0'が' True'の 'df'の部分を返します。 'df> 0'が' False'のどこに答えがないので、あなたはnullを取得します。 'df [df> 0] .dropna()'も動作します。 – piRSquared