バージョン 0.7.0 (2012年2月9日)#
新機能#
データベース/リレーショナル代数操作の全領域を効率的に実行するための新しい統合されたマージ関数。既存の結合メソッドを新しいインフラストラクチャを使用するようにリファクタリングし、大幅なパフォーマンス向上を実現しました (GH 220, GH 249, GH 267)
軸に沿ってSeries、DataFrame、またはPanelオブジェクトを連結するための新しい統合連結関数。他の軸の和集合または交差集合を形成できます。
Series.appendおよびDataFrame.appendのパフォーマンスを向上させます (GH 468, GH 479, GH 273)DataFrame.appendに複数のDataFrameを渡して連結(スタック)したり、Series.appendに複数のSeriesを渡したりできるようになりましたDataFrameコンストラクタに辞書のリスト(例:JSONオブジェクトのリスト)を渡せるようになりました (GH 526)
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の行を効率的に反復処理するための
DataFrame.iterrowsメソッドを追加LongPanel.to_longから適合されたコードでDataFrame.to_panelを追加DataFrameに
reindex_axisメソッドを追加DataFrameおよびSeriesの二項算術関数にlevelオプションを追加SeriesおよびDataFrameの
reindexおよびalignメソッドにlevelオプションを追加し、レベル全体に値をブロードキャストできるようにしました (GH 542, GH 552, その他)Panelへの属性ベースのアイテムアクセスとIPython補完を追加 (GH 563)Series.plotにlogyオプションを追加し、Y軸のログスケールを可能にしましたDataFrame.to_stringにindexおよびheaderオプションを追加インデックスで結合するために
DataFrame.joinに複数のDataFrameを渡せるようになりました (GH 115)Panel.joinに複数のPanelを渡せるようになりました (GH 115)DataFrame.to_stringにjustify引数を追加し、列ヘッダーの異なる配置を可能にしましたGroupByに
sortオプションを追加し、グループキーのソートを無効にして速度向上を可能にしました (GH 595)SeriesコンストラクタにMaskedArrayを渡せるようになりました (GH 563)
属性によるPanelアイテムアクセスとIPython補完を追加 (GH 554)
行と列のラベルのシーケンスが与えられた値を取得するための、ファンシーインデックスのアナログである
DataFrame.lookupを実装しました (GH 338)DataFrameのgroupbyで集計するために関数のリストを渡すことができ、階層的な列を持つ集計結果が生成されます (GH 166)
SeriesおよびDataFrameで
cumminおよびcummaxを呼び出して、それぞれ累積最小値および最大値を取得できるようになりました (GH 647)データフレームの最小値と最大値を取得するためのユーティリティ関数として
value_rangeが追加されました (GH 288)非ASCIIテキスト用に
read_csv、read_table、to_csv、およびfrom_csvにencoding引数を追加しました (GH 717)pandasオブジェクトに
absメソッドを追加頻度表を簡単に計算するための
crosstab関数を追加インデックスオブジェクトに
isinメソッドを追加DataFrameの
xsメソッドにlevel引数を追加。
整数インデックスのAPI変更#
0.7.0における潜在的に最もリスクの高いAPI変更の1つであり、同時に最も重要な変更の1つは、ラベルベースのインデックスに関する整数インデックスの処理方法の完全な見直しでした。以下に例を示します。
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 の変更#
パフォーマンス改善#
Cython化されたGroupBy集計はデータを事前にソートしなくなり、大幅な高速化を実現しました (GH 93)。Cythonにおけるndarrayデータ型の巧妙な操作により、Python関数によるGroupBy集計が大幅に高速化されました (GH 496)。
渡された列ラベルがデータと一致しない場合のDataFrameコンストラクタのより良いエラーメッセージ (GH 497)
Python関数が渡された場合のマルチGroupBy集計のパフォーマンスを大幅に向上させ、Cythonでndarrayオブジェクトを再利用 (GH 496)
HDFStoreにタプルとフロートでインデックス付けされたオブジェクトを格納できるようになりました (GH 492)
デフォルトでSeries.to_stringで長さを表示しないようにし、
lengthオプションを追加しました (GH 489)マルチgroupbyのCythonコードを改善し、データをソートせずに集計できるようにしました (GH 93)
MultiIndexにタプルを格納することでMultiIndexのリインデックス速度を向上させ、後方互換性のためのアンピクルテストを実施
専用のCython take関数を使用することで、列のリインデックスパフォーマンスを向上
標準的な使用例におけるSeries.__getitem__のさらなるパフォーマンス調整
一部のケース(スライスを取得する場合など)でインデックス辞書の作成を回避し、以前のバージョンからの回帰
NumPyがインストールされていない場合のsetup.pyのより親切なエラーメッセージ
PanelクラスでもNA処理操作(sum、meanなど)の共通セットを使用 (GH 536)
通常の(非階層的な)インデックスを持つDataFrameに対して
reset_indexを呼び出した場合のデフォルトの名前割り当て (GH 476)levelパラメータが渡された場合、Series/DataFrameの統計演算で可能な限りCython化されたグルーパーを使用 (GH 545)スキップリストデータ構造を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 +
スキッパー・シーボールド
Thomas Kluyver
Thomas Wiecki +
Wes McKinney
Wouter Overmeire
ヤロスラフ・ハルチェンコ
fabriziop +
theandygross +