いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】DataFrameから特定のデータ型の列だけ取り出したい

・お題:PandasのDataFrameを入手した。このDataFrameから特定のデータ型の列だけ抜き出したい。

 

・Pandasの公式にやり方が書いてあった。正しいことはそちらをご確認いただきたい。

pandas.pydata.org

・とりあえずデータフレームを作成する。今回は、スポーツジムの会員のイメージで、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公式サイトを参照。

pandas.pydata.org

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"])

 

・いつか何かの役に立つかも。

 

おわり。