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関連の記事もあるので、もし気になるものがあれば見てみて欲しい。