事實
資料框函式庫 · Python · 效能工程 · 效能評測 · 比較簡報資料截至2026年9月23日
Python兩大資料框函式庫,2026年9月的現況
Polars 與 pandas:各自適合什麼工作
pandas自2009年開源,至今仍是Python下載量最大的表格函式庫。Polars於2020年6月首次提交程式碼,以Rust撰寫、採用Apache Arrow記憶體格式,目標就是更快。兩者在2026年都有重大改變:pandas 3.0預設啟用專用字串型別與寫入時複製(Copy-on-Write);Polars 2.0目前是第二個候選版,把串流引擎設為預設,並因此不再保證列的順序。在大型分析工作上,速度差距真實而且很大;欠缺的是兩者現行版本的公開量測。
- 3.0.6pandas現行版本,2026年9月17日發布;3.0系列始於1月21日
- 1.44.2Polars現行版本,2026年9月9日發布;2.0目前是第二個候選版
- 94×在Polars 2025年6月自己的基準測試中,約10GB規模下領先pandas 2.2.3的倍數
- 10×pandas上個月在PyPI的下載量領先倍數:5.255億對5,160萬
依證據強度分級 依證據強度排序。實測結果、公司的自我陳述,以及僅止於承諾的事項,絕不放在同一列。
| 證據強度 | 記錄的內容 | 出處 |
|---|---|---|
| 已確認 | 現行版本:pandas 3.0.6(2026年9月17日)與Polars 1.44.2(2026年9月9日)。Polars 2.0.0rc1於9月2日推出,rc2於9月20日推出。pandas需要Python 3.11以上,Polars需要3.10以上 | Python套件索引(PyPI) |
| 已確認 | pandas 3.0預設啟用專用字串型別(安裝PyArrow時以其為後端);把寫入時複製設為預設,因此鏈式賦值不再有效,SettingWithCopyWarning也被移除;新增初步的pd.col()表達式;解析日期字串時預設精度改為微秒 | pandas的版本說明 |
| 已確認 | Polars 2.0預設以串流引擎執行所有延遲查詢。除非以maintain_order指定,該引擎在join、group by與unpivot時不保證列的順序。它也會拒絕過去放行的有損型別轉換與長度不符的合併 | Polars的2.0公告 |
| 已確認 | Polars沒有列索引,以Apache Arrow欄式格式而非NumPy陣列儲存資料,更多運算以平行方式執行,並能在執行前規劃與最佳化延遲查詢 | Polars給pandas使用者的指南 |
| 實測 | 在規模因子10(約10GB的CSV)下,Polars串流引擎跑完整套查詢用了3.89秒,pandas 2.2.3用了365.71秒。在約100GB規模下,pandas沒有參與:它會記憶體不足而失敗 | Polars自己的PDS-H基準測試,2025年6月 |
| 實測 | 在大型資料框上,Polars於合成任務的耗能約為pandas的八分之一,於TPC-H任務約為63%;在小型資料框上,TPC-H任務沒有顯著差異。受測版本:pandas 2.1.1、Polars 0.19.7 | Nahrstedt等人,EASE 2024,經同儕審查 |
| 公司宣稱,此處無法查證 | 自2023年種子輪後,使用者「從每月25萬成長到超過2,300萬」,核心函式庫已用於金融、生命科學與物流業的正式環境 | Polars;TechCrunch轉述Polars |
| 公司宣稱,此處無法查證 | 「整體而言,我們預期串流引擎會輕鬆快上5倍」:這是2.0公告中的預測,不是量測結果 | Polars的2.0公告 |
| 承諾中,尚未推出 | 「串流引擎的完整out-of-core支援」,也就是能可靠處理大於記憶體的資料,以及基於成本的查詢規劃器與join重新排序。這些都列為仍在開發中 | Polars的2.0公告 |
| 承諾中,尚未推出 | Polars 2.0正式版,預定9月2日後「數週內」推出;截至9月23日尚未發布 | Polars的2.0公告;PyPI |
時序
2008年至2026年9月 以下每一項速度與耗能量測都早於pandas 3.0,沒有一項比較的是兩者的現行版本。
- 2008年pandas在AQR Capital Management開始開發,由Wes McKinney主導
- 2009年pandas於年底前開源;0.1版於12月25日上架PyPI
- 2015年pandas成為NumFOCUS贊助的專案
- 2017年9月21日McKinney寫道,他對pandas的經驗法則是準備資料集大小5到10倍的記憶體
- 2020年6月23日Ritchie Vink提交Polars的第一個commit
- 2023年8月3日Vink與Chiel Peters宣布成立Polars公司,獲得由Bain Capital Ventures領投、約400萬美元的種子輪;函式庫維持MIT授權
- 2024年1月18日scikit-learn 1.4讓其轉換器可以輸出Polars資料框
- 2024年6月18日阿姆斯特丹自由大學團隊在EASE 2024發表pandas 2.1.1與Polars 0.19.7的耗能與效能研究
- 2024年7月1日Polars 1.0.0
- 2024年9月17日Polars與NVIDIA以RAPIDS cuDF打造的GPU引擎開放測試
- 2025年6月1日Polars發布PDS-H結果,比較Polars 1.30.0與pandas 2.2.3、DuckDB、Dask和PySpark
- 2025年9月29日Polars完成由Accel領投的1,800萬歐元A輪(約2,100萬美元),Bain Capital再度參與
- 2026年1月21日pandas 3.0.0:預設啟用字串型別與寫入時複製,初步的
pd.col()表達式,最低需求Python 3.11 - 2026年9月2日Polars 2.0.0rc1推出,延遲查詢預設使用串流引擎
- 2026年9月9日Polars 1.44.2,現行穩定版
- 2026年9月17日pandas 3.0.6,現行穩定版
- 2026年9月20日Polars 2.0.0rc2推出,2.0正式版尚未發布
論點
大型工作快得多,但量測的是已經更新的舊版本 先看Polars開發者自己量測的論據,再看兩個限定它的因素。
Polars的論據在於架構,而它自己的基準測試替這個論據給出了數字。pandas每寫一步就立刻執行、只用一顆核心、沒有最佳化器;Polars可以拿到整個查詢,在執行前先加以最佳化,再分散到所有核心執行。在Polars 2025年6月、以96核心機器進行的PDS-H測試中,約10GB規模下兩者的差距是365.71秒對3.89秒。Polars表示,約100GB規模時pandas因記憶體不足而失敗,所以沒有列入。同一份測試也有兩點值得讀者記住:第三個引擎DuckDB在10GB時緊追Polars,在100GB時則領先;而Polars較舊的記憶體內引擎在該規模下明顯變慢,這正是2.0把串流設為預設的原因。
- 3.89 sPolars串流引擎,約10GB,整套查詢
- 365.71 spandas 2.2.3,相同查詢、相同機器
| 引擎(Polars 2025年6月PDS-H測試) | 約10GB,秒 | 約100GB,秒 |
|---|---|---|
| Polars 1.30.0, streaming | 3.89 | 23.94 |
| DuckDB 1.3.0 | 5.87 | 19.65 |
| Polars 1.30.0, in-memory | 9.68 | 152.27 |
| Dask 2025.5.1 | 46.02 | 548.52 |
| PySpark 4.0.0 | 120.11 | 312.43 |
| pandas 2.2.3 | 365.71 | 未執行:記憶體不足 |
有兩點限定了這個結論。第一是規模。唯一經同儕審查的比較,是阿姆斯特丹自由大學團隊在EASE 2024發表的研究:他們以600萬列執行同類的TPC-H任務,耗能沒有顯著差異,作者還指出pandas略占優勢;到了6,000萬列,以及在他們自己的合成任務上,Polars明顯領先。第二是時效,這是本文的推論,不是任何來源的說法:此處任何量測中最新的pandas是2024年9月的2.2.3;該研究用的是pandas 2.1.1與Polars 0.19.7。pandas 3.0以Arrow為後端的字串與寫入時複製都在這些量測之後,Polars之後也又發了十四個次版本(1.31至1.44)。大型工作上差距很可能仍然很大;但就現行版本而言差多少,此處沒有人量測過。
- 6M列:同儕審查研究中TPC-H任務沒有顯著差異
- 2.2.3此處量測過的最新pandas版本;現行版本是3.0.6
與此同時,兩者互相靠攏,代價也隨之移動,這一點同樣是本文的推論。pandas 3.0採用了以Arrow為後端的字串、寫入時複製語意,以及初步的表達式語法,這些都是Polars一開始就圍繞的設計。Polars 2.0則在一項pandas使用者視為理所當然的保證上反其道而行:新預設下,join或group by不再承諾保留列的原始順序。Polars表示這個改變是串流速度所必需,並請依賴順序的使用者以maintain_order明確要求。從一個函式庫移到另一個的程式碼,或在Polars內部升級的程式碼,可能在不報錯的情況下改變輸出。
補充
記憶體、耗能、GPU,以及兩者並用 來自函式庫的創造者、研究作者、NVIDIA,以及兩者周邊的專案。
記憶體
一條經驗法則,與一份路線圖
- pandas的創造者在2017年寫道,他的經驗法則是準備資料集5到10倍的記憶體:10GB的資料集需要64到128GB
- 這條法則比pandas 3.0早了八年多;此處沒有在原始來源找到Polars的可比數字
- Polars把「完整的out-of-core支援」(可靠處理超出記憶體的資料)列為2.x仍待完成的工作
耗能
一項受控研究
- 28項任務,每項以隨機順序重複10次,共560次,於隔離的伺服器上執行
- 大型資料框:Polars在合成任務的耗能約為pandas的八分之一,在TPC-H任務為63%
- 耗能與執行時間高度相關,作者認為這要歸功於Polars善用所有CPU核心
GPU
最高13倍,指的是最佳情況
- 以NVIDIA cuDF為基礎的選用引擎,以
collect(engine="gpu")啟用;無法執行的查詢會退回CPU - 「最高13倍」是NVIDIA圖表中四個最佳加速之首,出自規模因子80、H100上的22項PDS-H查詢
- 2024年9月以公開測試版發布;此處未確認它目前的狀態
- 以NVIDIA cuDF為基礎的選用引擎,以
並用
不必二選一
- 自2024年1月的1.4版起,scikit-learn的轉換器可用
set_output(transform="polars")回傳Polars資料框 - Narwhals是零相依的相容層,讓以Polars API子集撰寫的函式庫能接受pandas、Polars、cuDF、Modin或PyArrow
- 它也對Dask、DuckDB、Ibis、PySpark與SQLFrame提供僅限延遲模式的支援
- 自2024年1月的1.4版起,scikit-learn的轉換器可用
採用
相差一個數量級
- 上個月下載量:pandas 525,518,404次,Polars 51,587,659次,比例為10.2
- 下載量計算的是安裝次數(包括所有自動化建置),不是人數
- 2023年8月Polars公布累計下載超過600萬次;到2025年9月,它公布每月使用者超過2,300萬
標題基準測試有多少分量,取決於是誰做的,所以它的條件很重要。PDS-H是Polars自己從TPC-H衍生的測試,Polars也聲明其結果不能與已發表的TPC-H結果比較。它的規則禁止在join前手動裁減資料表、禁止手動調整join順序,並要求每個方案以單一引擎跑完所有查詢:「不准挑選」。該文也點出Polars落敗之處:100GB時的DuckDB,以及第21號查詢(串流引擎尚未實作的範圍join)。在沒有廠商參與下撰寫的EASE論文則指出,在它之前的基準測試都不是系統性或經同儕審查的;在大型資料上,它的結果與Polars的方向一致。
結論
哪一個適合哪種工作 兩個免費、而且越來越能互相搭配的函式庫。問題在於讀者的工作負載,而不是哪一個贏。
pandas
適合既有程式碼與逐步處理的工作
- 適合:已經以它撰寫的程式碼、以索引標記列或就地修改表格的工作,以及小到受控研究在TPC-H任務上找不到顯著差異的資料集
- 強項:普及度。下載量是Polars的十倍,而且自2009年起開源至今
- 3.0以來的強項:不必離開大家熟悉的API,就能得到更可預測的複製行為與更快的字串
- 代價:即時執行、大多單執行緒,而且依它創造者的經驗法則,在大型資料上相當耗記憶體
Polars
適合大型分析管線
- 適合:數千萬列或數GB規模的join、group by與掃描,以完整查詢撰寫的管線,以及多核心的機器
- 強項:大型工作的速度與耗能。在它自己的基準測試中,約10GB時領先pandas 2.2.3兩個數量級;在獨立研究中,大型資料上也省電得多
- 另一強項:嚴格。遇到有損轉換與長度不符時會報錯,而不是默默產生不同的結果
- 代價:沒有索引,需要改以表達式思考;在2.0下,join與group by的列順序必須明確要求;超出記憶體的處理仍在完成中
已經確立的
現行版本是pandas 3.0.6與Polars 1.44.2,Polars 2.0處於第二個候選版。pandas 3.0把以Arrow為後端的字串與寫入時複製設為預設;Polars 2.0把串流設為預設,並取消join與group by的列順序保證。在大型分析工作上,無論是Polars自己的基準測試還是同儕審查研究,舊版Polars都比舊版pandas快得多;在該研究的小型TPC-H任務上,差異並不顯著。兩者也可以透過scikit-learn與Narwhals搭配使用。
應保留看待的
任何單一的加速數字:94倍是廠商在單一規模、對pandas 2.2.3的一次測試,13倍是22項查詢中最好的一項GPU結果。串流快5倍與可靠處理超出記憶體的資料都只是預測;使用者與正式環境的說法出自公司本身;5到10倍記憶體是2017年的經驗法則。而「現行版本之間差距仍然很大」是本文的推論:目前還沒有公開量測比較pandas 3.0與Polars。