版本 0.7.0 (2012 年 2 月 9 日)#
新功能#
新的統一 merge 函式,用於高效執行資料庫/關係代數操作的全部範圍。重構了現有的 join 方法以使用新基礎架構,從而帶來了顯著的效能提升(GH 220,GH 249,GH 267)
新的 統一連線函式,用於沿軸連線 Series、DataFrame 或 Panel 物件。可以形成其他軸的並集或交集。提高了
Series.append和DataFrame.append的效能(GH 468,GH 479,GH 273)也可以將多個 DataFrame 傳遞給
DataFrame.append以進行連線(堆疊),並將多個 Series 傳遞給Series.append您現在可以透過
__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]
新增
DataFrame.iterrows方法,用於高效地迭代 DataFrame 的行新增
DataFrame.to_panel,程式碼改編自LongPanel.to_long新增
reindex_axis方法到 DataFrame新增
level選項到DataFrame和Series上的二元算術函式新增
level選項到 Series 和 DataFrame 上的reindex和align方法,用於廣播值到某個級別(GH 542,GH 552,其他)為
Panel新增基於屬性的專案訪問和 IPython 補全(GH 563)新增
logy選項到Series.plot,用於 Y 軸的對數縮放新增
index和header選項到DataFrame.to_string新增
justify引數到DataFrame.to_string,允許對列標題進行不同的對齊實現 Panel 專案透過屬性的訪問和 IPython 補全(GH 554)
實現
DataFrame.lookup,這是用於在給定行和列標籤序列時檢索值的 fancy-indexing 類似功能(GH 338)可以將 函式列表 傳遞給 DataFrame 上的 groupby 進行聚合,從而產生具有分層列的聚合結果(GH 166)
可以對 Series 和 DataFrame 呼叫
cummin和cummax,分別獲取累積最小值和最大值(GH 647)value_range作為實用函式新增到 DataFrame 中,用於獲取最小值和最大值(GH 288)為
read_csv、read_table、to_csv和from_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
為了支援純粹基於整數的索引,已新增以下方法
方法 |
描述 |
|---|---|
|
檢索儲存在位置 |
|
|
|
檢索第 |
|
檢索第 |
|
檢索位於行 |
關於基於標籤的切片的 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 更改#
效能改進#
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 +