読み込んだデータフレームが、列ごとにバラバラのデータ型を持っていて特定の型の列だけ抜き出したいという場面はよくあります。
以前は dtype 属性で調べて列名をピックアップして処理したりしていたのですが、専用のメソッドがあったので紹介します。
pandas.DataFrame.select_dtypes
これを使うと文字列型の列だけとか、数値型の列だけとか値を抽出できます。
とりあえず実験用のデータフレーム作成。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'a': np.random.randint(100, size=10),
'b': np.random.choice([True, False], size=10),
'c': np.random.randn(10),
'd': np.random.choice(list('abcd'), size=10),
}
)
print(df.dtypes)
'''
a int64
b bool
c float64
d object
dtype: object
'''
使い方は簡単で、
select_dtypesの引数に必要なデータ型を値かリストで渡すだけです。
また、excludeで逆に不要なデータ型を指定することもできます。
例えば数値だけ欲しい時(列aと、列c)次のように指定できます。
3つとも結果は同じです。
df.select_dtypes([int, float])
df.select_dtypes([np.int, np.float64])
df.select_dtypes(["int", "float"])
欲しいデータ型一種類のときは配列ではなくスカラーで渡しても大丈夫です。
df.select_dtypes(object)
df.select_dtypes(bool)
逆に不要な型を指定する例。
df.select_dtypes(exclude=object)