Python pandasにおける~(チルダ)の使用例

 ~(チルダ)は、NOT演算子として使います。本記事では、pandasにて次の2つの使用例を示します。

使用例1:指定した列に対して、指定した要素以外の行データを抽出する
使用例2:df.duplicated()と組み合わせることで、重複要素がある行データを除外する

■使用例1:指定列に対して、指定した要素以外の行データを抽出する

import pandas as pd

df = pd.DataFrame({"A": [10, 20, 30, 40], "B": ["X", "Y", "X", "Z"]}) print(df)

まず、上記のpandasデータフレームは次の通りです。

# "X" でない行を取得
df_filtered = df[~(df["B"] == "X")]
print(df_filtered)

上記を実行すると、下記のようにB列に対してX以外の行データを抽出します。

 

■使用例2:重複要素がある行データを除外する

import pandas as pd

data = {"A": [1, 2, 2, 3, 4, 4, 4], "B": ["a", "b", "b", "c", "d", "d", "d"]} df = pd.DataFrame(data) df

上記は次のような重複のあるデータフレームです。

# 単に重複チェックする
print(df.duplicated())  
# 0  False
# 1  False
# 2  True   ← 2回目以降の "2" は True
# 3  False
# 4  False
# 5  True   ← 2回目以降の "4" は True
# 6  True   ← 3回目以降の "4" は True

上記のように、df.duplicated() は重複している行を True、最初の出現を False とするブール配列を返します。
このため、次のように~(チルダ)を利用することで重複を除外することができます。

# 重複を削除せず、最初の出現のみを残す
df_unique = df[~df.duplicated()]
df_unique

下表はその他一覧です。

操作 コード 残るデータ
最初の出現を残す df[~df.duplicated()] 重複の最初の1つだけ
最後の出現を残す df[~df.duplicated(keep="last")] 重複の最後の1つだけ
重複データを完全に削除 df[~df.duplicated(keep=False)] 重複がすべて消える

 

指定した列に対して重複を削除する場合の例

# B列で重複をチェック
df_unique = df[~df.duplicated(subset=["B"])]
df_unique

下表は類似操作の一覧です。

操作 コード 残るデータ

特定の列で重複を削除

(最初を残す)

df[~df.duplicated(subset=["列名"])] 最初の出現のみ残る

特定の列で重複を削除

(最後を残す)

df[~df.duplicated(subset=["列名"], keep="last")] 最後の出現のみ残る
特定の列で完全に重複を除外 df[~df.duplicated(subset=["列名"], keep=False)] 重複がすべて消える
複数列で重複をチェック df[~df.duplicated(subset=["列1", "列2"])] 指定した列の組み合わせが重複する場合に除外

以上

<広告>