2017-10-02 2 views
2

この質問は複数の他の投稿で尋ねられましたが、動作する方法はありませんでした。これは私のデータフレームです:パンダのデータフレームからゼロを削除する

df = pd.DataFrame([[1,2,3,4.5],[1,2,0,4,5]]) 

私はどのように私はどちらかのことを知ってしたいと思います:

1)いずれかを含む行/すべてゼロ 2を削除します)いずれかを含む列/すべてゼロ

を削除します。

は、任意のゼロを含む行を削除するためには、これは働いていた:

df2 = df[~(df == 0).any(axis=1)] 
df2 = df[~(df == 0).all(axis=1)] 

しかし、私は、これは賢明なコラムを動作させることはできません。軸を0に設定しようとしましたが、このエラーが表示されます:

__main__:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index. 

お勧めはありますか?

答えて

4

あなたはこのためloc必要になるだろう:行のインデックスへ

df 
    0 1 2 3 4 
0 1 2 3 4 5 
1 1 2 0 4 5 

df.loc[:, ~(df == 0).any(0)] # notice the :, this means we are indexing on the columns now, not the rows 
    0 1 3 4 
0 1 2 4 5 
1 1 2 4 5 

直接インデックスのデフォルトを。 [0, 1, 3, 4]を使用して2行のみのデータフレームをインデックスに登録しようとしています。そのため、pandasに警告しています。

+1

データのシーケンシャルな性質を考えると、私はそれが '4.5 'ではなく' 4,5'で終わると考えられました。また、 'any'メソッドでゼロが必要であるとは思っていません。つまり' any() 'だけがうまくいくはずです。 – Alexander

+0

@アレクサンダーheheh、決して実現しただろう。ありがとう。 –

+0

パーフェクト、ありがとう。Coldspeed !! –

関連する問題