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


いいなと思ったら応援しよう!