66
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Polars, ๆ—ฌใฎ13ใฎใŠๅฝน็ซ‹ใกๆฉŸ่ƒฝ

66
Last updated at Posted at 2023-02-18

ๆŸkaggleใ‚ณใƒณใƒšใงPolarsใฎๆ—ฅๆœฌ่ชžๆŠ•็จฟใŒใ‚ใฃใฆใ‹ใ‚‰ๆ—ฅๆœฌใงใฎ่ช็ŸฅๅบฆใŒๆ€ฅ้€ŸใซๅบƒใพใฃใŸPolars. ไฝฟใ„ๆ–นใฏไปฅไธ‹ใฎ่‰ฏ่ณชใช่จ˜ไบ‹ใซใŠไปปใ›ใ—ใฆใ€ใƒžใƒ‹ใ‚ขใƒƒใ‚ฏใชๆฉŸ่ƒฝใ‚’็ดนไป‹ใ—ใ‚ˆใ†ใ€‚ใซใ—ใฆใ‚‚Vaexใฏๆ™ฎๅŠใ›ใšใ ใฃใŸใ€‚ใ€‚

2023ๅนด2ๆœˆ18ๆ—ฅ็พๅœจใงใฎๅฎŸ่กŒ็’ฐๅขƒ

import polars as pl
pl.show_versions()
---Version info---
Polars: 0.16.6
Index type: UInt32
Platform: Linux-5.15.79.1-microsoft-standard-WSL2-x86_64-with-glibc2.31
Python: 3.10.9 (main, Dec 27 2022, 12:45:52) [Clang 15.0.6 ]
---Optional dependencies---
pyarrow: 10.0.1
pandas: 1.5.3
numpy: 1.24.2
fsspec: <not installed>
connectorx: <not installed>
xlsx2csv: <not installed>
deltalake: <not installed>
matplotlib: <not installed>

0. .shrink_dtype() ไพฟๅˆฉ

๏ผˆ2023-02-18 13:00+09:00 ่ฟฝ่จ˜๏ผ‰

Pandasใงใฏๅฎš็Ÿณใงใ‚ใฃใŸใƒกใƒขใƒช็ฏ€็ด„ใฎใŸใ‚ใฎๆ•ฐๅ€คๅž‹ใฎ็ธฎๆธ›ๅค‰ๆ›ใฏ shrink_dtype() ใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใ‚‹ใฎใงใใ‚Œใ‚’ไฝฟใ†ใฎใŒๅ‰ใ€‚

df = pl.DataFrame(
    {
        "a": [1, 2, 3],
        "b": [1, 2, 2 << 32],
        "c": [-1, 2, 1 << 30],
        "d": [-112, 2, 112],
        "e": [-112, 2, 129],
        "f": ["a", "b", "c"],
        "g": [0.1, 1.32, 0.12],
        "h": [True, None, False],
    }
)
df
shape: (3, 8)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ a   โ”† b          โ”† c          โ”† d    โ”† e    โ”† f   โ”† g    โ”† h     โ”‚
โ”‚ --- โ”† ---        โ”† ---        โ”† ---  โ”† ---  โ”† --- โ”† ---  โ”† ---   โ”‚
โ”‚ i64 โ”† i64        โ”† i64        โ”† i64  โ”† i64  โ”† str โ”† f64  โ”† bool  โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ 1   โ”† 1          โ”† -1         โ”† -112 โ”† -112 โ”† a   โ”† 0.1  โ”† true  โ”‚
โ”‚ 2   โ”† 2          โ”† 2          โ”† 2    โ”† 2    โ”† b   โ”† 1.32 โ”† null  โ”‚
โ”‚ 3   โ”† 8589934592 โ”† 1073741824 โ”† 112  โ”† 129  โ”† c   โ”† 0.12 โ”† false โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
df.select(pl.all().shrink_dtype())
shape: (3, 8)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ a   โ”† b          โ”† c          โ”† d    โ”† e    โ”† f   โ”† g    โ”† h     โ”‚
โ”‚ --- โ”† ---        โ”† ---        โ”† ---  โ”† ---  โ”† --- โ”† ---  โ”† ---   โ”‚
โ”‚ i8  โ”† i64        โ”† i32        โ”† i8   โ”† i16  โ”† str โ”† f32  โ”† bool  โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ 1   โ”† 1          โ”† -1         โ”† -112 โ”† -112 โ”† a   โ”† 0.1  โ”† true  โ”‚
โ”‚ 2   โ”† 2          โ”† 2          โ”† 2    โ”† 2    โ”† b   โ”† 1.32 โ”† null  โ”‚
โ”‚ 3   โ”† 8589934592 โ”† 1073741824 โ”† 112  โ”† 129  โ”† c   โ”† 0.12 โ”† false โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1. ๅ˜ไธ€ใชๅ€คใฏ pl.lit(...)

