バージョン 0.9.1 (2012年11月14日)#

これは 0.9.0 からのバグ修正リリースであり、多数のバグ修正に加えて、いくつかの新機能と機能強化が含まれています。新機能には、DataFrame および Series の列ごとのソート順、rank メソッドの NA 処理の改善、DataFrame 用のマスキング関数、DataFrame 用の日中時系列フィルタリングが含まれます。

新機能#

  • Series.sortDataFrame.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.rankna_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.maskwhere の逆ブール演算です。

    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_timebetween_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: float64
    
  • Period.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