見出し画像

pandas備忘録(文字列置換・データ分割編)

pandasを使ったデータ加工を見ていきます。

文字列置換

dmデータフレームgenderの"Male"を”Man”に置き換えます。

dm["gender"].str.replace("Male","Man")

これだとまだ元のデータフレームは置き換わっていません。データフレームの中を書き換えるにはこのようにします。

dm["gender"]=dm["gender"].str.replace("Male","Man")
dm

ちなみにreplaceでは、文字の一部の置換もできます。

dm["gender"].str.replace("Fe","fe")

データフレームの分割

dmデータフレームをgenderがFemaleだけにしてみます。

dm[dm["gender"]=="Female"]

体重が60キロより大きい人を抽出します。

dm[dm["weight"]>60]

Excelのフィルターみたいなものですね。
では、複数条件でフィルタリングしましょう。

dm[(dm["gender"]=="Male")&(dm["weight"]>=50)]
And(男性かつ体重が50㎏以上)
dm[(dm["race"]=="Asian")|(dm["smoke"]=="Yes")]
Or(アジア人もしくはタバコを吸っている人)

このようにフィルタリングした場合、indexがおかしくなっています。
例えば、subjid=119のraceをilocで取ろうとするとエラーが出ます。

dm[(dm["race"]=="Asian")|(dm["smoke"]=="Yes")].iloc[18,2]

IndexError: index 18 is out of bounds for axis 0 with size 9

9行しかないよ、って言ってますね。
そこでindexを振り直してあげます。

dm[(dm["race"]=="Asian")|(dm["smoke"]=="Yes")].reset_index(drop=True)

こうすると新たにindexがふられます。drop=Trueとすると元のindexは削除されます。

では、このフィルター機能を使って、人種(race)ごとに別々のExcelに保存します。

race_list=dm["race"].unique()
for jinsyu in race_list:
    dm_race=dm[dm["race"]==jinsyu]
    dm_race.to_excel("dm_{}.xlsx".format(jinsyu),index=False)

race_listに人種のリストを入れます。
そして、これを順々にフィルタリング、保存としていきます。
こんな感じにファイルができました。

Excelの中身はこんな感じです。(dm_Asian.xlsx)


いいなと思ったら応援しよう!