pl.selectใชใฉใฎๆˆปใ‚Šๅ€คใฏ่กŒๆ•ฐใŒ1ใ‹ๅ…ƒใฎFrameใฎ้•ทใ•nใจๅŒไธ€ใงใชใ„ใจใ‚จใƒฉใƒผใจใชใ‚‹ใ€‚่กŒๆ•ฐใŒ1ใฎๅ ดๅˆใฏ่‡ชๅ‹•ใงnใซๆ‹กๅผตใ•ใ‚Œใ‚‹ใŒใ€ๅ›บๅฎšๅ€ค็ญ‰ใฎๅ ดๅˆใฏpl.litใ‚’ไฝฟใ†ใ€‚ใจใ„ใ†ใ‹ๅ˜ไธ€ใฎใƒชใƒ†ใƒฉใƒซๅ€คใฎๅˆ—ใฎไฝœๆˆใงใ‚ใ‚Œใฐpl.litใ™ใ‚‰ไธ่ฆ

df = pl.DataFrame({
    "a": [1,2,3],
    "b": list("abc"),
})
# df.with_columns(pl.lit(99).alias("c")) ใ‚ˆใ‚Š่จ˜่ฟฐ็Ÿญใใฆๆธˆใ‚€ใ€‚
df.with_columns(c=99)
shape: (3, 3)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
โ”‚ a   โ”† b   โ”† c   โ”‚
โ”‚ --- โ”† --- โ”† --- โ”‚
โ”‚ i64 โ”† str โ”† i32 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
โ”‚ 1   โ”† a   โ”† 99  โ”‚
โ”‚ 2   โ”† b   โ”† 99  โ”‚
โ”‚ 3   โ”† c   โ”† 99  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

2. df.with_columns ใงใฎๅˆ—ๅใฎๆŒ‡ๅฎšใฏๅๅ‰ไป˜ใๅผ•ๆ•ฐใงใ‚‚ๆธกใ›ใ‚‹ใ€‚

ใฆใ“ใจใงไธ€ใคไธŠใง็ดนไป‹ใ—ใŸใŒๅๅ‰ไป˜ใๅผ•ๆ•ฐใฎใปใ†ใŒๆ€่€ƒใฎๆตใ‚ŒใŒ้‚ช้ญ”ใ•ใ‚Œใชใ„๏ผˆใจใ„ใ†ๅ€‹ไบบ็š„ๆ„Ÿๆƒณ๏ผ‰ใ€‚aliasใ‚’้ฉ็”จใ™ใ‚‹ใฎใซใ‚ซใƒƒใ‚ณใŒไฝ™ๅˆ†ใซๅฟ…่ฆใจใชใ‚‹ใฎใงใ€‚

df1 = pl.DataFrame({"foo": [1, 2, 3], "bar": [4, 5, 6]})
print(df1.with_columns(baz=pl.col("foo") * 2, qux=pl.col("bar") + 1))
print(df1.with_columns([(pl.col("foo") * 2).alias("baz"), (pl.col("bar") + 1).alias("qux")]))
shape: (3, 4)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
โ”‚ foo โ”† bar โ”† baz โ”† qux โ”‚
โ”‚ --- โ”† --- โ”† --- โ”† --- โ”‚
โ”‚ i64 โ”† i64 โ”† i64 โ”† i64 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
โ”‚ 1   โ”† 4   โ”† 2   โ”† 5   โ”‚
โ”‚ 2   โ”† 5   โ”† 4   โ”† 6   โ”‚
โ”‚ 3   โ”† 6   โ”† 6   โ”† 7   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜
shape: (3, 4)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
โ”‚ foo โ”† bar โ”† baz โ”† qux โ”‚
โ”‚ --- โ”† --- โ”† --- โ”† --- โ”‚
โ”‚ i64 โ”† i64 โ”† i64 โ”† i64 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
โ”‚ 1   โ”† 4   โ”† 2   โ”† 5   โ”‚
โ”‚ 2   โ”† 5   โ”† 4   โ”† 6   โ”‚
โ”‚ 3   โ”† 6   โ”† 6   โ”† 7   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

