はじめに
Pandasデータフレームで特定の列に特定の値を含んだ行を削除して、残った行のみの新たなデータフレームを作成します。
やりたいこと
-
以下のような表がある場合に、「出欠」の列の値が「欠席」になっている「Bさん」と「Dさん」の行を削除します。
<削除前>
<削除後>
実装ポイント
- 削除したい語句が入っている行を削除する為に、削除したい語句が入ってい・な・い行を抽出します。
コード例
import pandas as pd
# Excelファイルをデータフレームとして読み込み
df = pd.read_excel(r"ファイル・パス")
# 「出欠」の列の値が「欠席」になっていない行を選択
df_sakuzyo = df[df["出欠"]!= "欠席"]
コード詳細
途中の状態を出力してみると、以下のようになっています。
print(df["出席"]!= "欠席")
0 True
1 False
2 True
3 False
4 True
Name: 出席, dtype: bool
print(df[df["出席"]!= "欠席"] )
氏名 出席番号 数学(点) 英語(点) 理科(点) 社会(点) 国語(点) 出席
0 Aさん 1 80 77 90 90 80 NaN
2 Cさん 3 77 95 90 80 92 NaN
4 Eさん 5 80 70 95 92 82 NaN
コードの関数化
import pandas as pd
def delete_specific_row(pandas_df, target_column, target_word):
# pandas_df 読み込んだデータフレーム (pandas.core.frame.DataFrame)
# target_colum 削除対象の値が入っている列名(文字列)
# output_file 削除対象の値(文字列)
# 削除対象の値が入った行を削除したデータフレームをリターン
return pandas_df[pandas_df[target_column] != target_word]
# 関数の使用例
import pandas as pd
df = pd.read_excel(r"ファイル・パス")
df = delete_specific_row(df, "出欠", "欠席")