1.2.1 (2021年1月20日) 中的新增內容#
以下是 pandas 1.2.1 中的更改。請參閱 發行說明 以獲取包含其他 pandas 版本的完整發行說明。
修復的迴歸#
修復了
to_csv()中的迴歸問題,該問題在行數超過chunksize時會建立損壞的 zip 檔案(GH 38714)。修復了
to_csv()中將codecs.StreamReaderWriter以二進位制模式而不是文字模式開啟的迴歸問題(GH 39247)。修復了
read_csv()和其他讀取函式中的迴歸問題,在未指定編碼時,錯誤策略(errors)沒有預設為"replace"(GH 38989)。修復了
read_excel()在使用非原始位元組檔案控制代碼時的迴歸問題(GH 38788)。修復了
DataFrame.to_stata()在發生錯誤時未刪除已建立檔案的迴歸問題(GH 39202)。修復了
DataFrame.__setitem__在擴充套件DataFrame時引發ValueError的迴歸問題,當新列的型別為"0 - name"時(GH 39010)。修復了使用
DataFrame.loc()進行設定時引發ValueError的迴歸問題,當DataFrame具有未排序的MultiIndex列且索引器為標量時(GH 38601)。修復了使用
DataFrame.loc()進行設定時引發KeyError的迴歸問題,當MultiIndex和列表狀列索引器擴充套件DataFrame時(GH 39147)。修復了
groupby()中帶有Categorical分組列時grouped.indices未顯示未使用類別的迴歸問題(GH 38642)。修復了
DataFrameGroupBy.sem()和SeriesGroupBy.sem()中,存在非數值列會導致錯誤而不是被丟棄的迴歸問題(GH 38774)。修復了
DataFrameGroupBy.diff()在處理int8和int16列時引發錯誤的迴歸問題(GH 39050)。修復了
DataFrame.groupby()在聚合可能因非數值值而失敗的ExtensionDType時出現的迴歸問題(GH 38980)。修復了
Rolling.skew()和Rolling.kurt()原地修改物件的迴歸問題(GH 38908)。修復了
DataFrame.any()和DataFrame.all()在處理帶時區意識的datetime64列時未返回結果的迴歸問題(GH 38723)。修復了
DataFrame.apply()在使用axis=1並在應用函式中使用 str 訪問器時的迴歸問題(GH 38979)。修復了
DataFrame.replace()在DataFrame的 dtype 為bytes時引發ValueError的迴歸問題(GH 38900)。修復了
Series.fillna()在處理datetime64[ns, UTC]dtype 時引發RecursionError的迴歸問題(GH 38851)。修復了
NaT和datetime.date物件之間比較時錯誤地返回True的迴歸問題(GH 39151)。修復了在 DataFrames 上呼叫 NumPy
accumulate()ufuncs(例如np.maximum.accumulate(df))時的迴歸問題(GH 39259)。修復了
objectdtype 的浮點類字串的 repr 中,小數點後的尾隨 0 被截斷的迴歸問題(GH 38708)。修復了與 PyArrow 版本 [0.16.0, 1.0.0) 相關的
AttributeError的迴歸問題(GH 38801)。修復了
pandas.testing.assert_frame_equal()在check_like=True且Index或列具有混合 dtype 時引發TypeError的迴歸問題(GH 39168)。
我們已恢復了一個提交,該提交導致了 pandas 1.2.0 中多個與繪圖相關的迴歸問題(GH 38969、GH 38736、GH 38865、GH 38947 和 GH 39126)。因此,在 pandas 1.2.0 中修復的關於條形圖中刻度標籤不一致的錯誤再次出現(GH 26186 和 GH 11465)。
在非對齊 DataFrames 上呼叫 NumPy ufuncs#
在 pandas 1.2.0 之前,在非對齊 DataFrames(或 DataFrame / Series 組合)上呼叫 NumPy ufunc 會忽略索引,僅根據形狀匹配輸入,並使用第一個 DataFrame 的索引/列作為結果。
In [1]: df1 = pd.DataFrame({"a": [1, 2], "b": [3, 4]}, index=[0, 1])
In [2]: df2 = pd.DataFrame({"a": [1, 2], "b": [3, 4]}, index=[1, 2])
In [3]: df1
Out[3]:
a b
0 1 3
1 2 4
In [4]: df2
Out[4]:
a b
1 1 3
2 2 4
In [5]: np.add(df1, df2)
Out[5]:
a b
0 2 6
1 4 8
這與其他 pandas 操作的操作方式不同,後者首先對齊輸入。
In [6]: df1 + df2
Out[6]:
a b
0 NaN NaN
1 3.0 7.0
2 NaN NaN
在 pandas 1.2.0 中,我們重構了在 DataFrames 上呼叫 NumPy ufuncs 的方式,並開始首先對齊輸入(GH 39184),這與其他 pandas 操作的方式相同,也與對 Series 物件呼叫 ufuncs 的方式相同。
對於 pandas 1.2.1,我們恢復了以前的行為以避免破壞性更改,但上述 np.add(df1, df2) 帶有非對齊輸入的示例現在會發出警告,而未來的 pandas 2.0 版本將首先開始對齊輸入(GH 39184)。對 Series 物件呼叫 NumPy ufunc(例如 np.add(s1, s2))已經並且將繼續對齊。
要避免警告並保持當前忽略索引的行為,請將其中一個引數轉換為 NumPy 陣列。
In [7]: np.add(df1, np.asarray(df2))
Out[7]:
a b
0 2 6
1 4 8
要獲得未來的行為並消除警告,可以在將引數傳遞給 ufunc 之前手動對齊它們。
In [8]: df1, df2 = df1.align(df2)
In [9]: np.add(df1, df2)
Out[9]:
a b
0 NaN NaN
1 3.0 7.0
2 NaN NaN
Bug 修復#
在帶有
float_precision="high"的read_csv()中的錯誤導致長指數字符串的段錯誤或錯誤解析。由於 pandas 1.2.0 中更改了float_precision的預設值,這在某些情況下導致了迴歸(GH 38753)。在
read_csv()初始化期間發生csv.Error或UnicodeDecodeError時,未關閉已開啟檔案控制代碼的錯誤(GH 39024)。在
pandas.testing.assert_index_equal()中,當Index具有混合 dtype 且check_order=False時,引發TypeError的錯誤(GH 39168)。
其他#
已棄用的
DataFrame和Series的屬性_AXIS_NAMES和_AXIS_NUMBERS將不再顯示在dir或inspect.getmembers呼叫中(GH 38740)。已將 fastparquet 的最低版本提高到 0.4.0,以避免 numba 引起的
AttributeError(GH 38344)。已將 pymysql 的最低版本提高到 0.8.1,以避免測試失敗(GH 38344)。
修復了在 macOS 11 上使用 Python 3.9.1 時的構建失敗問題(GH 38766)。
已在 pandas 1.1.0 的新增內容 中添加了對
testing.assert_frame_equal()和testing.assert_series_equal()中向後不相容的check_freq引數的引用(GH 34050)。
貢獻者#
共有 20 位貢獻者為此版本貢獻了補丁。名字旁有“+”號的人是首次貢獻補丁。
Ada Draginda +
Andrew Wieteska
Bryan Cutler
Fangchen Li
Joris Van den Bossche
Matthew Roeschke
Matthew Zeitlin +
MeeseeksMachine
Micael Jarniac
Omar Afifi +
Pandas Development Team
Richard Shadrach
Simon Hawkins
Terji Petersen
Torsten Wörtwein
WANG Aiyong
jbrockmendel
kylekeppler
mzeitlin11
patrick