Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PyData.Fukuoka#6_LT_slide
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shinpsan
November 22, 2019
Programming
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PyData.Fukuoka#6_LT_slide
前処理するとき便利だからよく
pandas.DataFrame.apply(lambda)
使っちゃうけど遅いから本当は
pandas.Series.map()
使った方がいいと思う
shinpsan
November 22, 2019
More Decks by shinpsan
See All by shinpsan
20251212_LT忘年会_データサイエンス枠_新川.pdf
shinpsan
0
330
CDLE_Fukuoka_20230523
shinpsan
0
220
LT_コンサル完全に理解したらミドルDSになった_ちゅらNOB合同勉強会
shinpsan
0
470
LT_統計学ユーザーでいいんです_みんなのPython勉強会#70
shinpsan
1
740
"Momochihama Store" on TNC has a wonderful "Udon MAP" section.
shinpsan
0
280
Other Decks in Programming
See All in Programming
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
自分的「カンファレンスの楽しみ方」
syumai
0
200
Jetpack Compose メカニズム
skydoves
0
140
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
38k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
6.3k
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
670
Heart of Swift Concurrency
koher
0
300
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
iOSDC2026登壇資料.pdf
riofujimon
0
120
ALB ログから Trace を気合で繋げる技術
fohte
7
890
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
300
What We Talk About When We Talk About XP
m_seki
2
560
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
830
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
For a Future-Friendly Web
brad_frost
183
10k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Technical Leadership for Architectural Decision Making
baasie
3
560
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
530
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Test your architecture with Archunit
thirion
2
2.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
Between Models and Reality
mayunak
4
450
Transcript
前処理するとき便利だからよく pandas.DataFrame.apply(lambda) 使っちゃうけど遅いから本当は pandas.Series.map() 使った方がいいと思う PyData.Fukuoka #6 LT @shinpsan
自己紹介 下積みの父@shinpsan 小売業のデータサイエンティスト(12月まで。年明け転職します) MENSA会員 合同会社ocojoで副業 twitter : 仕事
: 特技: 趣味:
話すこと タイトルに書いたことが全てです。 pandasの基本的なところなのでみんな知ってる内容かも。 知ってる方はヒマだと思うので、心の中で 「シカ」って10回言った後、 「サンタクロースが乗っているのは?」に答えてて下さい
背景 クソみたいなデータ渡されたと文句言いながら、 いつもクソみたいなコード書いてることを反省。
再現データ ラベル 営業時間 値1 値2 値3 • 1ファイルにつき何個か値が格納された ファイルが大量にある •
それを集めてきて1つのテーブルにした もの • ラベルが元のファイル名
やりたいこと(持っていきたい方向) 店舗の営業時間体系ごとの • 三角おにぎり • パックおにぎり • 寿司 のラベルをつけて集計とか 可視化とかいろいろ
再現データ ラベル 営業時間 値1 値2 値3 • おにぎり、寿司、パックおにぎり 判別はラベルの文字列から可能
• 営業時間は9~21時 or 24時間営業
クソみたいなところ① ラベル 営業時間 値1 値2 値3 ラベルの文字列の長さがバラバラ
クソみたいなところ② ラベル 営業時間 値1 値2 値3 おにぎり、寿司の判別は文字列の先頭 パックおにぎりの判別は文字列の最後
クソみたいなところ③ ラベル 営業時間 値1 値2 値3 ラベルに区切り文字とか入って無い
手順1 ラベル 営業時間 値1 値2 値3 ラベル列の各行に関して、 先頭7文字が”ONIGIRI” かどうか、 先頭5文字が”SUSHI”
かどうか、 最後4文字が”pack” かどうか 判別
手順2 ラベル 営業時間 値1 値2 値3 営業時間列の各行に関して、 “9-21” or “24h”
判別
手順3 ラベル 営業時間 値1 値2 値3 手順1,2の判別を元に 新たなラベル列作成 新ラベル おにぎり_9-21
おにぎり_24h ・ ・ ・
ここで本題 どんな処理書く? • for + iterrows() • df.apply() • Series.map()
①for i, row in {pd.DataFrame}.iterrow(): ラベル 営業時間 値1 値2 値3
データフレームの1行1行に対して ループ処理 処理 ↓ 処理 ↓ 処理 ↓ 処理 ↓ 処理 ↓
①for i, row in {pd.DataFrame}.iterrow():
②{pd.DataFrame}.apply(lambda x: {}) ラベル 営業時間 値1 値2 値3 データフレームの各行に対して 同じ処理を一括適応
lambda x のxには各行が1行のDFにみたいにして渡される x[“ラベル”]みたいにして使うとこ選べる ✖ 処理 ✖ 処理 ✖ 処理 ✖ 処理 ✖ 処理
②{pd.DataFrame}.apply(lambda x: {})
③{pd.Series}.map(lambda x: {}) ラベル ✖ 処理 ✖ 処理 ✖ 処理
✖ 処理 ✖ 処理 Seriesの各要素に対して 同じ処理を一括適応
③{pd.Series}.map(lambda x: {})
None
実行速度比較 1万行まで iterrowsだと1万行のデータで 1~2秒かかる データの行数 処理にかかった時間
実行速度比較 10万行まで df.apply()だと10万行のデータで ~2秒かかる
実行速度比較 1000万行まで Series.map()だと1000万行のデータで 約5秒かかる
まとめ ただの肌感ですが、jupyterで分析してて、 そこまで気にならない待ち時間は2秒くらい • for + iterrows 1万行 • df.apply
10万行 • Series.map 400万行 まぁ、結論としてループは使わない。 df.apply()は何も考えずに記述できるけど遅いから、 Series.map()でやる方がいいですね。
enjoy! 答え:そり(トナカイには乗っていない)