{"slug": "polars", "name": "Polars", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "Fast DataFrame library written in Rust with Python bindings, built on Apache Arrow.", "recommenders": 19, "commenters": 24, "warners": 1, "score": 17.534, "rising": 9.71, "first": "2025-11-03", "latest": "2026-10-10", "why": "HN commenters like Polars as a pandas replacement with a cleaner, more consistent expression-based API and much faster performance.", "why_is_quote": false, "has_verdict": true, "sentiment": {"recommend": 19, "neutral": 1, "compare": 3, "warn": 1}, "spark": [3, 0, 0, 0, 2, 0, 0, 0, 2, 1, 7, 4], "listed": true, "loved": ["Cleaner API", "Performance"], "caveat": "API churn", "short_quote": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "icon": false, "domain": null, "github_repo": "github.com/pola-rs/polars", "official_url": "https://pola.rs", "pricing": "open source", "aliases": ["Polars", "polars"], "verdict": [{"text": "HN commenters like Polars as a pandas replacement", "cites": [{"id": 792760656, "item_id": 49547541, "url": "https://news.ycombinator.com/item?id=49547541", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "excerpt": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 794693952, "item_id": 49668372, "url": "https://news.ycombinator.com/item?id=49668372", "by": "Vaslo", "date": "2026-09-12", "stance": "recommend", "quote": "I use polars or duckdb now exclusively.  Better syntax, better performance.", "excerpt": "I use polars or duckdb now exclusively. Better syntax, better performance. But pandas is deeply entrenched - I try to get my team off it but it\u2019s an uphill battle. It\u2019s not going anywhere anytime soon.", "context": "leads a team", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}, {"id": 794697216, "item_id": 49668576, "url": "https://news.ycombinator.com/item?id=49668576", "by": "appplication", "date": "2026-09-12", "stance": "recommend", "quote": "polars and duckdb are objectively better APIs in addition to their implementation improvements", "excerpt": "Not to mention less footguns. I used to spend my days unwinding bad habits DS pick up from years of panda abuse. Credit to pandas for popularizing dataframes in Python, but polars and duckdb are objectively better APIs in addition to their implementation improvements. Agree that it\u2019s time we let it go.", "context": "", "use_case": "dataframes", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}]}, {"text": " with a cleaner, more consistent expression-based API", "cites": [{"id": 794697344, "item_id": 49668584, "url": "https://news.ycombinator.com/item?id=49668584", "by": "stephenlf", "date": "2026-09-12", "stance": "recommend", "quote": "I use Polars at work because it\u2019s just (subjectively) nicer to work with.", "excerpt": "Besides the performance benefits, I use Polars at work because it\u2019s just (subjectively) nicer to work with. The \u201cpl.col\u201d API lets you create arbitrary generated/virtual columns anywhere you want, declaratively. You can throw in these column expressions in wherever without actually computing their values and storing that in memory. Very powerful stuff.", "context": "uses at work", "use_case": "dataframe processing", "switched_from": "", "story": "Pandas Should Go Extinct"}, {"id": 792779552, "item_id": 49548722, "url": "https://news.ycombinator.com/item?id=49548722", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "If performance is important then I'd strongly recommend trying it out.", "excerpt": "Here are a couple reasons: - much faster, multithreaded by default. Read in a big csv with it and see how it feels. - no index/MultiIndex. Pandas special treatment of index always felt like more trouble than it was worth, so no need to reset_index() everywhere. - expressions are very portable. At first using pl.col everywhere feels like a bit much, but you can define them anywhere and then apply them to a dataframe w", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 800463537, "item_id": 50028971, "url": "https://news.ycombinator.com/item?id=50028971", "by": "Breza", "date": "2026-10-10", "stance": "recommend", "quote": "Tools like Polars and dplyr and even SQL require code that's far closer to how people think.", "excerpt": "I also found myself reading the manual all the time. I have a toy project I use for learning different tools. Given a CSV containing every MLB game ever played, calculate the win percentage for each team during its first season. Pandas makes that kind of simple thing painfully unintuitive. Tools like Polars and dplyr and even SQL require code that's far closer to how people think.", "context": "", "use_case": "data analysis", "switched_from": "Pandas", "story": "Polars 2.0"}]}, {"text": " and much faster performance.", "cites": [{"id": 792779552, "item_id": 49548722, "url": "https://news.ycombinator.com/item?id=49548722", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "If performance is important then I'd strongly recommend trying it out.", "excerpt": "Here are a couple reasons: - much faster, multithreaded by default. Read in a big csv with it and see how it feels. - no index/MultiIndex. Pandas special treatment of index always felt like more trouble than it was worth, so no need to reset_index() everywhere. - expressions are very portable. At first using pl.col everywhere feels like a bit much, but you can define them anywhere and then apply them to a dataframe w", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 757605905, "item_id": 47350369, "url": "https://news.ycombinator.com/item?id=47350369", "by": "__mharrison__", "date": "2026-03-12", "stance": "compare", "quote": "I made the backend swappable, polars or duckdb. Got a 40-80x speed improvement.", "excerpt": "When I teach, I use \"big data\" for data that won't fit in a single machine. \"Small data\" fits on a single machine in memory and medium data on disk. Having said that duckDB is awesome. I recently ported a 20 year old Python app to modern Python. I made the backend swappable, polars or duckdb. Got a 40-80x speed improvement. Took 2 days.", "context": "teaches data courses", "use_case": "data processing backend", "switched_from": "", "story": "Big Data on the Cheapest MacBook"}, {"id": 789656704, "item_id": 49353544, "url": "https://news.ycombinator.com/item?id=49353544", "by": "ForceBru", "date": "2026-08-18", "stance": "recommend", "quote": "Now I can do things I couldn't even dream of with Pandas! And it's fast, too!", "excerpt": "Sure, but these ten characters let you treat columns as values and do math on them, which is super intuitive, in my opinion. I've been using Pandas for quite some time and always kinda sucked at it. One day I decided to give this new library Polars a try. Now I can do things I couldn't even dream of with Pandas! And it's fast, too! I think of `pl.col` as delayed evaluation: I want to do math on the vector of values o", "context": "", "use_case": "data frame manipulation", "switched_from": "Pandas", "story": "Python Polars Cheatsheet (based on our O'Reilly book)"}]}, {"text": " Caveats include frequent deprecations between minor releases and streaming that can still load everything into memory,", "cites": [{"id": 792762544, "item_id": 49547659, "url": "https://news.ycombinator.com/item?id=49547659", "by": "dist-epoch", "date": "2026-09-03", "stance": "neutral", "quote": "Polars is one of the few Python libraries from the hundreds I use that I need to read the notes of every minor release", "excerpt": "That being said Polars is one of the few Python libraries from the hundreds I use that I need to read the notes of every minor release (eg 1.44 -> 1.45), because they tend to frequently deprecate, remove or change features.", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "Pre-Release of Polars 2.0"}, {"id": 789612752, "item_id": 49350797, "url": "https://news.ycombinator.com/item?id=49350797", "by": "viccis", "date": "2026-08-18", "stance": "warn", "quote": "Almost every time I would use its streaming interfaces in Python, it would STILL materialize everything into memory.", "excerpt": "Same. Almost every time I would use its streaming interfaces in Python, it would STILL materialize everything into memory. That was like 6 months ago. Maybe streaming interfaces actually work, but I found them to be leaky abstractions that required a ton of hand holding to make sure they didn't build a bunch of memory pressure, if you're lucky enough to even have a way to do it. For example, last time I used it, you ", "context": "", "use_case": "streaming data processing in Python", "switched_from": "", "story": "Python Polars Cheatsheet (based on our O'Reilly book)"}]}, {"text": " and some users stick with pandas out of habit or prefer DuckDB for heavier jobs.", "cites": [{"id": 799717153, "item_id": 49982322, "url": "https://news.ycombinator.com/item?id=49982322", "by": "jszymborski", "date": "2026-10-06", "stance": "recommend", "quote": "Polars is great", "excerpt": "I've nearly entirely switched to DuckDB for anything more than like 500 or 1,000 rows or if there are a tonne of columns. Polars is great, but I'm just too used to the Pandas API to use it as a replacement for the cases where DuckDB is overkill.", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Polars 2.0"}, {"id": 734822727, "item_id": 45926420, "url": "https://news.ycombinator.com/item?id=45926420", "by": "faizshah", "date": "2025-11-14", "stance": "compare", "quote": "Personally I switched to using DuckDB instead of polars for most things where pandas is too slow.", "excerpt": "I had to do something like this for a few TB of json recently. The unique thing about this workload was it was a ton of small 10-20mb files. I found that clickhouse was the fastest, but duckdb was the simplest to work with it usually just works. DuckDB was close enough to the max performance from clickhouse. I tried flink & pyspark but they were way slower (like 3-5x) than clickhouse and the code was kind of annoying", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "650GB of Data (Delta Lake on S3). Polars vs. DuckDB vs. Daft vs. Spark"}, {"id": 794693952, "item_id": 49668372, "url": "https://news.ycombinator.com/item?id=49668372", "by": "Vaslo", "date": "2026-09-12", "stance": "recommend", "quote": "I use polars or duckdb now exclusively.  Better syntax, better performance.", "excerpt": "I use polars or duckdb now exclusively. Better syntax, better performance. But pandas is deeply entrenched - I try to get my team off it but it\u2019s an uphill battle. It\u2019s not going anywhere anytime soon.", "context": "leads a team", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}]}], "praise": [{"label": "Cleaner API", "summary": "Commenters find its syntax more intuitive, more consistent and less error-prone than pandas.", "quotes": [{"id": 800463537, "item_id": 50028971, "url": "https://news.ycombinator.com/item?id=50028971", "by": "Breza", "date": "2026-10-10", "stance": "recommend", "quote": "Tools like Polars and dplyr and even SQL require code that's far closer to how people think.", "excerpt": "I also found myself reading the manual all the time. I have a toy project I use for learning different tools. Given a CSV containing every MLB game ever played, calculate the win percentage for each team during its first season. Pandas makes that kind of simple thing painfully unintuitive. Tools like Polars and dplyr and even SQL require code that's far closer to how people think.", "context": "", "use_case": "data analysis", "switched_from": "Pandas", "story": "Polars 2.0"}, {"id": 794697216, "item_id": 49668576, "url": "https://news.ycombinator.com/item?id=49668576", "by": "appplication", "date": "2026-09-12", "stance": "recommend", "quote": "polars and duckdb are objectively better APIs in addition to their implementation improvements", "excerpt": "Not to mention less footguns. I used to spend my days unwinding bad habits DS pick up from years of panda abuse. Credit to pandas for popularizing dataframes in Python, but polars and duckdb are objectively better APIs in addition to their implementation improvements. Agree that it\u2019s time we let it go.", "context": "", "use_case": "dataframes", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}, {"id": 792773936, "item_id": 49548371, "url": "https://news.ycombinator.com/item?id=49548371", "by": "Kydlaw", "date": "2026-09-03", "stance": "recommend", "quote": "This has been my go-to library for data processing due to the enhanced ergonomics compared to Pandas and SQL.", "excerpt": "Happy to see activity around Polars. This has been my go-to library for data processing due to the enhanced ergonomics compared to Pandas and SQL. But they were a bit quiet lately, and I started looking more and more into DuckDB recently\u2026 until the recent acquisition of DuckLab by AWS", "context": "", "use_case": "data processing", "switched_from": "", "story": "Pre-Release of Polars 2.0"}]}, {"label": "Performance", "summary": "Users report much faster, multithreaded processing, including large speedups over legacy code.", "quotes": [{"id": 792779552, "item_id": 49548722, "url": "https://news.ycombinator.com/item?id=49548722", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "If performance is important then I'd strongly recommend trying it out.", "excerpt": "Here are a couple reasons: - much faster, multithreaded by default. Read in a big csv with it and see how it feels. - no index/MultiIndex. Pandas special treatment of index always felt like more trouble than it was worth, so no need to reset_index() everywhere. - expressions are very portable. At first using pl.col everywhere feels like a bit much, but you can define them anywhere and then apply them to a dataframe w", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 757605905, "item_id": 47350369, "url": "https://news.ycombinator.com/item?id=47350369", "by": "__mharrison__", "date": "2026-03-12", "stance": "compare", "quote": "I made the backend swappable, polars or duckdb. Got a 40-80x speed improvement.", "excerpt": "When I teach, I use \"big data\" for data that won't fit in a single machine. \"Small data\" fits on a single machine in memory and medium data on disk. Having said that duckDB is awesome. I recently ported a 20 year old Python app to modern Python. I made the backend swappable, polars or duckdb. Got a 40-80x speed improvement. Took 2 days.", "context": "teaches data courses", "use_case": "data processing backend", "switched_from": "", "story": "Big Data on the Cheapest MacBook"}, {"id": 799657440, "item_id": 49978590, "url": "https://news.ycombinator.com/item?id=49978590", "by": "therno", "date": "2026-10-06", "stance": "recommend", "quote": "I use Polars 2.0(rc) to (pre)calculate billions of weather scores on https://therno.com and it has been a lifesaver", "excerpt": "I use Polars 2.0(rc) to (pre)calculate billions of weather scores on https://therno.com and it has been a lifesaver Happy that I can upgrade to 2.0 final tonight.", "context": "", "use_case": "calculating weather scores", "switched_from": "", "story": "Polars 2.0"}]}, {"label": "Pandas replacement", "summary": "Many have switched from pandas and push their teams to do the same.", "quotes": [{"id": 792760656, "item_id": 49547541, "url": "https://news.ycombinator.com/item?id=49547541", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "excerpt": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 794694336, "item_id": 49668396, "url": "https://news.ycombinator.com/item?id=49668396", "by": "minimaxir", "date": "2026-09-12", "stance": "recommend", "quote": "Polars has been around for a bit and as noted it is much better than pandas", "excerpt": "It's been a while since I've seen an actual data science post submitted to Hacker News: both because AI has superset a lot of DS tasks (e.g. vector embeddings), but also because not much new has happened in DS. Polars has been around for a bit and as noted it is much better than pandas, but otherwise the DS ecosystem has been somewhat stagnant. I'd write more tutorials about how to use data science tooling but one co", "context": "data science writer", "use_case": "data science", "switched_from": "", "story": "Pandas Should Go Extinct"}, {"id": 783023360, "item_id": 48938960, "url": "https://news.ycombinator.com/item?id=48938960", "by": "sdpy", "date": "2026-07-16", "stance": "recommend", "quote": "people in my network have been talking about polars (as an alternative to pandas)", "excerpt": "Just to add, people in my network have been talking about polars (as an alternative to pandas) and other dataframe libraries. They're much easier to use now thanks to the Narwhals compatibility layer (for example, Narwhals was recently added as a dependency to scikit-learn).", "context": "", "use_case": "dataframes", "switched_from": "pandas", "story": "Guide to data tools landscape for developers"}]}, {"label": "Expressions", "summary": "The pl.col expressions are declarative, deferred and reusable across dataframes.", "quotes": [{"id": 794697344, "item_id": 49668584, "url": "https://news.ycombinator.com/item?id=49668584", "by": "stephenlf", "date": "2026-09-12", "stance": "recommend", "quote": "I use Polars at work because it\u2019s just (subjectively) nicer to work with.", "excerpt": "Besides the performance benefits, I use Polars at work because it\u2019s just (subjectively) nicer to work with. The \u201cpl.col\u201d API lets you create arbitrary generated/virtual columns anywhere you want, declaratively. You can throw in these column expressions in wherever without actually computing their values and storing that in memory. Very powerful stuff.", "context": "uses at work", "use_case": "dataframe processing", "switched_from": "", "story": "Pandas Should Go Extinct"}, {"id": 789656704, "item_id": 49353544, "url": "https://news.ycombinator.com/item?id=49353544", "by": "ForceBru", "date": "2026-08-18", "stance": "recommend", "quote": "Now I can do things I couldn't even dream of with Pandas! And it's fast, too!", "excerpt": "Sure, but these ten characters let you treat columns as values and do math on them, which is super intuitive, in my opinion. I've been using Pandas for quite some time and always kinda sucked at it. One day I decided to give this new library Polars a try. Now I can do things I couldn't even dream of with Pandas! And it's fast, too! I think of `pl.col` as delayed evaluation: I want to do math on the vector of values o", "context": "", "use_case": "data frame manipulation", "switched_from": "Pandas", "story": "Python Polars Cheatsheet (based on our O'Reilly book)"}, {"id": 792779552, "item_id": 49548722, "url": "https://news.ycombinator.com/item?id=49548722", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "If performance is important then I'd strongly recommend trying it out.", "excerpt": "Here are a couple reasons: - much faster, multithreaded by default. Read in a big csv with it and see how it feels. - no index/MultiIndex. Pandas special treatment of index always felt like more trouble than it was worth, so no need to reset_index() everywhere. - expressions are very portable. At first using pl.col everywhere feels like a bit much, but you can define them anywhere and then apply them to a dataframe w", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}]}, {"label": "Rust foundation", "summary": "Its Rust core on Arrow is exposed to Python through PyO3 bindings.", "quotes": [{"id": 795214192, "item_id": 49700887, "url": "https://news.ycombinator.com/item?id=49700887", "by": "lr1970", "date": "2026-09-14", "stance": "recommend", "quote": "successfully solved the interface boundayr problems described in the article", "excerpt": "High performance polars dataFrame processing library [0] is written in Rust with Python bindings via PyO3/maturin. It exposes huge dataframes to python and successfully solved the interface boundayr problems described in the article. [0] https://github.com/pola-rs/polars", "context": "", "use_case": "high performance dataframe processing", "switched_from": "", "story": "Libraries Run Rust Inside Python (With PyO3)"}, {"id": 785799184, "item_id": 49112449, "url": "https://news.ycombinator.com/item?id=49112449", "by": "westurner", "date": "2026-07-30", "stance": "recommend", "quote": "Polars Rust is built on Arrow and packed_simd.", "excerpt": "Would there be an advantage to reusing SIMD-optimized libraries for this? Polars Rust is built on Arrow and packed_simd. pola-rs/polars: https://github.com/pola-rs/polars polars - Rust API docs: https://docs.pola.rs/api/rust/dev/polars/#simd lancedb's data format; Lancedb/lance works with [Pandas, DuckDB, Polars, PyArrow,]; https://github.com/lancedb/lance Narwhals' df interface (Python) https://narwhals-dev.github.i", "context": "", "use_case": "SIMD-optimized dataframe library", "switched_from": "", "story": "Postgres rewritten in Rust v0.2, now faster than Postgres and ClickHouse"}]}, {"label": "Maturity", "summary": "One commenter says its documentation and resources are mature enough for daily use.", "quotes": [{"id": 794696016, "item_id": 49668501, "url": "https://news.ycombinator.com/item?id=49668501", "by": "minimaxir", "date": "2026-09-12", "stance": "recommend", "quote": "Polars is more than mature enough in both documentation and resources for it to be a daily driver.", "excerpt": "That inertia is not a good thing, and it's partially why there's stagnation in data science. Polars is more than mature enough in both documentation and resources for it to be a daily driver.", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Pandas Should Go Extinct"}]}], "caveats": [{"label": "API churn", "summary": "Minor releases often deprecate, remove or change features.", "quotes": [{"id": 792762544, "item_id": 49547659, "url": "https://news.ycombinator.com/item?id=49547659", "by": "dist-epoch", "date": "2026-09-03", "stance": "neutral", "quote": "Polars is one of the few Python libraries from the hundreds I use that I need to read the notes of every minor release", "excerpt": "That being said Polars is one of the few Python libraries from the hundreds I use that I need to read the notes of every minor release (eg 1.44 -> 1.45), because they tend to frequently deprecate, remove or change features.", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "Pre-Release of Polars 2.0"}]}, {"label": "Streaming leaks", "summary": "Python streaming interfaces sometimes still materialized all data into memory.", "quotes": [{"id": 789612752, "item_id": 49350797, "url": "https://news.ycombinator.com/item?id=49350797", "by": "viccis", "date": "2026-08-18", "stance": "warn", "quote": "Almost every time I would use its streaming interfaces in Python, it would STILL materialize everything into memory.", "excerpt": "Same. Almost every time I would use its streaming interfaces in Python, it would STILL materialize everything into memory. That was like 6 months ago. Maybe streaming interfaces actually work, but I found them to be leaky abstractions that required a ton of hand holding to make sure they didn't build a bunch of memory pressure, if you're lucky enough to even have a way to do it. For example, last time I used it, you ", "context": "", "use_case": "streaming data processing in Python", "switched_from": "", "story": "Python Polars Cheatsheet (based on our O'Reilly book)"}]}, {"label": "Pandas inertia", "summary": "Some users and teams stay with pandas because they know its API well.", "quotes": [{"id": 799717153, "item_id": 49982322, "url": "https://news.ycombinator.com/item?id=49982322", "by": "jszymborski", "date": "2026-10-06", "stance": "recommend", "quote": "Polars is great", "excerpt": "I've nearly entirely switched to DuckDB for anything more than like 500 or 1,000 rows or if there are a tonne of columns. Polars is great, but I'm just too used to the Pandas API to use it as a replacement for the cases where DuckDB is overkill.", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Polars 2.0"}, {"id": 794693952, "item_id": 49668372, "url": "https://news.ycombinator.com/item?id=49668372", "by": "Vaslo", "date": "2026-09-12", "stance": "recommend", "quote": "I use polars or duckdb now exclusively.  Better syntax, better performance.", "excerpt": "I use polars or duckdb now exclusively. Better syntax, better performance. But pandas is deeply entrenched - I try to get my team off it but it\u2019s an uphill battle. It\u2019s not going anywhere anytime soon.", "context": "leads a team", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}]}, {"label": "DuckDB alternative", "summary": "Some commenters prefer DuckDB or ClickHouse for larger workloads.", "quotes": [{"id": 734822727, "item_id": 45926420, "url": "https://news.ycombinator.com/item?id=45926420", "by": "faizshah", "date": "2025-11-14", "stance": "compare", "quote": "Personally I switched to using DuckDB instead of polars for most things where pandas is too slow.", "excerpt": "I had to do something like this for a few TB of json recently. The unique thing about this workload was it was a ton of small 10-20mb files. I found that clickhouse was the fastest, but duckdb was the simplest to work with it usually just works. DuckDB was close enough to the max performance from clickhouse. I tried flink & pyspark but they were way slower (like 3-5x) than clickhouse and the code was kind of annoying", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "650GB of Data (Delta Lake on S3). Polars vs. DuckDB vs. Daft vs. Spark"}, {"id": 799717153, "item_id": 49982322, "url": "https://news.ycombinator.com/item?id=49982322", "by": "jszymborski", "date": "2026-10-06", "stance": "recommend", "quote": "Polars is great", "excerpt": "I've nearly entirely switched to DuckDB for anything more than like 500 or 1,000 rows or if there are a tonne of columns. Polars is great, but I'm just too used to the Pandas API to use it as a replacement for the cases where DuckDB is overkill.", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Polars 2.0"}]}, {"label": "Exploratory research", "summary": "One commenter keeps pandas for interactive research and uses Polars only in production.", "quotes": [{"id": 758837025, "item_id": 47427314, "url": "https://news.ycombinator.com/item?id=47427314", "by": "short_sells_poo", "date": "2026-03-18", "stance": "recommend", "quote": "I use pandas for research and polars for production systems.", "excerpt": "You'll get a lot of responses saying Polars is better than Pandas. I argue those people are missing the point and don't understand Pandas' real strength or why people choose Pandas today. Pandas was never meant to be a technologist's tool. It was meant to be a researcher's tool and was unfortunately coopted to be a technical solution as well. It has not well escaped it's roots. Pandas is fantastic for doing iterative", "context": "", "use_case": "production data systems", "switched_from": "", "story": "Pandas Exercises for Data Analysis (Interactive)"}]}], "who": [{"by": "stephenlf", "context": "uses at work", "url": "https://news.ycombinator.com/item?id=49668584", "date": "2026-09-12"}, {"by": "minimaxir", "context": "data science writer", "url": "https://news.ycombinator.com/item?id=49668396", "date": "2026-09-12"}, {"by": "Vaslo", "context": "leads a team", "url": "https://news.ycombinator.com/item?id=49668372", "date": "2026-09-12"}, {"by": "tamnd", "context": "author of HN Parquet archive", "url": "https://news.ycombinator.com/item?id=47437282", "date": "2026-03-19"}, {"by": "drtc", "context": "data scientist", "url": "https://news.ycombinator.com/item?id=46067873", "date": "2025-11-27"}], "tags": ["pandas alternative", "for Python data science", "for data exploration", "for production pipelines", "for Rust users"], "use_cases": ["dataframes", "dataframe processing", "data science", "data analysis", "calculating weather scores", "high performance dataframe processing"], "compared": [{"slug": "pandas", "name": "pandas", "co": 23, "switched_from": 7, "switched_to": 0}, {"slug": "duckdb", "name": "DuckDB", "co": 16, "switched_from": 0, "switched_to": 3}, {"slug": "jupyter", "name": "Jupyter", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "narwhals", "name": "Narwhals", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 792770544, "item_id": 49548159, "url": "https://news.ycombinator.com/item?id=49548159", "by": "orlp", "date": "2026-09-03", "stance": "recommend", "quote": "we use it as a fallback mechanism for things that aren't supported yet in the new engine", "excerpt": "Streaming here has a different meaning than perhaps what you're used to. It's not referring to online processing where you maintain aggregates/state while an endless stream of data comes in. The name was chosen early on to contrast with the old execution model, which was essentially all-data-in-memory, column-at-a-time. That engine still exists, we use it as a fallback mechanism for things that aren't supported yet i", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "Pre-Release of Polars 2.0"}], "threads": [{"url": "https://news.ycombinator.com/item?id=49546753", "title": "Pre-Release of Polars 2.0", "mentions": 6}, {"url": "https://news.ycombinator.com/item?id=49668198", "title": "Pandas Should Go Extinct", "mentions": 5}, {"url": "https://news.ycombinator.com/item?id=49977177", "title": "Polars 2.0", "mentions": 4}, {"url": "https://news.ycombinator.com/item?id=49345476", "title": "Python Polars Cheatsheet (based on our O'Reilly book)", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=47367601", "title": "Pandas Exercises for Data Analysis (Interactive)", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49685037", "title": "Libraries Run Rust Inside Python (With PyO3)", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 3, "compare": 1}, "2025-12": {}, "2026-01": {}, "2026-02": {}, "2026-03": {"compare": 2, "recommend": 2}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {"recommend": 2}, "2026-08": {"warn": 1, "recommend": 1}, "2026-09": {"recommend": 7, "neutral": 1}, "2026-10": {"recommend": 4}}, "quotes": [{"id": 800463537, "item_id": 50028971, "url": "https://news.ycombinator.com/item?id=50028971", "by": "Breza", "date": "2026-10-10", "stance": "recommend", "quote": "Tools like Polars and dplyr and even SQL require code that's far closer to how people think.", "excerpt": "I also found myself reading the manual all the time. I have a toy project I use for learning different tools. Given a CSV containing every MLB game ever played, calculate the win percentage for each team during its first season. Pandas makes that kind of simple thing painfully unintuitive. Tools like Polars and dplyr and even SQL require code that's far closer to how people think.", "context": "", "use_case": "data analysis", "switched_from": "Pandas", "story": "Polars 2.0"}, {"id": 799717153, "item_id": 49982322, "url": "https://news.ycombinator.com/item?id=49982322", "by": "jszymborski", "date": "2026-10-06", "stance": "recommend", "quote": "Polars is great", "excerpt": "I've nearly entirely switched to DuckDB for anything more than like 500 or 1,000 rows or if there are a tonne of columns. Polars is great, but I'm just too used to the Pandas API to use it as a replacement for the cases where DuckDB is overkill.", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Polars 2.0"}, {"id": 799699824, "item_id": 49981239, "url": "https://news.ycombinator.com/item?id=49981239", "by": "niksmather", "date": "2026-10-06", "stance": "recommend", "quote": "It's also got much better support for more complex array shapes", "excerpt": "You can convert to numpy using .to_numpy(). It's also got much better support for more complex array shapes (e.g. each row storing an array). At least it did last time I used pandas!", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Polars 2.0"}, {"id": 799657440, "item_id": 49978590, "url": "https://news.ycombinator.com/item?id=49978590", "by": "therno", "date": "2026-10-06", "stance": "recommend", "quote": "I use Polars 2.0(rc) to (pre)calculate billions of weather scores on https://therno.com and it has been a lifesaver", "excerpt": "I use Polars 2.0(rc) to (pre)calculate billions of weather scores on https://therno.com and it has been a lifesaver Happy that I can upgrade to 2.0 final tonight.", "context": "", "use_case": "calculating weather scores", "switched_from": "", "story": "Polars 2.0"}, {"id": 795214192, "item_id": 49700887, "url": "https://news.ycombinator.com/item?id=49700887", "by": "lr1970", "date": "2026-09-14", "stance": "recommend", "quote": "successfully solved the interface boundayr problems described in the article", "excerpt": "High performance polars dataFrame processing library [0] is written in Rust with Python bindings via PyO3/maturin. It exposes huge dataframes to python and successfully solved the interface boundayr problems described in the article. [0] https://github.com/pola-rs/polars", "context": "", "use_case": "high performance dataframe processing", "switched_from": "", "story": "Libraries Run Rust Inside Python (With PyO3)"}, {"id": 794697344, "item_id": 49668584, "url": "https://news.ycombinator.com/item?id=49668584", "by": "stephenlf", "date": "2026-09-12", "stance": "recommend", "quote": "I use Polars at work because it\u2019s just (subjectively) nicer to work with.", "excerpt": "Besides the performance benefits, I use Polars at work because it\u2019s just (subjectively) nicer to work with. The \u201cpl.col\u201d API lets you create arbitrary generated/virtual columns anywhere you want, declaratively. You can throw in these column expressions in wherever without actually computing their values and storing that in memory. Very powerful stuff.", "context": "uses at work", "use_case": "dataframe processing", "switched_from": "", "story": "Pandas Should Go Extinct"}, {"id": 794697216, "item_id": 49668576, "url": "https://news.ycombinator.com/item?id=49668576", "by": "appplication", "date": "2026-09-12", "stance": "recommend", "quote": "polars and duckdb are objectively better APIs in addition to their implementation improvements", "excerpt": "Not to mention less footguns. I used to spend my days unwinding bad habits DS pick up from years of panda abuse. Credit to pandas for popularizing dataframes in Python, but polars and duckdb are objectively better APIs in addition to their implementation improvements. Agree that it\u2019s time we let it go.", "context": "", "use_case": "dataframes", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}, {"id": 794696016, "item_id": 49668501, "url": "https://news.ycombinator.com/item?id=49668501", "by": "minimaxir", "date": "2026-09-12", "stance": "recommend", "quote": "Polars is more than mature enough in both documentation and resources for it to be a daily driver.", "excerpt": "That inertia is not a good thing, and it's partially why there's stagnation in data science. Polars is more than mature enough in both documentation and resources for it to be a daily driver.", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Pandas Should Go Extinct"}, {"id": 794694336, "item_id": 49668396, "url": "https://news.ycombinator.com/item?id=49668396", "by": "minimaxir", "date": "2026-09-12", "stance": "recommend", "quote": "Polars has been around for a bit and as noted it is much better than pandas", "excerpt": "It's been a while since I've seen an actual data science post submitted to Hacker News: both because AI has superset a lot of DS tasks (e.g. vector embeddings), but also because not much new has happened in DS. Polars has been around for a bit and as noted it is much better than pandas, but otherwise the DS ecosystem has been somewhat stagnant. I'd write more tutorials about how to use data science tooling but one co", "context": "data science writer", "use_case": "data science", "switched_from": "", "story": "Pandas Should Go Extinct"}, {"id": 794693952, "item_id": 49668372, "url": "https://news.ycombinator.com/item?id=49668372", "by": "Vaslo", "date": "2026-09-12", "stance": "recommend", "quote": "I use polars or duckdb now exclusively.  Better syntax, better performance.", "excerpt": "I use polars or duckdb now exclusively. Better syntax, better performance. But pandas is deeply entrenched - I try to get my team off it but it\u2019s an uphill battle. It\u2019s not going anywhere anytime soon.", "context": "leads a team", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pandas Should Go Extinct"}, {"id": 792813200, "item_id": 49550825, "url": "https://news.ycombinator.com/item?id=49550825", "by": "Kydlaw", "date": "2026-09-03", "stance": "recommend", "quote": "But for data exploration, I usually prefer Polars", "excerpt": "I haven't tried chDB yet, but I heard about it. Thank you for reminding me of that option. I use SQL in data pipelines and processing that is going to require interoperability. But for data exploration, I usually prefer Polars (imo it is easier to work with text, semi-structured data, etc.)", "context": "", "use_case": "data exploration", "switched_from": "", "story": "Pre-Release of Polars 2.0"}, {"id": 792779552, "item_id": 49548722, "url": "https://news.ycombinator.com/item?id=49548722", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "If performance is important then I'd strongly recommend trying it out.", "excerpt": "Here are a couple reasons: - much faster, multithreaded by default. Read in a big csv with it and see how it feels. - no index/MultiIndex. Pandas special treatment of index always felt like more trouble than it was worth, so no need to reset_index() everywhere. - expressions are very portable. At first using pl.col everywhere feels like a bit much, but you can define them anywhere and then apply them to a dataframe w", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 792773936, "item_id": 49548371, "url": "https://news.ycombinator.com/item?id=49548371", "by": "Kydlaw", "date": "2026-09-03", "stance": "recommend", "quote": "This has been my go-to library for data processing due to the enhanced ergonomics compared to Pandas and SQL.", "excerpt": "Happy to see activity around Polars. This has been my go-to library for data processing due to the enhanced ergonomics compared to Pandas and SQL. But they were a bit quiet lately, and I started looking more and more into DuckDB recently\u2026 until the recent acquisition of DuckLab by AWS", "context": "", "use_case": "data processing", "switched_from": "", "story": "Pre-Release of Polars 2.0"}, {"id": 792762544, "item_id": 49547659, "url": "https://news.ycombinator.com/item?id=49547659", "by": "dist-epoch", "date": "2026-09-03", "stance": "neutral", "quote": "Polars is one of the few Python libraries from the hundreds I use that I need to read the notes of every minor release", "excerpt": "That being said Polars is one of the few Python libraries from the hundreds I use that I need to read the notes of every minor release (eg 1.44 -> 1.45), because they tend to frequently deprecate, remove or change features.", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "Pre-Release of Polars 2.0"}, {"id": 792760656, "item_id": 49547541, "url": "https://news.ycombinator.com/item?id=49547541", "by": "bobson_dugnutt5", "date": "2026-09-03", "stance": "recommend", "quote": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "excerpt": "I love polars. Did a lot of evangelizing in work to get people to give up pandas in favor of it.", "context": "", "use_case": "dataframe processing", "switched_from": "pandas", "story": "Pre-Release of Polars 2.0"}, {"id": 789656704, "item_id": 49353544, "url": "https://news.ycombinator.com/item?id=49353544", "by": "ForceBru", "date": "2026-08-18", "stance": "recommend", "quote": "Now I can do things I couldn't even dream of with Pandas! And it's fast, too!", "excerpt": "Sure, but these ten characters let you treat columns as values and do math on them, which is super intuitive, in my opinion. I've been using Pandas for quite some time and always kinda sucked at it. One day I decided to give this new library Polars a try. Now I can do things I couldn't even dream of with Pandas! And it's fast, too! I think of `pl.col` as delayed evaluation: I want to do math on the vector of values o", "context": "", "use_case": "data frame manipulation", "switched_from": "Pandas", "story": "Python Polars Cheatsheet (based on our O'Reilly book)"}, {"id": 789612752, "item_id": 49350797, "url": "https://news.ycombinator.com/item?id=49350797", "by": "viccis", "date": "2026-08-18", "stance": "warn", "quote": "Almost every time I would use its streaming interfaces in Python, it would STILL materialize everything into memory.", "excerpt": "Same. Almost every time I would use its streaming interfaces in Python, it would STILL materialize everything into memory. That was like 6 months ago. Maybe streaming interfaces actually work, but I found them to be leaky abstractions that required a ton of hand holding to make sure they didn't build a bunch of memory pressure, if you're lucky enough to even have a way to do it. For example, last time I used it, you ", "context": "", "use_case": "streaming data processing in Python", "switched_from": "", "story": "Python Polars Cheatsheet (based on our O'Reilly book)"}, {"id": 785799184, "item_id": 49112449, "url": "https://news.ycombinator.com/item?id=49112449", "by": "westurner", "date": "2026-07-30", "stance": "recommend", "quote": "Polars Rust is built on Arrow and packed_simd.", "excerpt": "Would there be an advantage to reusing SIMD-optimized libraries for this? Polars Rust is built on Arrow and packed_simd. pola-rs/polars: https://github.com/pola-rs/polars polars - Rust API docs: https://docs.pola.rs/api/rust/dev/polars/#simd lancedb's data format; Lancedb/lance works with [Pandas, DuckDB, Polars, PyArrow,]; https://github.com/lancedb/lance Narwhals' df interface (Python) https://narwhals-dev.github.i", "context": "", "use_case": "SIMD-optimized dataframe library", "switched_from": "", "story": "Postgres rewritten in Rust v0.2, now faster than Postgres and ClickHouse"}, {"id": 783023360, "item_id": 48938960, "url": "https://news.ycombinator.com/item?id=48938960", "by": "sdpy", "date": "2026-07-16", "stance": "recommend", "quote": "people in my network have been talking about polars (as an alternative to pandas)", "excerpt": "Just to add, people in my network have been talking about polars (as an alternative to pandas) and other dataframe libraries. They're much easier to use now thanks to the Narwhals compatibility layer (for example, Narwhals was recently added as a dependency to scikit-learn).", "context": "", "use_case": "dataframes", "switched_from": "pandas", "story": "Guide to data tools landscape for developers"}, {"id": 758996513, "item_id": 47437282, "url": "https://news.ycombinator.com/item?id=47437282", "by": "tamnd", "date": "2026-03-19", "stance": "recommend", "quote": "tools like DuckDB or Polars can read only the columns they need", "excerpt": "[Author here] The whole pipeline runs on a single ~$10/month VPS, but it can process hundreds of TB even with just 12GB RAM and a 200GB SSD. The main reason I built this was to have HN data that is easy to query and always up to date, without needing to run your own pipeline first. There are also some interesting ideas in the pipeline, like what I call \"auto-heal\". Happy to share more if anyone is interested :) A lot", "context": "author of HN Parquet archive", "use_case": "querying Parquet data", "switched_from": "", "story": "Show HN: Hacker News archive (47M+ items, 11.6GB) as Parquet, updated every 5m"}, {"id": 758837025, "item_id": 47427314, "url": "https://news.ycombinator.com/item?id=47427314", "by": "short_sells_poo", "date": "2026-03-18", "stance": "recommend", "quote": "I use pandas for research and polars for production systems.", "excerpt": "You'll get a lot of responses saying Polars is better than Pandas. I argue those people are missing the point and don't understand Pandas' real strength or why people choose Pandas today. Pandas was never meant to be a technologist's tool. It was meant to be a researcher's tool and was unfortunately coopted to be a technical solution as well. It has not well escaped it's roots. Pandas is fantastic for doing iterative", "context": "", "use_case": "production data systems", "switched_from": "", "story": "Pandas Exercises for Data Analysis (Interactive)"}, {"id": 758833137, "item_id": 47427071, "url": "https://news.ycombinator.com/item?id=47427071", "by": "ronfriedhaber", "date": "2026-03-18", "stance": "compare", "quote": "Polars seems to be the most prominent competitor in the Python DataFrame space", "excerpt": "Pandas is terrific, yet even its original author has noted inherent shortcomings [1], and there exist alternatives. Polars seems to be the most prominent competitor in the Python DataFrame space, and DuckDB appears to pursue an approach similar to SQLite, but columnar. I am personally working on a solution to a broader problem, which can also be viewed as an alternative to Pandas [2]. [1] https://wesmckinney.com/blog", "context": "", "use_case": "DataFrames", "switched_from": "", "story": "Pandas Exercises for Data Analysis (Interactive)"}, {"id": 757605905, "item_id": 47350369, "url": "https://news.ycombinator.com/item?id=47350369", "by": "__mharrison__", "date": "2026-03-12", "stance": "compare", "quote": "I made the backend swappable, polars or duckdb. Got a 40-80x speed improvement.", "excerpt": "When I teach, I use \"big data\" for data that won't fit in a single machine. \"Small data\" fits on a single machine in memory and medium data on disk. Having said that duckDB is awesome. I recently ported a 20 year old Python app to modern Python. I made the backend swappable, polars or duckdb. Got a 40-80x speed improvement. Took 2 days.", "context": "teaches data courses", "use_case": "data processing backend", "switched_from": "", "story": "Big Data on the Cheapest MacBook"}, {"id": 737614427, "item_id": 46100901, "url": "https://news.ycombinator.com/item?id=46100901", "by": "auxym", "date": "2025-11-30", "stance": "recommend", "quote": "numpy/scipy/matplotlib/pandas/plotly/polars/pyarrow/jupyter, which is essential to my work", "excerpt": "Scoop (https://scoop.sh/), a package manager for windows that is essential to make Windows usable for me. Sourcegit is my new favorite git client. Git in general, of course. Linux and also the people behind RT_PREEMPT, I am excited to see it merged into mainline this year. KDE has been my favorite DE for years and I use many of their apps too, such as Kate. Thanks to everyone contributing to the KDE project. The enti", "context": "", "use_case": "data science", "switched_from": "", "story": "Ask HN: What open source projects are you grateful for?"}, {"id": 737085969, "item_id": 46067873, "url": "https://news.ycombinator.com/item?id=46067873", "by": "drtc", "date": "2025-11-27", "stance": "recommend", "quote": "Python+Pandas/Polars+Jupyter notebooks", "excerpt": "I work as a data scientist where I do lots of exploratory work using Python+Pandas/Polars+Jupyter notebooks, I have to say that I agree with the title of the article. I feel like I'm using Python more and more in a way that is just not native to it. Strict typing is simply necessary at some point in time, but I don't get any of the performance benefits or compile-time warnings that other languages provide. But more t", "context": "data scientist", "use_case": "tabular data analysis", "switched_from": "", "story": "Python is not a great language for data science"}, {"id": 734822727, "item_id": 45926420, "url": "https://news.ycombinator.com/item?id=45926420", "by": "faizshah", "date": "2025-11-14", "stance": "compare", "quote": "Personally I switched to using DuckDB instead of polars for most things where pandas is too slow.", "excerpt": "I had to do something like this for a few TB of json recently. The unique thing about this workload was it was a ton of small 10-20mb files. I found that clickhouse was the fastest, but duckdb was the simplest to work with it usually just works. DuckDB was close enough to the max performance from clickhouse. I tried flink & pyspark but they were way slower (like 3-5x) than clickhouse and the code was kind of annoying", "context": "", "use_case": "dataframe processing", "switched_from": "", "story": "650GB of Data (Delta Lake on S3). Polars vs. DuckDB vs. Daft vs. Spark"}, {"id": 732846930, "item_id": 45802933, "url": "https://news.ycombinator.com/item?id=45802933", "by": "serjester", "date": "2025-11-03", "stance": "recommend", "quote": "another reason I love polars", "excerpt": "H3o is an awesome piece of work. I created polars bindings for it(another reason I love polars) and last time I benchmarked it, it had 5X better performance than even duckdb\u2019s C++ implementation. https://github.com/Filimoa/polars-h3", "context": "", "use_case": "dataframes", "switched_from": "", "story": "Harder, Better, Faster, Stronger Version of Uber H3 in Rust"}]}