2.3.0 版本有什麼新功能 (2025 年 6 月 4 日)#

這是 pandas 2.3.0 中的更改。有關包含其他 pandas 版本的完整更改日誌,請參閱 發行說明

pandas 3.0 中的即將發生的更改#

pandas 3.0 將為 pandas 的預設行為帶來兩項重大更改。

預設情況下專用的字串資料型別#

歷史上,pandas 使用 NumPy 的 object 資料型別來表示字串列。這種表示方法存在許多問題:它不專門針對字串(object 型別的陣列可以儲存任何 Python 物件,而不僅僅是字串),而且通常效率不高(在效能和記憶體使用方面)。

從即將釋出的 pandas 3.0 版本開始,將預設啟用專用的字串資料型別(如果安裝了 PyArrow,則由其支援,否則回退到 NumPy)。這意味著在建立 pandas 物件(例如建構函式或 IO 函式)時,pandas 將開始將包含字串資料的列推斷為新的 str 資料型別。

舊行為

>>> ser = pd.Series(["a", "b"])
0    a
1    b
dtype: object

新行為

>>> ser = pd.Series(["a", "b"])
0    a
1    b
dtype: str

在這些場景中使用的字串資料型別在很大程度上將表現得像 NumPy object 一樣,包括缺失值語義和這些列上的通用操作。

但是,新預設 dtype 的引入也將對您的程式碼產生一些破壞性影響(例如,當檢查 .dtype 是否為 object dtype 時)。為了在 pandas 3.0 版本釋出前進行測試,可以在 pandas 2.3 中啟用此未來 dtype 推斷邏輯:

pd.options.future.infer_string = True

有關行為更改以及如何使您的程式碼適應新預設值的更多詳細資訊,請參閱 新字串資料型別遷移指南 (pandas 3.0)

寫時複製#

目前可選的寫時複製模式將在 pandas 3.0 中預設啟用。將沒有保留舊行為的選項。

總之,新的“寫時複製”行為將在 pandas 關於複製和檢視的操作方式上帶來行為上的改變。

  1. 任何索引操作(以任何方式子集化 DataFrame 或 Series,即包括將 DataFrame 列作為 Series 訪問)或返回新的 DataFrame 或 Series 的任何方法的結果,在使用者 API 方面始終表現得像是複製。

  2. 因此,如果您想修改一個物件(DataFrame 或 Series),唯一的方法是直接修改該物件本身。

由於每個索引步驟現在都表現為複製,這也意味著“鏈式賦值”(透過多個 setitem 步驟更新 DataFrame)將停止工作。由於這現在始終不起作用,因此將刪除 SettingWithCopyWarning

新行為語義在 關於寫時複製的使用者指南 中有更詳細的解釋。

自 pandas 2.0 起,可以透過以下選項啟用新行為:

pd.options.mode.copy_on_write = True

一些行為更改允許進行清晰的棄用,例如鏈式賦值的更改。其他更改更為微妙,因此警告被隱藏在一個可以自 pandas 2.2 起啟用的選項後面。

pd.options.mode.copy_on_write = "warn"

此模式將在許多與大多數查詢無關的場景中發出警告。我們建議探索此模式,但無需消除所有這些警告。 遷移指南 詳細解釋了升級過程。

增強功能#

其他增強功能#

棄用#

Bug 修復#

數值#

  • Series.mode()DataFrame.mode() 中,當 dropna=False 時,存在一個錯誤,即在存在 NA 值的情況下,並非所有 dtypes 都會排序(GH 60702)。

  • Series.round() 中存在一個錯誤,即使用 object dtype 時總是會引發 TypeErrorGH 61206)。

字串#

索引#

I/O#

  • DataFrame.to_excel() 中存在一個錯誤,它將十進位制數儲存為字串而不是數字(GH 49598)。

其他#

  • 當可選依賴項 pyarrowjinja2 未安裝時,修復了 inspect 的使用(GH 60196)。

貢獻者#

共有 24 人為此次釋出貢獻了補丁。名字旁邊帶有“+”的人是首次貢獻補丁。

  • ChiLin Chiu +

  • Irv Lustig

  • Isuru Fernando +

  • Jake Thomas Trevallion +

  • Joris Van den Bossche

  • Kevin Amparado +

  • LOCHAN PAUDEL +

  • Lumberbot (aka Jack)

  • Marc Mueller +

  • Marco Edward Gorelli

  • Matthew Roeschke

  • Pandas Development Team

  • Patrick Hoefler

  • Richard Shadrach

  • SALCAN +

  • Sebastian Berg

  • Simon Hawkins

  • Thomas Li

  • Will Ayd

  • William Andrea

  • William Ayd

  • dependabot[bot]

  • jbrockmendel

  • tasfia8 +