Pandasで値が全て0
の行・列を削除する方法です。
推奨
# 全て0の行を削除する
df = df.loc[(df != 0).any(axis=1)]
# 全て0の列を削除する
df = df.loc[:, (df != 0).any(axis=0)]
(別方法)
# 全て0の行を削除する
df = df.mask(df==0).dropna(how='all', axis=0).fillna(0)
# 全て0の列を削除する
df = df.mask(df==0).dropna(how='all', axis=1).fillna(0)
補足
- 欠損値を含まない
pandas.DataFrame
であること。 - 上記コードの
0
を任意の値に置き換えてもOK。 -
.mask()
は、条件に一致する値に対してTrue
を返し、これに対して置換したい値を第2引数に指定する。指定しない場合、NaN
が置換されるので、上記ではこれを利用している。
- 欠損値を含む場合は、一度別の値に置換してから、処理後に戻せばよい。ただし、DataFrameの中に存在しない値を用いること。
df = df.fillna(99999)
df = df.mask(df==0).dropna(how='all', axis=1).fillna(0)
df = replace(99999, np.NaN)