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.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で指定のデータ型の列のみを抽出する方法を紹介しました。
データ処理において特定データ型のデータのみ抽出して扱いたい場合などに有用です。是非活用してください^^
ではでは👋