3. pandas DataFrameๅค‰ๆ›ใฏ arrow ใงๆธกใ›ใฐใ‚ผใƒญใ‚ณใƒ”ใƒผ

df.to_pandas(use_pyarrow_extension_array=True) ใฎๅผ•ๆ•ฐใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจ็žฌ้€Ÿใ€‚ใŸใ ใ— Pandas ใฏ 1.5.0 ไปฅไธŠใฎๅฟ…่ฆใ‚ใ‚Šใงใ™ใ€‚

df = pl.DataFrame({
    "a": pl.arange(0, 5e7, eager=True),
}).with_columns(
    b=pl.col("a") // 10000,
    c=pl.col("a").shuffle(seed=1)
)
df
shape: (50000000, 3)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ a        โ”† b    โ”† c        โ”‚
โ”‚ ---      โ”† ---  โ”† ---      โ”‚
โ”‚ i64      โ”† i64  โ”† i64      โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ 0        โ”† 0    โ”† 27454110 โ”‚
โ”‚ 1        โ”† 0    โ”† 2309916  โ”‚
โ”‚ 2        โ”† 0    โ”† 15065100 โ”‚
โ”‚ 3        โ”† 0    โ”† 12766444 โ”‚
โ”‚ ...      โ”† ...  โ”† ...      โ”‚
โ”‚ 49999996 โ”† 4999 โ”† 17167194 โ”‚
โ”‚ 49999997 โ”† 4999 โ”† 9092583  โ”‚
โ”‚ 49999998 โ”† 4999 โ”† 1929693  โ”‚
โ”‚ 49999999 โ”† 4999 โ”† 35668469 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
%time pd_df1 = df.to_pandas()
CPU times: user 478 ms, sys: 968 ms, total: 1.45 s
Wall time: 943 ms
%time pd_df2 = df.to_pandas(use_pyarrow_extension_array=True)
CPU times: user 1.88 ms, sys: 0 ns, total: 1.88 ms
Wall time: 2.01 ms

ๅฎŸใซ 943/2.01=469ๅ€ใ ใ€‚๏ผˆใฃใฆใ„ใ†้ขจใซๆ›ธใไบบใ‚ˆใใ„ใ‚‹ใ‘ใฉใ€ใพใฃใŸใๆ„ๅ‘ณใชใ„ใงใ™๏ผ‰

to_pandas(...) ใฎใใฎไป–ๅผ•ๆ•ฐใฏ pyarrow.Table.to_pandas ใ‚’ๅ‚็…งใ™ใ‚‹ใจใ‚ˆใ„ใงใ™ใ€‚ categories=[...] ใฎๅผ•ๆ•ฐๆŒ‡ๅฎšใฏใใ“ใใ“ๅ‡บ็•ชใ‚ใ‚Šใใ†ใ€‚

3.5 map_dict ใงไธ€ๆ‹ฌๅค‰ๆ›

