This article is available in: English
この記事はpandasに関して、下記の内容の備忘録です。
- 全て0の列を削除する方法
- 一つでも0の列を削除する方法
- 全て0の行を削除する方法
- 一つでも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