【Python】PandasのDataFrameで指定のデータ型列のみ抽出する

PandasのDataFrameでは列ごとに決まったデータ型のデータを保持しなければなりませんが、それさえ守れば様々なデータ型のデータを1つのDataFrameで持つことができます。

色々な型のデータが存在する中で、指定のデータ型の列のみを抽出したいケースは少なからずあると思います。

Pandasではselect_dtypes()を使って特定の型の列を抽出することができます。今回はselect_dtypes()の具体的な使い方を紹介します。

使用するデータ

様々なデータ型を持つDataFrameを作成します。

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [True, True, False],
                   'C': ['A', 'B', 'C'],
                   'D': [[0, 0], [1, 1], [2, 2]],
                   'E': [0.1, 0.2, 0.3]})

df['F'] = pd.to_datetime(['2022-07-01', '2022-08-01', '2022-09-01'])
df

それぞれの列のデータ型を確認しておきます。

df.dtypes

>> A             int64
   B              bool
   C            object
   D            object
   E           float64
   F    datetime64[ns]
   dtype: object

参考までに、データ型を確認するdtypesおよび列の型変換については、以下記事をご覧ください。

指定したデータ型の列を抽出する

指定したデータ型の列を抽出する場合は引数includeを用い、抽出したいデータ型を指定します。

df.select_dtypes(include="int64")

>>
	A
0	1
1	2
2	3


df.select_dtypes(include="datetime")

>>
	F
0	2022-07-01
1	2022-08-01
2	2022-09-01

複数のデータ型を指定したい場合は、リストで指定します。

df.select_dtypes(include=[bool,"datetime"])

>>
	B	    F
0	True	2022-07-01
1	True	2022-08-01
2	False	2022-09-01

数値型をまとめて指定したい場合は”number”とすることでintもfloatも関係なく抽出することができます。

df.select_dtypes(include='number')

>>

  A	  E
0	1	  0.1
1	2	  0.2
2	3	  0.3

最初にdtypes()で見たように、文字列型はObject型となり、strではないので注意してください。またObject型には配列等も含まれます。したがってPandasでは厳密に文字列型のみを抽出できません。

しかしながら、DataFrameに配列などが入ったデータを扱うこともほぼないと思うので、あまり気にしなくてもいい気がします。

指定したデータ型以外の列を抽出する

指定したデータ型の列を抽出する場合は引数excludeを用い、除外したいデータ型を指定します。

df.select_dtypes(exclude='number')

>>
	B	    C	 D	    F
0	True	A	[0, 0]	2022-07-01
1	True	B	[1, 1]	2022-08-01
2	False	C	[2, 2]	2022-09-01

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

初学者の方にはこちらもオススメです^^

まとめ

PandasのDataFrameで指定のデータ型の列のみを抽出する方法を紹介しました。

データ処理において特定データ型のデータのみ抽出して扱いたい場合などに有用です。是非活用してください^^

ではでは👋