![見出し画像](https://assets.st-note.com/production/uploads/images/115777023/rectangle_large_type_2_2de44330225d31d027450f398daeff8c.jpeg?width=1200)
pandas備忘録(文字列置換・データ分割編)
pandasを使ったデータ加工を見ていきます。
文字列置換
![](https://assets.st-note.com/img/1703798129415-u51qzO5qcZ.jpg)
dmデータフレームgenderの"Male"を”Man”に置き換えます。
dm["gender"].str.replace("Male","Man")
![](https://assets.st-note.com/img/1694290933936-MRh8A4onB5.png)
![](https://assets.st-note.com/img/1703882117549-iTCpaJtU3D.jpg?width=1200)
これだとまだ元のデータフレームは置き換わっていません。データフレームの中を書き換えるにはこのようにします。
dm["gender"]=dm["gender"].str.replace("Male","Man")
dm
![](https://assets.st-note.com/img/1694290934220-Qi7FozCx3Q.png)
ちなみにreplaceでは、文字の一部の置換もできます。
dm["gender"].str.replace("Fe","fe")
![](https://assets.st-note.com/img/1694290934264-FfrdrhIPRZ.png)
データフレームの分割
![](https://assets.st-note.com/img/1703795337308-6pvN6vFoZO.jpg?width=1200)
dmデータフレームをgenderがFemaleだけにしてみます。
dm[dm["gender"]=="Female"]
![](https://assets.st-note.com/img/1694290934135-01j0m639n0.png)
体重が60キロより大きい人を抽出します。
dm[dm["weight"]>60]
![](https://assets.st-note.com/img/1694290934175-TG0DC8JJ2W.png)
![](https://assets.st-note.com/img/1703795402243-em3YRN2p6h.jpg?width=1200)
Excelのフィルターみたいなものですね。
では、複数条件でフィルタリングしましょう。
dm[(dm["gender"]=="Male")&(dm["weight"]>=50)]
![](https://assets.st-note.com/img/1694291540179-IaoP0SLWWw.png)
dm[(dm["race"]=="Asian")|(dm["smoke"]=="Yes")]
![](https://assets.st-note.com/img/1694291697920-NcjrSZikDZ.png)
![](https://assets.st-note.com/img/1703882921366-rGmrLRqZ2R.jpg?width=1200)
このようにフィルタリングした場合、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は削除されます。
![](https://assets.st-note.com/img/1694292444511-gkSfW47KSD.png)
![](https://assets.st-note.com/img/1703883335665-xCDv90nulX.jpg?width=1200)
では、このフィルター機能を使って、人種(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に人種のリストを入れます。
そして、これを順々にフィルタリング、保存としていきます。
こんな感じにファイルができました。
![](https://assets.st-note.com/img/1694293353474-ZgfwzPRK4Z.png)
Excelの中身はこんな感じです。(dm_Asian.xlsx)
![](https://assets.st-note.com/img/1694293589524-3SciN5h8GT.png)
![](https://assets.st-note.com/img/1703883869155-jrU4kFVFrQ.jpg)