Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
polars 1.1.0以降の使える新機能
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tatsuya Ute
May 10, 2025
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
polars 1.1.0以降の使える新機能
Tatsuya Ute
May 10, 2025
More Decks by Tatsuya Ute
See All by Tatsuya Ute
推薦システム改善で事業 KPI を改善する:ウォンテッドリーにおけるユーザー離脱 抑制の取り組み
ghibney
1
120
JSAI2025 インダストリアルトーク
ghibney
0
600
ANNライブラリの移行における技術選定
ghibney
0
96
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
580
Why Our Code Smells
bkeepers
PRO
340
58k
The Spectacular Lies of Maps
axbom
PRO
1
840
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.6k
Rails Girls Zürich Keynote
gr2m
96
14k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
210
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
300
Transcript
© 2025 Wantedly, Inc. Polars 1.1.0 以降の使える新機能 Polars Data Crunch
#4 May.10 2025 - Tatsuya Ute
© 2025 Wantedly, Inc. 自己紹介 • Tatsuya Ute • データサイエンティスト
@ウォンテッドリー • 趣味:カラオケ、旅行、散歩 • X: @ghibney
© 2025 Wantedly, Inc. この発表で伝えたいこと Polars を最新版にして、新機能を使いこなそう
© 2025 Wantedly, Inc. Polars 1.0.0 までの話 Polars 1.0.0 までは、Polars
Data Crunch #2 で LT 発表されています https://speakerdeck.com/zerebom/polarsnocheng-chang-v0-dot-14karav1-dot-0madenobian-qian-tojin-hou-nozhan-wang
© 2025 Wantedly, Inc. Polars 1.0.0 までのリリース 各マイナーバージョンのリリースに、複数のパッチをリリースしています Ver リリース日
リリース回数 前バージョンからの 経過日数 0.14 2022-10-03 14 0.15 2022-11-26 13 54 0.16 2023-01-29 18 64 0.17 2023-04-08 16 69 0.18 2023-05-29 16 51 0.19 2023-08-30 22 93 0.20 2023-12-16 37 108 1.0 2024-06-11 5 178 https://speakerdeck.com/zerebom/polarsnocheng-chang-v0-dot-14karav1-d ot-0madenobian-qian-tojin-hou-nozhan-wang をデータ取得しています
© 2025 Wantedly, Inc. Polars 1.1.0 以降のリリース 1.1.0以降は、どんどんマイナーバージョンの更新が行われています Ver リリース日
リリース回 数 前バージョンからの 経過日数 1.1 2024-07-07 1 26 1.2 2024-07-16 2 9 1.3 2024-07-28 1 12 1.4 2024-08-02 2 5 1.5 2024-08-14 1 12 1.6 2024-08-28 1 14 1.7 2024-09-11 2 14 1.8 2024-09-23 3 12 1.9 2024-10-01 1 8 1.10 2024-10-20 1 19 1.11 2024-10-23 1 3 1.12 2024-10-27 1 4 1.13 2024-11-12 2 16 1.14 2024-11-17 1 5 1.15 2024-11-25 1 8 Ver リリース日 リリース回 数 前バージョンからの 経過日数 1.16 2024-11-29 1 4 1.17 2024-12-08 2 9 1.18 2024-12-24 1 16 1.19 2025-01-03 1 10 1.20 2025-01-16 1 13 1.21 2025-01-24 1 8 1.22 2025-02-08 1 15 1.23 2025-02-23 1 15 1.24 2025-03-02 1 7 1.25 2025-03-15 1 13 1.26 2025-03-23 1 8 1.27 2025-04-09 2 17 1.28 2025-04-26 2 17 1.29 2025-04-30 1 4 https://speakerdeck.com/zerebom/polarsnocheng-chang-v0-dot-14karav1-d ot-0madenobian-qian-tojin-hou-nozhan-wang をデータ取得しています
© 2025 Wantedly, Inc. そんな Polars 1.1.0 以降で 使える新機能を紹介します
© 2025 Wantedly, Inc. join_where (since ver 1.7.0) cross join
+ filter を一度に実行できる experimental left = pl.DataFrame({"l_id": [100, 101, 102], "l_time": [120, 140, 160],}) right = pl.DataFrame({"r_id": [404, 498, 676], "r_time": [90, 130, 150],}) # Before left.join(right, how="cross").filter( pl.col("l_time") < pl.col("r_time") ) # After left.join_where( right, pl.col("l_time") < pl.col("r_time") ) https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFram e.join_where.html#polars.DataFrame.join_where
© 2025 Wantedly, Inc. insert_column が expression に対応 (since ver
1.9.0) Series で与えていた部分が、expression に対応した df = pl.DataFrame( { "id": ["xx", "yy", "zz"], "v1": [5, 4, 6], } ) # Before (insert_columnを使う場合) s = pl.Series(df.select((pl.col("v1") - 1).alias("v0"))) df.insert_column(1, s) # After df.insert_column( 1, (pl.col("v1") - 1).alias("v0") ) expression が使える https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFrame.insert_ column.html#polars.DataFrame.insert_column
© 2025 Wantedly, Inc. join が maintain_order パラメータを採用 (since ver
1.17.0) join で順序を保持する方向(データフレーム)を指定できる left = pl.DataFrame({"a": [2, 1, 5]}) right = pl.DataFrame({"a": [1, 2], "b": [6, 9]}) # 左のデータフレームの順序を保持 left.join(right, on="a", how="inner", maintain_order="left") # 右のデータフレームの順序を保持 left.join(right, on="a", how="inner", maintain_order="right") “left” “right” https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFrame.join.htm l#polars-dataframe-join
© 2025 Wantedly, Inc. dt.replace (since ver 1.18.0) date 型のカラムに対して
replace できる from datetime import date df = pl.DataFrame( { "date": [ date(2024, 4, 1), date(2025, 3, 16), ], "new_day": [10, 15], } ) df.with_columns( pl.col("date") .dt.replace(day="new_day") .alias("replaced") ) https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.r eplace.html#polars.Expr.dt.replace
© 2025 Wantedly, Inc. index_of (since ver 1.20.0) 特定の要素における index
を検索できる(複数ある場合は最初の index) df = pl.DataFrame({"a": [1, None, 17, 1]}) df.select( [ pl.col("a").index_of(17).alias("seventeen"), pl.col("a").index_of(None).alias("null"), pl.col("a").index_of(55).alias("fiftyfive"), pl.col("a").index_of(1).alias("one"), ] ) https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.index_of.htm l#polars.Expr.index_of
© 2025 Wantedly, Inc. str.normalize (since ver 1.20.0) テキストを Unicode
正規化できる df = pl.DataFrame( {"original": ["01²", "KADOKAWA"]} ) df.with_columns( pl.col("original") .str.normalize("NFKC") .alias("normalized"), ) https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.str.normalize .html#polars.Expr.str.normalize
© 2025 Wantedly, Inc. read_csv が lossy decoding に対応 (since
ver 1.24.0) 一部読み取れない文字があっても、� で置き換えて decode できる file_path = "invalid_utf8.csv" with open(file_path, "wb") as f: f.write(b"id, hoge\n") f.write(b"010, huga\n") f.write(b"011, \xc0") # UTF-8では読み取れない pl.read_csv( file_path, encoding="utf-8-lossy", ) https://docs.pola.rs/api/python/stable/reference/api/polars.read_csv.html#polars-read-csv
© 2025 Wantedly, Inc. dt.is_business_day (since ver 1.27.0) 祝日や曜日を指定して、営業日列を作成できる from
datetime import date df = pl.DataFrame({"date": [date(2025, 1, 1), date(2025, 5, 10), date(2025, 5, 11)]}) holidays = [date(2025, 1, 1)] week_mask = (True, True, True, True, True, True, False) df.with_columns( is_business_day=pl.col("date") .dt.is_business_day(holidays=holidays, week_mask=week_mask) ) Unstable 月、火、...、日 の順番 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.is_busin ess_day.html#polars.Expr.dt.is_business_day
© 2025 Wantedly, Inc. 1.1.0以降の破壊的変更 version 変更内容 1.6.0 ※ df.plot
のバックボーンが hvplot から Altair に変更 1.16.0 join に maintain_order パラメータが追加されたことで、 今後はleft join による順序の保証しない (現状、保証はされていないが、 left で保持されている) 1.27.0 pl.Seriesの hist の挙動が変更 1.27.0 ※ streaming API で複数ファイルに分けて書き出しする際の 記法が変更 1.1.0以降、破壊的変更が4件あるのでお気をつけください ※ Unstable Breaking Change
© 2025 Wantedly, Inc. まとめ 破壊的変更に気をつけつつ、 Polars をバージョンアップして 新機能を使いこなそう!