バージョン 0.9.1 (2012年11月14日)#
これは 0.9.0 からのバグ修正リリースであり、多数のバグ修正に加えて、いくつかの新機能と機能強化が含まれています。新機能には、DataFrame および Series の列ごとのソート順、rank メソッドの NA 処理の改善、DataFrame 用のマスキング関数、DataFrame 用の日中時系列フィルタリングが含まれます。
新機能#
Series.sort、DataFrame.sort、およびDataFrame.sort_indexは、複数のソート順をサポートするために列ごとに指定できるようになりました (GH 928)In [2]: df = pd.DataFrame(np.random.randint(0, 2, (6, 3)), ...: columns=['A', 'B', 'C']) In [3]: df.sort(['A', 'B'], ascending=[1, 0]) Out[3]: A B C 3 0 1 1 4 0 1 1 2 0 0 1 0 1 0 0 1 1 0 0 5 1 0 0
DataFrame.rankはna_optionパラメータに追加の引数値をサポートするようになり、欠損値に最大または最小のランクを割り当てることができるようになりました (GH 1508, GH 2159)In [1]: df = pd.DataFrame(np.random.randn(6, 3), columns=['A', 'B', 'C']) In [2]: df.loc[2:4] = np.nan In [3]: df.rank() Out[3]: A B C 0 3.0 2.0 1.0 1 1.0 3.0 2.0 2 NaN NaN NaN 3 NaN NaN NaN 4 NaN NaN NaN 5 2.0 1.0 3.0 [6 rows x 3 columns] In [4]: df.rank(na_option='top') Out[4]: A B C 0 6.0 5.0 4.0 1 4.0 6.0 5.0 2 2.0 2.0 2.0 3 2.0 2.0 2.0 4 2.0 2.0 2.0 5 5.0 4.0 6.0 [6 rows x 3 columns] In [5]: df.rank(na_option='bottom') Out[5]: A B C 0 3.0 2.0 1.0 1 1.0 3.0 2.0 2 5.0 5.0 5.0 3 5.0 5.0 5.0 4 5.0 5.0 5.0 5 2.0 1.0 3.0 [6 rows x 3 columns]DataFrame には、指定されたブールマスクに従って値を選択する新しい
whereおよびmaskメソッドがあります (GH 2109, GH 2151)DataFrame は現在、DataFrame と同じ長さのブールベクトル (
[]内) によるスライスをサポートしています。返される DataFrame は元の DataFrame と同じ数の列を持ちますが、そのインデックスでスライスされます。In [6]: df = pd.DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C']) In [7]: df Out[7]: A B C 0 0.276232 -1.087401 -0.673690 1 0.113648 -1.478427 0.524988 2 0.404705 0.577046 -1.715002 3 -1.039268 -0.370647 -1.157892 4 -1.344312 0.844885 1.075770 [5 rows x 3 columns] In [8]: df[df['A'] > 0] Out[8]: A B C 0 0.276232 -1.087401 -0.673690 1 0.113648 -1.478427 0.524988 2 0.404705 0.577046 -1.715002 [3 rows x 3 columns]DataFrame が DataFrame ベースのブール条件 (元の DataFrame と同じサイズ) でスライスされる場合、元の DataFrame と同じサイズ (インデックスと列) の DataFrame が返され、ブール条件を満たさない要素は
NaNとなります。これは新しいメソッドDataFrame.whereを介して行われます。さらに、whereは置換用のオプションのother引数を受け取ります。In [9]: df[df > 0] Out[9]: A B C 0 0.276232 NaN NaN 1 0.113648 NaN 0.524988 2 0.404705 0.577046 NaN 3 NaN NaN NaN 4 NaN 0.844885 1.075770 [5 rows x 3 columns] In [10]: df.where(df > 0) Out[10]: A B C 0 0.276232 NaN NaN 1 0.113648 NaN 0.524988 2 0.404705 0.577046 NaN 3 NaN NaN NaN 4 NaN 0.844885 1.075770 [5 rows x 3 columns] In [11]: df.where(df > 0, -df) Out[11]: A B C 0 0.276232 1.087401 0.673690 1 0.113648 1.478427 0.524988 2 0.404705 0.577046 1.715002 3 1.039268 0.370647 1.157892 4 1.344312 0.844885 1.075770 [5 rows x 3 columns]さらに、
whereは入力ブール条件 (ndarray または DataFrame) を整列させるため、設定を伴う部分的な選択が可能になりました。これは.ixを介した部分的な設定に似ています (ただし、軸ラベルではなく内容についてです)。In [12]: df2 = df.copy() In [13]: df2[df2[1:4] > 0] = 3 In [14]: df2 Out[14]: A B C 0 0.276232 -1.087401 -0.673690 1 3.000000 -1.478427 3.000000 2 3.000000 3.000000 -1.715002 3 -1.039268 -0.370647 -1.157892 4 -1.344312 0.844885 1.075770 [5 rows x 3 columns]
DataFrame.maskはwhereの逆ブール演算です。In [15]: df.mask(df <= 0) Out[15]: A B C 0 0.276232 NaN NaN 1 0.113648 NaN 0.524988 2 0.404705 0.577046 NaN 3 NaN NaN NaN 4 NaN 0.844885 1.075770 [5 rows x 3 columns]Excel の列を列名で参照できるようにしました (GH 1936)
In [1]: xl = pd.ExcelFile('data/test.xls') In [2]: xl.parse('Sheet1', index_col=0, parse_dates=True, parse_cols='A:D')
series.plot(x_compat=True)またはpandas.plot_params['x_compat'] = Trueを使用して pandas スタイルの目盛りロケーターとフォーマッターを無効にするオプションを追加しました (GH 2205)既存の TimeSeries メソッド
at_timeとbetween_timeが DataFrame に追加されました (GH 2149)DataFrame.dot は ndarray を受け入れることができるようになりました (GH 2042)
DataFrame.drop は非一意なインデックスをサポートするようになりました (GH 2101)
Panel.shift は負の期間をサポートするようになりました (GH 2164)
DataFrame は単項 ~ 演算子をサポートするようになりました (GH 2110)
APIの変更点#
PeriodIndex を使用してデータをアップサンプリングすると、元の時間枠にまたがる高頻度の TimeSeries が生成されます。
In [1]: prng = pd.period_range('2012Q1', periods=2, freq='Q') In [2]: s = pd.Series(np.random.randn(len(prng)), prng) In [4]: s.resample('M') Out[4]: 2012-01 -1.471992 2012-02 NaN 2012-03 NaN 2012-04 -0.493593 2012-05 NaN 2012-06 NaN Freq: M, dtype: float64Period.end_time は、時間間隔の最後のナノ秒を返すようになりました (GH 2124, GH 2125, GH 1764)
In [16]: p = pd.Period('2012') In [17]: p.end_time Out[17]: Timestamp('2012-12-31 23:59:59.999999999')ファイルパーサーは、カスタムコンバーターが指定されている列については、フロートまたはブールに強制変換しなくなりました (GH 2184)
In [18]: import io In [19]: data = ('A,B,C\n' ....: '00001,001,5\n' ....: '00002,002,6') ....: In [20]: pd.read_csv(io.StringIO(data), converters={'A': lambda x: x.strip()}) Out[20]: A B C 0 00001 1 5 1 00002 2 6 [2 rows x 3 columns]
完全なリストについては、GitHub の完全なリリースノートまたはイシュートラッカーを参照してください。
貢献者#
このリリースには合計11名がパッチを貢献しました。名前に「+」が付いている人は初めてパッチを貢献しました。
Brenda Moon +
Chang She
Jeff Reback +
Justin C Johnson +
K.-Michael Aye
Martin Blais
Tobias Brandt +
Wes McKinney
Wouter Overmeire
timmie
y-p