版本 0.7.0 (2012 年 2 月 9 日)#

新功能#

  • 新的統一 merge 函式,用於高效執行資料庫/關係代數操作的全部範圍。重構了現有的 join 方法以使用新基礎架構,從而帶來了顯著的效能提升(GH 220GH 249GH 267

  • 新的 統一連線函式,用於沿軸連線 Series、DataFrame 或 Panel 物件。可以形成其他軸的並集或交集。提高了 Series.appendDataFrame.append 的效能(GH 468GH 479GH 273

  • 也可以將多個 DataFrame 傳遞給 DataFrame.append 以進行連線(堆疊),並將多個 Series 傳遞給 Series.append

  • 可以 將字典列表(例如,JSON 物件列表)傳遞給 DataFrame 建構函式(GH 526

  • 您現在可以透過 __getitem__ 設定 DataFrame 中的多個列,這對於轉換很有用(GH 342

  • 處理 DataFrame.apply 中具有不同索引的輸出值(GH 498

In [1]: df = pd.DataFrame(np.random.randn(10, 4))
In [2]: df.apply(lambda x: x.describe())
Out[2]:
               0          1          2          3
count  10.000000  10.000000  10.000000  10.000000
mean    0.190912  -0.395125  -0.731920  -0.403130
std     0.730951   0.813266   1.112016   0.961912
min    -0.861849  -2.104569  -1.776904  -1.469388
25%    -0.411391  -0.698728  -1.501401  -1.076610
50%     0.380863  -0.228039  -1.191943  -1.004091
75%     0.658444   0.057974  -0.034326   0.461706
max     1.212112   0.577046   1.643563   1.071804

[8 rows x 4 columns]
  • 新增 reorder_levels 方法到 Series 和 DataFrame(GH 534

  • 新增 字典狀 get 函式到 DataFrame 和 Panel(GH 521

  • 新增 DataFrame.iterrows 方法,用於高效地迭代 DataFrame 的行

  • 新增 DataFrame.to_panel,程式碼改編自 LongPanel.to_long

  • 新增 reindex_axis 方法到 DataFrame

  • 新增 level 選項到 DataFrameSeries 上的二元算術函式

  • 新增 level 選項到 Series 和 DataFrame 上的 reindexalign 方法,用於廣播值到某個級別(GH 542GH 552,其他)

  • Panel 新增基於屬性的專案訪問和 IPython 補全(GH 563

  • 新增 logy 選項到 Series.plot,用於 Y 軸的對數縮放

  • 新增 indexheader 選項到 DataFrame.to_string

  • 可以 將多個 DataFrame 傳遞給 DataFrame.join 以在索引上進行 join(GH 115

  • 可以 將多個 Panel 傳遞給 Panel.joinGH 115

  • 新增 justify 引數到 DataFrame.to_string,允許對列標題進行不同的對齊

  • 新增 sort 選項到 GroupBy,允許停用組鍵的排序以提高潛在速度(GH 595

  • 可以 將 MaskedArray 傳遞給 Series 建構函式(GH 563

  • 實現 Panel 專案透過屬性的訪問和 IPython 補全(GH 554

  • 實現 DataFrame.lookup,這是用於在給定行和列標籤序列時檢索值的 fancy-indexing 類似功能(GH 338

  • 可以將 函式列表 傳遞給 DataFrame 上的 groupby 進行聚合,從而產生具有分層列的聚合結果(GH 166

  • 可以對 Series 和 DataFrame 呼叫 cummincummax,分別獲取累積最小值和最大值(GH 647

  • value_range 作為實用函式新增到 DataFrame 中,用於獲取最小值和最大值(GH 288

  • read_csvread_tableto_csvfrom_csv 添加了 encoding 引數,用於處理非 ASCII 文字(GH 717

  • pandas 物件添加了 abs 方法

  • 新增 crosstab 函式,用於輕鬆計算頻率表

  • 索引物件添加了 isin 方法

  • DataFrame 的 xs 方法添加了 level 引數。

整數索引的 API 更改#

0.7.0 版本中一個潛在風險最大但也是最重要的 API 更改是,對 **整數索引** 如何與基於標籤的索引相關聯進行了全面審查。這是一個例子。

In [3]: s = pd.Series(np.random.randn(10), index=range(0, 20, 2))
In [4]: s
Out[4]:
0    -1.294524
2     0.413738
4     0.276662
6    -0.472035
8    -0.013960
10   -0.362543
12   -0.006154
14   -0.923061
16    0.895717
18    0.805244
Length: 10, dtype: float64

In [5]: s[0]
Out[5]: -1.2945235902555294

In [6]: s[2]
Out[6]: 0.41373810535784006

In [7]: s[4]
Out[7]: 0.2766617129497566

這與之前的行為完全相同。然而,如果你請求一個 **不** 包含在 Series 中的鍵,在 0.6.1 及更早版本中,Series 會 *回退* 到基於位置的查詢。現在這將引發一個 KeyError

In [2]: s[1]
KeyError: 1

此更改對 DataFrame 也有相同的影響

In [3]: df = pd.DataFrame(np.random.randn(8, 4), index=range(0, 16, 2))

In [4]: df
    0        1       2       3
0   0.88427  0.3363 -0.1787  0.03162
2   0.14451 -0.1415  0.2504  0.58374
4  -1.44779 -0.9186 -1.4996  0.27163
6  -0.26598 -2.4184 -0.2658  0.11503
8  -0.58776  0.3144 -0.8566  0.61941
10  0.10940 -0.7175 -1.0108  0.47990
12 -1.16919 -0.3087 -0.6049 -0.43544
14 -0.07337  0.3410  0.0424 -0.16037

In [5]: df.ix[3]
KeyError: 3

為了支援純粹基於整數的索引,已新增以下方法

方法

描述

Series.iget_value(i)

檢索儲存在位置 i 的值

Series.iget(i)

iget_value 的別名

DataFrame.irow(i)

檢索第 i

DataFrame.icol(j)

檢索第 j

DataFrame.iget_value(i, j)

檢索位於行 i 和列 j 的值

關於基於標籤的切片的 API 調整#

使用 ix 進行基於標籤的切片現在要求索引是排序的(單調的),**除非** 開始和結束點都包含在索引中

In [1]: s = pd.Series(np.random.randn(6), index=list('gmkaec'))

In [2]: s
Out[2]:
g   -1.182230
m   -0.276183
k   -0.243550
a    1.628992
e    0.073308
c   -0.539890
dtype: float64

那麼這是可以的

In [3]: s.ix['k':'e']
Out[3]:
k   -0.243550
a    1.628992
e    0.073308
dtype: float64

但這不行

In [12]: s.ix['b':'h']
KeyError 'b'

如果索引已排序,“範圍選擇”將成為可能

In [4]: s2 = s.sort_index()

In [5]: s2
Out[5]:
a    1.628992
c   -0.539890
e    0.073308
g   -1.182230
k   -0.243550
m   -0.276183
dtype: float64

In [6]: s2.ix['b':'h']
Out[6]:
c   -0.539890
e    0.073308
g   -1.182230
dtype: float64

Series [] 運算子的更改#

作為記法上的便利,當透過 [](即 __getitem____setitem__ 方法)獲取和設定值時,您可以將標籤序列或標籤切片傳遞給 Series。行為將與傳遞類似輸入給 ix **整數索引的情況除外**

In [8]: s = pd.Series(np.random.randn(6), index=list('acegkm'))

In [9]: s
Out[9]:
a   -1.206412
c    2.565646
e    1.431256
g    1.340309
k   -1.170299
m   -0.226169
Length: 6, dtype: float64

In [10]: s[['m', 'a', 'c', 'e']]
Out[10]:
m   -0.226169
a   -1.206412
c    2.565646
e    1.431256
Length: 4, dtype: float64

In [11]: s['b':'l']
Out[11]:
c    2.565646
e    1.431256
g    1.340309
k   -1.170299
Length: 4, dtype: float64

In [12]: s['c':'k']
Out[12]:
c    2.565646
e    1.431256
g    1.340309
k   -1.170299
Length: 4, dtype: float64

在整數索引的情況下,行為將與之前完全相同(覆蓋 ndarray

In [13]: s = pd.Series(np.random.randn(6), index=range(0, 12, 2))

In [14]: s[[4, 0, 2]]
Out[14]:
4    0.132003
0    0.410835
2    0.813850
Length: 3, dtype: float64

In [15]: s[1:5]
Out[15]:
2    0.813850
4    0.132003
6   -0.827317
8   -0.076467
Length: 4, dtype: float64

如果您希望使用標籤語義對整數索引進行序列和切片索引,請使用 ix

其他 API 更改#

  • 已棄用的 LongPanel 類已被完全移除

  • 如果在 DataFrame 的列上呼叫 Series.sort,現在將引發異常。在此之前,可以透過執行 df[col].sort() 來意外地修改 DataFrame 的列,而不是使用無副作用的方法 df[col].order()GH 316

  • 雜項重新命名和棄用,這些將(無害地)引發 FutureWarning

  • drop 作為可選引數新增到 DataFrame.reset_indexGH 699

效能改進#

  • Cythonized GroupBy 聚合不再預先排序資料,從而實現了顯著的速度提升(GH 93)。透過 Cython 中 ndarray 資料型別的巧妙操作,Python 函式的 GroupBy 聚合速度顯著提升(GH 496)。

  • 當傳遞的列標籤與資料不匹配時,DataFrame 建構函式中提供更好的錯誤訊息(GH 497

  • 透過重用 Cython 中的 ndarray 物件,大幅提高 multi-GroupBy 聚合(當傳入 Python 函式時)的效能(GH 496

  • 可以在 HDFStore 中儲存由元組和浮點數索引的物件(GH 492

  • 預設情況下不在 Series.to_string 中列印長度,新增 length 選項(GH 489

  • 改進 Cython 程式碼以進行 multi-groupby,從而在無需排序資料的情況下進行聚合(GH 93

  • 透過在 MultiIndex 中儲存元組來提高 MultiIndex 重索引速度,測試了反向反序列化相容性

  • 透過使用專門的 Cython take 函式提高列重索引效能

  • 進一步最佳化 Series.__getitem__ 的效能以適應標準用例

  • 避免在某些情況下建立 Index dict(例如,獲取切片時等),這是先前版本的迴歸

  • 如果未安裝 NumPy,setup.py 中的友好錯誤訊息

  • 在 Panel 類中也使用通用的 NA 處理操作集(sum、mean 等)(GH 536

  • 在 DataFrame 的常規(非分層)索引上呼叫 reset_index 時進行預設名稱分配(GH 476

  • 在 Series/DataFrame 統計操作中使用 Cythonized groupers(當傳入 level 引數時)(GH 545

  • 將 skiplist 資料結構移植到 C,將 rolling_median 的效能提高約 5-10 倍(在大多數典型用例中)(GH 374

貢獻者#

共有 18 人為本次釋出貢獻了補丁。名字旁有“+”號的人是首次貢獻補丁。

  • Adam Klein

  • Bayle Shanks +

  • Chris Billington +

  • Dieter Vandenbussche

  • Fabrizio Pollastri +

  • Graham Taylor +

  • Gregg Lind +

  • Josh Klein +

  • Luca Beltrame

  • Olivier Grisel +

  • Skipper Seabold

  • Thomas Kluyver

  • Thomas Wiecki +

  • Wes McKinney

  • Wouter Overmeire

  • Yaroslav Halchenko

  • fabriziop +

  • theandygross +