(2023-02-19 10:30+09:00 ่ฟฝๅŠ ๏ผ‰

v0.16.3 ๏ผˆใ“ใฎ่จ˜ไบ‹ใฎ๏ผ‘้€ฑ้–“ๅ‰ใชใฎใงๅ‡บๆฅ็ซ‹ใฆ๏ผ‰ใ‹ใ‚‰ .map_dict(...) ใƒกใ‚ฝใƒƒใƒ‰ใŒ่ฟฝๅŠ ใ•ใ‚ŒใŸใ€‚Pandasใฎ .map() ใฏๅ˜็ด”ใชdictใ‚’ๆธกใ—ใฆใ‚‚่ฆ‹ใคใ‹ใ‚‰ใชใ„ๅ ดๅˆใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆๅ€คใฎ่จญๅฎšใฏใงใใชใ‹ใฃใŸ๏ผˆใŸใ ใ— defaultdict ใ‚’ไฝฟใˆใฐใงใใŸ๏ผ‰ใŒใ€ .map_dict ใฎๅผ•ๆ•ฐ default= ใ‚’ๆŒ‡ๅฎšใงใใ‚‹ใ€‚ใ“ใฎๆŒ‡ๅฎšใซใฏใƒชใƒ†ใƒฉใƒซใ ใ‘ใงใชใ pl.Expr ใ™ใชใ‚ใก pl.col(...) ใฎๅˆฅใฎๅˆ—ใฎๅ€คใ‚‚ๆŒ‡ๅฎšๅฏ่ƒฝใ€‚๏ผˆๅฝ“็„ถๅž‹ใซใฏๆฐ—ใ‚’ไป˜ใ‘ใ‚‹๏ผ‰

4. vstack concat ใฉใกใ‚‰ใ‚’ไฝฟใ†ใ‹ใฏๅพŒ็ถšใงใฎใ‚ฏใ‚จใƒชๆฌก็ฌฌ

็ธฆใฎ้€ฃ็ตใฏไธ‰็จฎ้กžใ‚ใ‚‹ใŒใ€ใƒกใƒขใƒชๅ†้…็ฝฎใ‚ใ‚‹ใชใ—ใง้€ŸๅบฆใŒๅค‰ใ‚ใ‚‹ใ€‚ .extend ใฏ็ ดๅฃŠ็š„ๅค‰ๆ›ดใจใชใ‚‹ใ“ใจใซๆณจๆ„ใ€‚

ใ“ใ“ใ‚ˆใ‚Šๅผ•็”จ https://www.rhosignal.com/posts/polars-extend-vstack/

  • pl.concat([df_1,df_2]) ๆ–ฐใ—ใ„ๅ˜ไธ€ใฎใƒญใ‚ฑใƒผใ‚ทใƒงใƒณใซใ‚ณใƒ”ใƒผ
  • df_1.vstack(df_2) ใ‚ณใƒ”ใƒผใชใ—ใงใƒชใƒณใ‚ฏ็š„ใซๆŽฅ็ถš๏ผˆใƒกใƒขใƒชไธŠใฏๅˆ†้›ขใฎใพใพ๏ผ‰
  • df_1.extend(df_2) df_2ใ‚’ใ‚ณใƒ”ใƒผใ—ใฆdf_1ใซappend
df_1 = pl.DataFrame({"foo": [1, 2, 3], "bar": [4, 5, 6]})
df_2 = pl.DataFrame({"foo": [10, 20, 30], "bar": [40, 50, 60]})

pl.concat([df_1, df_2]) # immutabble
df_1.vstack(df_2) # immutable
df_1.extend(df_2) # in-place change for df_1

5. pl.DataFrame.apply ใŒ้…ใ„๏ผŸใใ‚Šใ‚ƒใใ†ใ ใ€‚

๏ผˆ่ฟฝ่จ˜ 2023-10-31)
Deprecated since version 0.19.0: This method has been renamed to DataFrame.map_rows().

ใจใ„ใ†ใ“ใจใงใƒกใ‚ฝใƒƒใƒ‰ๅใฏ map_rows() ใซๅค‰ๆ›ดใจใชใ‚‹ใ‚ˆใ†ใงใ™ใ€‚

ใชใŠ Rust ใง Expression plugins ใ‚’ๆ›ธใใจใƒกใƒใƒฃ้€Ÿใงใ„ใ‘ใ‚‹ใใ†ใงใ™ใ€‚็งใฏ่ฉฆใ—ใฆใ„ใพใ›ใ‚“ใŒใ€‚


UDF (User Defined Function) ใฏ Python ใฎๅฎŸ่กŒใ€ Expr ใฏ RustใฎๅฎŸ่กŒ๏ผˆไธฆๅˆ—ๅŒ–ใ‚‚ใ‚ใ‚Š๏ผ‰ใฎใŸใ‚ใ€UDFใฏใ‚ใกใ‚ƒ้…ใ„ใ€‚

6. ๅทจๅคงcsvใ‚’parquetใซใ—ใŸใ„๏ผŸ pl.scan_csv ใจ pl.LazyFrame.sink_parquet ใฎๆดป็”จใ ใ€‚

