Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyData.Fukuoka#6_LT_slide

shinpsan
November 22, 2019

 PyData.Fukuoka#6_LT_slide

前処理するとき便利だからよく
pandas.DataFrame.apply(lambda)
使っちゃうけど遅いから本当は
pandas.Series.map()
使った方がいいと思う

shinpsan

November 22, 2019
Tweet

More Decks by shinpsan

Other Decks in Programming

Transcript

  1. 再現データ
 ラベル 営業時間 値1 値2 値3 • 1ファイルにつき何個か値が格納された ファイルが大量にある •

    それを集めてきて1つのテーブルにした もの • ラベルが元のファイル名
  2. ①for i, row in {pd.DataFrame}.iterrow():
 ラベル 営業時間 値1 値2 値3

    データフレームの1行1行に対して ループ処理 処理 ↓ 処理 ↓ 処理 ↓ 処理 ↓ 処理 ↓
  3. ②{pd.DataFrame}.apply(lambda x: {})
 ラベル 営業時間 値1 値2 値3 データフレームの各行に対して 同じ処理を一括適応

    lambda x のxには各行が1行のDFにみたいにして渡される x[“ラベル”]みたいにして使うとこ選べる ✖ 処理 ✖ 処理 ✖ 処理 ✖ 処理 ✖ 処理
  4. ③{pd.Series}.map(lambda x: {})
 ラベル ✖ 処理 ✖ 処理 ✖ 処理

    ✖ 処理 ✖ 処理 Seriesの各要素に対して 同じ処理を一括適応
  5. まとめ
 ただの肌感ですが、jupyterで分析してて、
 そこまで気にならない待ち時間は2秒くらい
 • for + iterrows 1万行
 • df.apply

    10万行
 • Series.map 400万行
 まぁ、結論としてループは使わない。
 df.apply()は何も考えずに記述できるけど遅いから、
 Series.map()でやる方がいいですね。