版本 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.allSeries.any 現在支援 levelskipna 引數。Series.allSeries.anyIndex.allIndex.any 不再支援 outkeepdims 引數,這些引數是為了與 ndarray 相容而存在的。各種索引型別不再支援 allany 聚合函式,現在會引發 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 資料檔案的分類變數的限制,請參見 此處

  • StataReaderread_stata 中添加了 order_categoricals 標誌,用於選擇是否對匯入的分類資料進行排序 ( GH 8836 )。有關從 Stata 資料檔案匯入分類變數的更多資訊,請參見 此處

  • 添加了將 Categorical 資料匯出/匯入 HDF5 的能力 ( GH 7621 )。查詢的工作方式與物件陣列相同。但是,category dtyped 資料以更有效的方式儲存。有關示例和與 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.allSeries.any 現在支援 levelskipna 引數 ( GH 8302 )

    >>> s = pd.Series([False, True, False], index=[0, 0, 1])
    >>> s.any(level=0)
    0     True
    1    False
    dtype: bool
    
  • Panel 現在支援 allany 聚合函式。( 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 )。

效能#

  • 在 read_csv 中,當 skiprows 是整數時,減少記憶體使用 ( GH 8681 )

  • 使用 format= 轉換 to_datetime 時,以及 exact=False 時,效能提升 ( GH 8904 )

Bug 修復#

  • concat 具有 category dtypes 的 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 )

  • 使用 py2app/cx_Freeze 打包 pandas 時的錯誤 ( GH 8602, GH 8831 )

  • 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 )。

  • Timedelta kwargs 現在可以是 numpy int 和 float ( GH 8757 )。

  • 修復了 Timedelta 算術和比較的幾個未解決的錯誤 ( GH 8813, GH 5963, GH 5436 )。

  • 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 )

  • Dateti​​meIndex 迭代與 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 +