【Python】DataFrameから特定のデータ型の列だけ取り出したい
・お題:PandasのDataFrameを入手した。このDataFrameから特定のデータ型の列だけ抜き出したい。
・Pandasの公式にやり方が書いてあった。正しいことはそちらをご確認いただきたい。
・とりあえずデータフレームを作成する。今回は、スポーツジムの会員のイメージで、ID、身長、体重、視力、入会日のDataFrameを作成する。入会日を日付として認識させるためにワンステップ挟んでいる。
import pandas as pd
import numpy as np
df=pd.DataFrame({"ID":["01A","01B","01C","02A","02B"],
"Shincho":[156,167,178,187,176],
"Taiju":[45.6,56.7,67.8,87.6,76.5],
"Shiryoku":[1.0,0.2,1.5,"ND","ND"],
"Nyukaibi":["2020-1-1","2020-1-2","2020-1-3","","2020-1-5"]})
df["Nyukaibi"] = pd.to_datetime(df["Nyukaibi"])#日付を日付として認識させている。
・まず、数値データを抜き出したい。select_dtypesを使う。
df.select_dtypes(include="number")
・ぱっと見これでも良さそうだが、視力(Shiryoku)のNDが文字として認識されているので、視力の列のデータ型が数値になっておらず、引っ掛かってこない。そこで、視力列のNDをNaN(数値)に置き換えてやる。正しいことはPandas公式サイトを参照。
df["Shiryoku"] = pd.to_numeric(df["Shiryoku"],errors="coerce")
・これでdfは以下になる。
・データ型が数値の列をとってくれば、視力もちゃんと入ってくる。
df.select_dtypes(include="number")
・少数を釣ってきたいなら、floatを使う。
df.select_dtypes(include="float")
・整数を釣ってきたい場合、integerを使う。ちなみに、NaNはfloat扱いっぽいので、この列にNaNがある場合はintegerでは引っ掛かってこないぽい。
df.select_dtypes(include="integer")
・この勢いなら、文字列はstringでいけそうなものだが、実際はobjectとして引っ掛けることになる。
df.select_dtypes(include="object")
・また、日付はdatetimeで引っ掛けることができる。入会日(Nyukaibi)列に入っているNaTは、to_datetimeのところで付け加えられた日付のデータ型なので、ちゃんと引っ掛かってくれる。
df.select_dtypes(include="datetime")
・ここでさらに、IDと入会日だけとってきたい場合は、object型とdatetime型を引っ掛けてくることになる。その場合、リストで渡してやれば良い。
df.select_dtypes(include=["object","datetime"])
・いつか何かの役に立つかも。
おわり。