

pandas.DataFrame は表形式のデータを扱うのに便利である。
表形式データは内部的にはExcelのように行や列を持っているのだが、ときにはデータの中で一意な値がいくつあるか知りたい場合がある。
データの長さであれば len() で確認できるが、ユニークな値を抽出するにはどうしたらよいのか。
そこで今回はpandas.DataFrameでユニークな値を抽出する方法について紹介する。
この記事を書いている人

記事を読むメリット
pandas.DataFrameでユニークな値を抽出する方法がわかり、データフレームのデータ抽出が得意になる
データ準備

DataFrameにするデータをまず用意する。
以下の内容のCSVを pandas_unique_sample.csv として保存する。
CSV
a,12,100
b,12,105
c,12,90
d,13,
そしてpandas.DataFrameとして read_csv() で読み込む。
DATA
import pandas as pd
df1 = pd.read_csv("pandas_unique_sample.csv")
print(df1)
# id age score
# 0 a 12 100.0
# 1 b 12 105.0
# 2 c 12 90.0
# 3 d 13 NaN
このデータを使って解説する。
pandas.DataFrameでユニークな値を抽出する方法

pandas.DataFrameでユニークな値を抽出するには unique() を利用する。
使い方は df.["カラム名"].unique()。
対象カラムに対して重複値を除いた値の配列が返ってくる。
SAMPLE
print(df1["id"].unique()) print(type(df1["id"].unique())) # ['a' 'b' 'c' 'd'] # <class 'numpy.ndarray'> print(df1["age"].unique()) print(type(df1["age"].unique())) # [12 13] # <class 'numpy.ndarray'> print(df1["score"].unique()) print(type(df1["score"].unique())) # [100. 105. 90. nan] # <class 'numpy.ndarray'>
結果を見てわかるように、欠損値である nan もユニーク値のひとつとして扱われる。
似ているが異なるpandas.unique

似ているようで異なる pandas.unique() というメソッドもある。
こちらはインスタンスのメソッドではなく、クラスメソッドで引数に一意の値を取得したいリスト等を pd.unique(<一意な値を取得したいリスト>) のようにセットする。
SAMPLE
import numpy as np print(pd.unique(["aaa","bbb","bbb","ccc"])) # ['aaa' 'bbb' 'ccc'] print(pd.unique(np.array(["ddd","ddd","eee","eee"]))) # ['ddd' 'eee'] print(pd.unique(df1["age"])) # [12 13]
サンプルコードの通り、pandas.unique() の引数はListでもndarrayでもいいし、pandas.Seriesでも良い。
まとめ

今回はpandas.DataFrameでユニークな値を抽出する方法について解説した。
pandas.DataFrameでユニークな値を抽出するには以下の方法が使える。
ココがポイント
unique()を、df.["カラム名"].unique()のように使用する

他にもpandas関連の記事もあるので、もし気になるものがあれば見てみて欲しい。



