【Python】pandasで全て0の列と行、一つでも0の列と行を削除する

プログラミング

This article is available in: English

 この記事はpandasに関して、下記の内容の備忘録です。

  1. 全て0の列を削除する方法
  2. 一つでも0の列を削除する方法
  3. 全て0の行を削除する方法
  4. 一つでも0の行を削除する方法

方針としてはpythonの組み込み関数である、all(), any() を用いて判別し、

該当の行、列の削除を drop で行います。

全て0の列を削除する方法

import pandas as pd

df = pd.DataFrame({'A':[1,2,3],'B':[0,0,0],'C':[4,0,5],'D':[6,7,8]})

def remove_all_zero_col(df):
    """全て0の列を削除"""
    df = df.copy()
    for col in df.columns:
        if (df[col] == 0).all():
            df.drop(col, axis=1, inplace=True)
    return df


print('before')
print(df)

df = remove_all_zero_col(df)

print('after')
print(df)
出力
before
   A  B  C  D
0  1  0  4  6
1  2  0  0  7
2  3  0  5  8
after
   A  C  D
0  1  4  6
1  2  0  7
2  3  5  8

一つでも0の列を削除する方法

import pandas as pd

df = pd.DataFrame({'A':[1,2,3],'B':[0,0,0],'C':[4,0,5],'D':[6,7,8]})

def remove_any_zero_col(df):
    """一つでも0の列を削除"""
    df = df.copy()
    for col in df.columns:
        if (df[col] == 0).any():
            df.drop(col, axis=1, inplace=True)
    return df


print('before')
print(df)

df = remove_any_zero_col(df)

print('after')
print(df)
出力
before
   A  B  C  D
0  1  0  4  6
1  2  0  0  7
2  3  0  5  8
after
   A  D
0  1  6
1  2  7
2  3  8

全て0の行を削除する方法

import pandas as pd

df = pd.DataFrame({'A':[1,0,2,3],'B':[4,0,0,5],'C':[6,0,0,7]})

def remove_all_zero_row(df):
    """全て0の行を削除"""
    df = df.copy()
    for row in df.index:
        if (df.loc[row] == 0).all():
            df.drop(row, axis=0, inplace=True)
    return df


print('before')
print(df)

df = remove_all_zero_row(df)

print('after')
print(df)
出力
before
   A  B  C
0  1  4  6
1  0  0  0
2  2  0  0
3  3  5  7
after
   A  B  C
0  1  4  6
2  2  0  0
3  3  5  7

一つでも0の行を削除する方法

import pandas as pd

df = pd.DataFrame({'A':[1,0,2,3],'B':[4,0,0,5],'C':[6,0,0,7]})

def remove_any_zero_row(df):
    """一つでも0の行を削除"""
    df = df.copy()
    for row in df.index:
        if (df.loc[row] == 0).any():
            df.drop(row, axis=0, inplace=True)
    return df


print('before')
print(df)

df = remove_any_zero_row(df)

print('after')
print(df)
出力
before
   A  B  C
0  1  4  6
1  0  0  0
2  2  0  0
3  3  5  7
after
   A  B  C
0  1  4  6
3  3  5  7

タイトルとURLをコピーしました