collect(stream=True)ใ—ใชใใฆใ‚ˆใ„ใ‚ˆใ€‚ๆœ€ๅพŒใซ sink_parquetใงOK

7. ๅฑ้™บใช pl.Expr.set_sorted

ใ‚ฝใƒผใƒˆๆธˆใฟใƒ•ใƒฉใ‚ฐใ‚’็ซ‹ใฆใ‚‹ใจใ€ใใฎๅพŒใฎjoinใ‚„้›†็ด„้–ขๆ•ฐ็ญ‰ใงใฎๆฟ€้€Ÿใ‚’ๅพ—ใ‚‰ใ‚Œใ‚‹ใ€‚ใ—ใ‹ใ—ใ‚ฝใƒผใƒˆๆธˆใฟใงใชใใฆใ‚‚ใƒ•ใƒฉใ‚ฐใ‚’็ซ‹ใฆใ‚‰ใ‚Œใ‚‹ใฎใงใ€ๅЇ่–ฌใงใ—ใ‹ใชใ„ใ€‚ไธŠ็ดš่€…ๅ‘ใ‘่จญๅฎšใ€‚

8. ้žasciiใฎๆ–‡ๅญ—ๅˆ—ใฎใ‚ซใ‚ฆใƒณใƒˆใฏ str.length ใกใ‚ƒใ†ใงใ€‚ str.n_char ใ‚„

df = pl.DataFrame({"s": ["Cafรฉ", None, "345", "ๆฑไบฌ"]}).with_columns(
    [
        pl.col("s").str.n_chars().alias("nchars"),
        pl.col("s").str.lengths().alias("length"),
    ]
)
df
shape: (4, 3)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ s    โ”† nchars โ”† length โ”‚
โ”‚ ---  โ”† ---    โ”† ---    โ”‚
โ”‚ str  โ”† u32    โ”† u32    โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ Cafรฉ โ”† 4      โ”† 5      โ”‚
โ”‚ null โ”† null   โ”† null   โ”‚
โ”‚ 345  โ”† 3      โ”† 3      โ”‚
โ”‚ ๆฑไบฌ โ”† 2      โ”† 6      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

9. ใจใฏใ„ใฃใฆใ‚‚SQLใงๆ“ไฝœใ—ใŸใใชใ‚‹ๆ™‚ใ‚ใ‚‹ใฎใฏๅฆใ‚ใชใ„

ใใ‚“ใชๆ™‚ใฏduckdbใงใ™ใ€‚arrowใ‚’้€šใ˜ใฆใ‚ผใƒญใ‚ณใƒ”ใƒผๆ“ไฝœใ€‚๏ผˆใŸใ ใ— duckdb ver 7.0 ไปฅไธŠใ€‚ใคใพใ‚Šๆ•ฐๆ—ฅๅ‰ใ‹ใ‚‰ใงใใ‚‹ใ‚ˆใ†ใซใชใฃใŸใ€‚๏ผ‰
ไปฅไธ‹ใฏใ‚ตใƒณใƒ—ใƒซไธธใ‚ณใƒ”ใƒผใงใ™ใ€‚

python -m pip install duckdb[polars]
import duckdb
import polars as pl

df = pl.DataFrame(
    {
        "A": [1, 2, 3, 4, 5],
        "fruits": ["banana", "banana", "apple", "apple", "banana"],
        "B": [5, 4, 3, 2, 1],
        "cars": ["beetle", "audi", "beetle", "beetle", "beetle"],
    }
)
duckdb.sql('SELECT * FROM df').show()

df2 = df.lazy()
duckdb.sql('SELECT * FROM df2').show()

duckdb.sql('SELECT * FROM df') ใฎ็ตๆžœใฏ duckdb.DuckDBPyRelation ๅž‹ใชใฎใงใ€pl.DataFrameใซๆˆปใ™ใซใฏ .pl() ใƒกใ‚ฝใƒƒใƒ‰ใ‚’่ฟฝๅŠ ใ—ใฆ duckdb.sql('SELECT * FROM df').pl() ใจใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚

10. ใƒ†ใƒผใƒ–ใƒซ่กจ็คบใฏๅ…จ้ƒจ่ฆ‹ใ›ใฆใญ

