Skip to content

toona note

DataFrame の全てが 0 である列を削除するシンプルな方法

内容

pandas の DataFrame について、列のすべての値が 0 である列を削除する方法です。

コード

1 列だけ 0 のみでなる 3 * 4 のデータフレームの準備

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(12).reshape([3, 4]))
df[1] = 0
print(df)

"""
   0  1   2   3
0  0  0   2   3
1  4  0   6   7
2  8  0  10  11
"""

0 のみの値からなる列を削除する方法 part1

df_no0 = df.loc[:, (df != 0).any(axis=0)]
print(df_no0)

"""
   0   2   3
0  0   2   3
1  4   6   7
2  8  10  11
"""

0 のみの値からなる列を削除する part2

df_no0 = df.loc[:, ~(df == 0).all(axis=0)]
print(df_no0)

"""
   0   2   3
0  0   2   3
1  4   6   7
2  8  10  11
"""

コード説明

part1 は 0 ではないデータを True とし、 1 つでも False の存在する列を削除することで、列の値が 0 のみである列を削除します。 part2 は 0 であるデータを True とし、すべてが True である列を排除する (~ が not の意味) ことで、 列の値が 0 のみである列を削除します。

終わりに

列の値がすべて 0 である列を削除する方法を 2 パターン示しました。 特殊なことはしておらず、難しい操作でもありませんが、即座には思いつかなかったのでまとめました。