版本 0.15.2 (2014年12月12日)#
這是從 0.15.1 版本的一個小版本更新,包含了大量的錯誤修復以及一些新功能、增強和效能改進。為了修復現有錯誤,有少量 API 更改是必要的。我們建議所有使用者都升級到此版本。
API 更改#
現在支援在詞法排序深度之外的
MultiIndex中進行索引,儘管詞法排序的索引效能會更好。( GH 2646 )In [1]: df = pd.DataFrame({'jim':[0, 0, 1, 1], ...: 'joe':['x', 'x', 'z', 'y'], ...: 'jolie':np.random.rand(4)}).set_index(['jim', 'joe']) ...: In [2]: df Out[2]: jolie jim joe 0 x 0.126970 x 0.966718 1 z 0.260476 y 0.897237 [4 rows x 1 columns] In [3]: df.index.lexsort_depth Out[3]: 1 # in prior versions this would raise a KeyError # will now show a PerformanceWarning In [4]: df.loc[(1, 'z')] Out[4]: jolie jim joe 1 z 0.260476 [1 rows x 1 columns] # lexically sorting In [5]: df2 = df.sort_index() In [6]: df2 Out[6]: jolie jim joe 0 x 0.126970 x 0.966718 1 y 0.897237 z 0.260476 [4 rows x 1 columns] In [7]: df2.index.lexsort_depth Out[7]: 2 In [8]: df2.loc[(1,'z')] Out[8]: jolie jim joe 1 z 0.260476 [1 rows x 1 columns]
具有
category資料型別的 Series 的 unique 函式中的錯誤,該錯誤返回所有類別,而不管它們是否“被使用”(有關討論,請參閱 GH 8559)。之前的行為是返回所有類別。In [3]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c']) In [4]: cat Out[4]: [a, b, a] Categories (3, object): [a < b < c] In [5]: cat.unique() Out[5]: array(['a', 'b', 'c'], dtype=object)
現在,只返回陣列中實際出現的類別。
In [1]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c']) In [2]: cat.unique() Out[2]: ['a', 'b'] Categories (3, str): ['a', 'b', 'c']
Series.all和Series.any現在支援level和skipna引數。Series.all、Series.any、Index.all和Index.any不再支援out和keepdims引數,這些引數是為了與 ndarray 相容而存在的。各種索引型別不再支援all和any聚合函式,現在會引發TypeError。( GH 8302 )允許 Series 與 categorical dtypes 和 object dtypes 進行相等比較;之前這些操作會引發
TypeError( GH 8938 )NDFrame 中的錯誤:具有衝突的屬性/列名在獲取和設定之間現在表現一致。之前,當存在名為
y的列和屬性時,data.y會返回屬性,而data.y = z會更新列 ( GH 8994 )In [3]: data = pd.DataFrame({'x': [1, 2, 3]}) In [4]: data.y = 2 In [5]: data['y'] = [2, 4, 6] In [6]: data Out[6]: x y 0 1 2 1 2 4 2 3 6 [3 rows x 2 columns] # this assignment was inconsistent In [7]: data.y = 5
舊行為
In [6]: data.y Out[6]: 2 In [7]: data['y'].values Out[7]: array([5, 5, 5])
新行為
In [8]: data.y Out[8]: 5 In [9]: data['y'].values Out[9]: array([2, 4, 6])
Timestamp('now')現在等同於Timestamp.now(),即返回本地時間而不是 UTC。此外,Timestamp('today')現在等同於Timestamp.today(),並且兩者都可能有一個tz引數。( GH 9000 )修復了標籤基切片中的負步長支援 ( GH 8753 )
舊行為
In [1]: s = pd.Series(np.arange(3), ['a', 'b', 'c']) Out[1]: a 0 b 1 c 2 dtype: int64 In [2]: s.loc['c':'a':-1] Out[2]: c 2 dtype: int64
新行為
In [10]: s = pd.Series(np.arange(3), ['a', 'b', 'c']) In [11]: s.loc['c':'a':-1] Out[11]: c 2 b 1 a 0 Length: 3, dtype: int64
增強功能#
Categorical 增強功能
添加了將 Categorical 資料匯出到 Stata 的能力 ( GH 8633 )。有關匯出到 Stata 資料檔案的分類變數的限制,請參見 此處。
在
StataReader和read_stata中添加了order_categoricals標誌,用於選擇是否對匯入的分類資料進行排序 ( GH 8836 )。有關從 Stata 資料檔案匯入分類變數的更多資訊,請參見 此處。添加了將 Categorical 資料匯出/匯入 HDF5 的能力 ( GH 7621 )。查詢的工作方式與物件陣列相同。但是,
categorydtyped 資料以更有效的方式儲存。有關示例和與 pandas 早期版本相關的注意事項,請參見 此處。在
Categorical類上添加了對searchsorted()的支援 ( GH 8420 )。
其他增強功能
添加了在將 DataFrame 寫入資料庫時指定列 SQL 型別的功能 ( GH 8778 )。例如,指定使用 SQLAlchemy 的
String型別而不是字串列的預設Text型別。from sqlalchemy.types import String data.to_sql('data_dtype', engine, dtype={'Col_1': String}) # noqa F821
Series.all和Series.any現在支援level和skipna引數 ( GH 8302 )>>> s = pd.Series([False, True, False], index=[0, 0, 1]) >>> s.any(level=0) 0 True 1 False dtype: bool
Panel現在支援all和any聚合函式。( GH 8302 )>>> p = pd.Panel(np.random.rand(2, 5, 4) > 0.1) >>> p.all() 0 1 2 3 0 True True True True 1 True False True True 2 True True True True 3 False True False True 4 True True True True
在
Timestamp類上添加了對utcfromtimestamp()、fromtimestamp()和combine()的支援 ( GH 5351 )。添加了 Google Analytics (
pandas.io.ga) 的基本文件 ( GH 8835 )。請參見 此處。Timedelta算術在未知情況下返回NotImplemented,允許透過自定義類進行擴充套件 ( GH 8813 )。Timedelta現在支援與適當 dtype 的numpy.ndarray物件進行算術運算(僅限 numpy 1.8 或更新版本)( GH 8884 )。將
Timedelta.to_timedelta64()方法新增到了公共 API ( GH 8884 )。在 gbq 模組中添加了
gbq.generate_bq_schema()函式 ( GH 8325 )。Series現在與 map 物件的工作方式與生成器相同 ( GH 8909 )。為
HDFStore添加了上下文管理器以自動關閉 ( GH 8791 )。to_datetime增加了exact關鍵字,以允許格式不必精確匹配提供的格式字串(如果其值為False)。exact預設為True(這意味著精確匹配仍然是預設設定)( GH 8904 )在 parallel_coordinates 繪圖函式中添加了
axvlines布林選項,用於確定是否列印垂直線,預設為 True。在 read_html 中添加了讀取表頁尾的功能 ( GH 8552 )
to_sql現在會推斷包含 NA 值且 dtype 為object的列的非 NA 值的資料型別 ( GH 8778 )。
效能#
Bug 修復#
concat 具有
categorydtypes 的 Series 時出現錯誤,該錯誤會將其強制轉換為object。( GH 8641 )Timestamp-Timestamp 不返回 Timedelta 型別以及帶時區的 datelike-datelike 操作中的錯誤 ( GH 8865 )
統一了時區不匹配異常(tz 操作為 None 或不相容時區),現在將返回
TypeError而不是ValueError(僅少數邊緣情況)( GH 8865 )使用
pd.Grouper(key=...)且沒有 level/axis 或只有 level 的情況下的錯誤 ( GH 8795, GH 8866 )當在 groupby 中傳遞無效/無引數時,報告
TypeError( GH 8015 )groupby 簽名中未包含 *args 或 **kwargs 的錯誤 ( GH 8733 )。
io.data.Options現在當 Yahoo 沒有可用的到期日期時,以及當它從 Yahoo 接收不到資料時,會引發RemoteDataError( GH 8761, GH 8783 )。在 csv 解析時,當傳遞 dtype 和 names 且解析資料是不同資料型別時,錯誤訊息不明確 ( GH 8833 )
使用空列表和至少一個布林索引器對 MultiIndex 進行切片時的錯誤 ( GH 8781 )
io.data.Options現在當 Yahoo 沒有可用的到期日期時,會引發RemoteDataError( GH 8761 )。Timedeltakwargs 現在可以是 numpy int 和 float ( GH 8757 )。sql_schema現在會生成符合方言的CREATE TABLE語句 ( GH 8697 )slice字串方法現在會考慮步長 ( GH 8754 )BlockManager 中的錯誤,當設定不同型別的值時會破壞塊的完整性 ( GH 8850 )
當使用
time物件作為鍵時,DatetimeIndex 中的錯誤 ( GH 8667 )merge 中的錯誤,當
how='left'和sort=False時,不會保留左幀的順序 ( GH 7331 )MultiIndex.reindex 中的錯誤,當在某個級別重新索引時,不會重新排序標籤 ( GH 4088 )
與 dateutil 時區相關的某些操作中的錯誤,在使用 dateutil 2.3 版本時出現 ( GH 8639 )
DatetimeIndex 迭代與 Fixed/Local 偏移時區相關的迴歸 ( GH 8890 )
使用
%f格式解析納秒時,to_datetime 中的錯誤 ( GH 8989 )io.data.Options現在當 Yahoo 沒有可用的到期日期時,以及當它從 Yahoo 接收不到資料時,會引發RemoteDataError( GH 8761, GH 8783 )。修復:字型大小僅在 x 軸(如果垂直)或 y 軸(如果水平)上設定。( GH 8765 )
在 Python 3 中讀取大型 csv 檔案時,修復了除以 0 的問題 ( GH 8621 )
當使用
to_html,index=False輸出 MultiIndex 時,會新增一個額外列的錯誤 ( GH 8452 )從 Stata 檔案匯入的分類變數會保留底層資料的序數資訊 ( GH 8836 )。
定義了
NDFrame物件上的.size屬性,以提供與 numpy >= 1.9.1 的相容性;與np.array_split存在 bug ( GH 8846 )跳過 matplotlib <= 1.2 的直方圖測試 ( GH 8648 )。
get_data_google 返回 object dtypes 的錯誤 ( GH 3995 )
當 DataFrame 的
columns是一個MultiIndex且其labels沒有引用其所有levels時,DataFrame.stack(..., dropna=False) 中的錯誤。( GH 8844 )Option 上下文在
__enter__中應用的錯誤 ( GH 8514 )當重取樣跨越多天且最後一個偏移量不是從範圍開始計算時,resample 導致 ValueError 的錯誤 ( GH 8683 )
當檢查 np.array 是否在 DataFrame 中時,DataFrame.plot(kind='scatter') 失敗的錯誤 ( GH 8852 )
pd.infer_freq/DataFrame.inferred_freq 在索引包含 DST 天時,阻止了正確的亞日頻率推斷的錯誤 ( GH 8772 )。
當使用
use_index=False繪製 series 時,索引名稱仍然被使用的錯誤 ( GH 8558 )。當嘗試堆疊多個列時,其中一些(或所有)級別名稱是數字的錯誤 ( GH 8584 )。
MultiIndex 中的錯誤,當索引不是詞法排序或唯一時,
__contains__返回錯誤的結果 ( GH 7724 )BUG CSV:修復了跳過行中尾部空格的問題 ( GH 8679 ), ( GH 8661 ), ( GH 8983 )
Timestamp 不解析 UTC 的 'Z' 時區指示符的迴歸 ( GH 8771 )
StataWriter 中的錯誤,生成寫入長度為 244 個字元的字串,而不管實際大小 ( GH 8969 )
修復了當 datetime64 Series 包含 NaT 時 cummin/cummax 引發的 ValueError。( GH 8965 )
DataReader 中存在缺失值時返回 object dtypes 的錯誤 ( GH 8980 )
當啟用 sharex 且索引是時間序列時,在繪圖中顯示多個軸標籤的錯誤 ( GH 3964 )。
向 TimedeltaIndex 建構函式傳遞 unit 時,將納秒轉換應用了兩次的錯誤。( GH 9011 )。
繪製類 period 陣列時的錯誤 ( GH 9012 )
貢獻者#
總共有 49 人為本次釋出貢獻了補丁。名字旁邊有“+”號的人是第一次貢獻補丁。
Aaron Staple
Angelos Evripiotis +
Artemy Kolchinsky
Benoit Pointet +
Brian Jacobowski +
Charalampos Papaloizou +
Chris Warth +
David Stephens
Fabio Zanini +
Francesc Via +
Henry Kleynhans +
Jake VanderPlas +
Jan Schulz
Jeff Reback
Jeff Tratner
Joris Van den Bossche
Kevin Sheppard
Matt Suggit +
Matthew Brett
Phillip Cloud
Rupert Thompson +
Scott E Lasley +
Stephan Hoyer
Stephen Simmons +
Sylvain Corlay +
Thomas Grainger +
Tiago Antao +
Tom Augspurger
Trent Hauck
Victor Chaves +
Victor Salgado +
Vikram Bhandoh +
WANG Aiyong
Will Holmgren +
behzad nouri
broessli +
charalampos papaloizou +
immerrr
jnmclarty
jreback
mgilbert +
onesandzeroes
peadarcoyle +
rockg
seth-p
sinhrks
unutbu
wavedatalab +
Åsmund Hjulstad +