Python-pandas ~データ削除/フィルタ~
※記事一覧のまとめはこちら
データフレームのデータを削除/フィルタする手法
削除とフィルタは、ほぼ同義と考えてよさそう
どうやってdeleteしようと考えるより、どうやってフィルタしようと考えた方が上手くいく気がする
データフレームをフィルタ:df[フィルタ条件]
フィルタした結果を元のデータフレームに指定する事で、実質的にデータ削除が可能。これが一番使いやすい気が
# 列'XXX'がlistに含まれる値、かつ列'YYY'が1のものでフィルタ A_df = A_df[(A_df['XXX'].isin('list名'))&(A_df['YYY'] == 1)]
-----
データフレームをフィルタ②:
df[~フィルタ条件]
~を付ければ、フィルタ条件を満たさないものをフィルタ出来る
データフレームAの列にはあって、Bの列にはないデータをフィルタ、という事が出来そう ※特段~を使わずに出来そうだが・・・
# Aの列'XXX'がBの列'XXX'に存在しないデータをフィルタ # ⇒Aにはあって、Bにはないデータをフィルタ A_df = A_df[~A_df['XXX'].isin(B_df['YYY'])]
-----
データフレームを列の値ででフィルタ:df[(df['列名'] == '値')]
列名を指定してフィルタ出来る
逆に!=としてフィルタする事で、特定の値を含むレコードを削除するような使い方が出来る
# 列'XXX'がVではないもの、でフィルタ A_df = A_df[(A_df['XXX'] != 'V')]
-----
データフレームをindexの値でフィルタ:df[XX:YY]
indexが降順ソートになってる場合は[大きい値:小さい値]としないとフィルタされないので注意
# データフレームのindexが9/20から9/26?のデータをフィルタ A_df = A_df['2020-09-20':'2020-09-26']
-----
データフレームの上位(下位)何件を表示:
.head()/.tail()
ソートした上で使えば、ベスト10を残して削除、などで使える
# 列'XXX'の値で降順ソートして、上から10件を取得(ベスト10を取得みたいに使える) A_df = A_df.sort_values(by=['XXX'], ascending=True).head(10)
-----
データフレームを重複削除: df.drop_duplicates()
keep=first:一番上にある行を残す
subset:重複判定する列
# 列'XXX','YYY'で重複削除する。残す行は一番上にある行 A_df = A_df.drop_duplicates(keep='first',subset=['XXX', 'YYY']) # 何も指定しないと、すべての列が重複したレコードを重複削除 # (すべてが重複してるので、keepは指定する必要性ない) A_df = A_df.drop_duplicates()
-----
データフレームを全件削除:
df.drop(ragnge(len(df)))
.dropで全行を指定する事で実現
lenで件数を取得し、rangeに指定する事で全行を指定してdrop
データフレームを一度空に(クリア)したい場合に使えそう?
A_df = A_df.drop(range(len(A_df)))
-----
strメソッド
https://qiita.com/shihono/items/157509d23435298796cd