ไธ€ๆ™‚็š„ใชๅค‰ๆ›ดใฏไธ‹่จ˜ใฎไพ‹ใฎใ‚ˆใ†ใซ with pl.Config() as cfg: ใ‚’ๆดป็”จ

df = pl.DataFrame({str(i): [i] for i in range(20)})
print(df)
with pl.Config() as cfg:
    cfg.set_tbl_cols(-1)  
    print(df)
shape: (1, 20)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 0   โ”† 1   โ”† 2   โ”† 3   โ”† ... โ”† 16  โ”† 17  โ”† 18  โ”† 19  โ”‚
โ”‚ --- โ”† --- โ”† --- โ”† --- โ”†     โ”† --- โ”† --- โ”† --- โ”† --- โ”‚
โ”‚ i64 โ”† i64 โ”† i64 โ”† i64 โ”†     โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
โ”‚ 0   โ”† 1   โ”† 2   โ”† 3   โ”† ... โ”† 16  โ”† 17  โ”† 18  โ”† 19  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜
shape: (1, 20)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 0   โ”† 1   โ”† 2   โ”† 3   โ”† 4   โ”† 5   โ”† 6   โ”† 7   โ”† 8   โ”† 9   โ”† 10  โ”† 11  โ”† 12  โ”† 13  โ”† 14  โ”† 15  โ”† 16  โ”† 17  โ”† 18  โ”† 19  โ”‚
โ”‚ --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”‚
โ”‚ i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”† i64 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก
โ”‚ 0   โ”† 1   โ”† 2   โ”† 3   โ”† 4   โ”† 5   โ”† 6   โ”† 7   โ”† 8   โ”† 9   โ”† 10  โ”† 11  โ”† 12  โ”† 13  โ”† 14  โ”† 15  โ”† 16  โ”† 17  โ”† 18  โ”† 19  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚‚ใ—ใใฏ df.glimpse() ใงใ–ใฃใใ‚Š็ขบ่ชใจใ‹ใ€‚

11. stringใฎไธญ่บซใ‚‚็œ็•ฅใ›ใšใซ่กจ็คบใ•ใ›ใŸใ„ใ€‚

ไธŠ่จ˜ใƒชใƒณใ‚ฏๅ…ˆใ‚’ใฉใ†ใž

12. pl.Config ใฏไฟๅญ˜ใ—ใฆใŠใใจไพฟๅˆฉใ€‚

ไปฅไธ‹ใฎใ‚ˆใ†ใซไฟๅญ˜ใงใใ‚‹ใ€‚

pl.Config.state() # check current status
pl.Config.restore_defaults() # reset to default
str = pl.Config.save()
pl.Config.load(str)

ใใฎไป–ใŠๅฝน็ซ‹ใก twitter

https://twitter.com/RitchieVink
https://twitter.com/braaannigan
ใ‚’ใƒ•ใ‚ฉใƒญใƒผใ™ใ‚Œใฐไธ‡ๅ…จใงใ™ใ€‚

ๆœ€ๅพŒใซ

ใฆใ“ใจใง Polars, Duckdb, ibis ใ‚ใŸใ‚ŠใฎPython library ใจ dbt ใ‚’ใƒ‡ใƒผใ‚ฟใƒใƒณใƒ‰ใƒชใƒณใ‚ฐ๏ผˆELTใจใ‹ETLใจใ‹ใ‚ใˆใฆ่จ€ใ‚ใชใ„๏ผ‰ใ‚’ใƒกใ‚คใƒณใซใ—ใฆใ„ใ1ๅนดใจใชใฃใฆใ„ใใจๆ€ใ„ใพใ™ใ€‚ใใ—ใฆschemaใฎๅญ˜ๅœจใ—ใชใ„csvใƒ•ใ‚กใ‚คใƒซใฏExcelใ—ใ‹ใคใ‹ใˆใชใ„ใƒ“ใ‚ธใƒใ‚นใƒ‘ใƒผใ‚ฝใƒณใฎๆˆฏใ‚Œใฎๅญ˜ๅœจใจใชใ‚Šใ€zstdๅœง็ธฎใฎparquetใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใŒๅฝ“็„ถใจใชใ‚‹ๆ™‚ไปฃใŒใ‚„ใฃใฆใใพใ™๏ผˆ้ก˜ๆœ›๏ผ‰

66
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?