バージョン 0.15.2 (2014年12月12日)#

これは 0.15.1 からのマイナーリリースであり、多数のバグ修正に加え、いくつかの新機能、機能強化、パフォーマンス改善が含まれています。既存のバグを修正するために少数の API 変更が必要でした。すべてのユーザーがこのバージョンにアップグレードすることをお勧めします。

APIの変更点#

  • MultiIndex における辞書順ソート深度を超えるインデックス指定がサポートされるようになりましたが、辞書順にソートされたインデックスの方がパフォーマンスが向上します。( GH 2646 )

    In [1]: df = pd.DataFrame({'jim':[0, 0, 1, 1],
       ...:                    'joe':['x', 'x', 'z', 'y'],
       ...:                    'jolie':np.random.rand(4)}).set_index(['jim', 'joe'])
       ...:
    
    In [2]: df
    Out[2]:
                jolie
    jim joe
    0   x    0.126970
        x    0.966718
    1   z    0.260476
        y    0.897237
    
    [4 rows x 1 columns]
    
    In [3]: df.index.lexsort_depth
    Out[3]: 1
    
    # in prior versions this would raise a KeyError
    # will now show a PerformanceWarning
    In [4]: df.loc[(1, 'z')]
    Out[4]:
                jolie
    jim joe
    1   z    0.260476
    
    [1 rows x 1 columns]
    
    # lexically sorting
    In [5]: df2 = df.sort_index()
    
    In [6]: df2
    Out[6]:
                jolie
    jim joe
    0   x    0.126970
        x    0.966718
    1   y    0.897237
        z    0.260476
    
    [4 rows x 1 columns]
    
    In [7]: df2.index.lexsort_depth
    Out[7]: 2
    
    In [8]: df2.loc[(1,'z')]
    Out[8]:
                jolie
    jim joe
    1   z    0.260476
    
    [1 rows x 1 columns]
    
  • category dtype を持つ Series のユニーク値に関するバグで、カテゴリが「使用されている」かどうかにかかわらずすべてのカテゴリが返されていました(議論については GH 8559 を参照)。以前の動作ではすべてのカテゴリが返されました。

    In [3]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c'])
    
    In [4]: cat
    Out[4]:
    [a, b, a]
    Categories (3, object): [a < b < c]
    
    In [5]: cat.unique()
    Out[5]: array(['a', 'b', 'c'], dtype=object)
    

    現在、配列に実際に現れるカテゴリのみが返されます。

    In [1]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c'])
    
    In [2]: cat.unique()
    Out[2]: 
    ['a', 'b']
    Categories (3, object): ['a', 'b', 'c']
    
  • Series.allSeries.anylevel および skipna パラメータをサポートするようになりました。Series.all, Series.any, Index.all, および Index.any は、ndarray との互換性のために存在していた out および keepdims パラメータをサポートしなくなりました。様々なインデックス型は all および any 集約関数をサポートしなくなり、TypeError を発生させるようになりました。( GH 8302 )。

  • カテゴリカル dtype とオブジェクト dtype を持つ Series の等価比較が可能になりました。以前は TypeError が発生していました (GH 8938)

  • NDFrame のバグ: 競合する属性/列名が、取得と設定の間で一貫して動作するようになりました。以前は、y という名前の列と属性の両方が存在する場合、data.y は属性を返し、data.y = z は列を更新していました (GH 8994)

    In [3]: data = pd.DataFrame({'x': [1, 2, 3]})
    
    In [4]: data.y = 2
    
    In [5]: data['y'] = [2, 4, 6]
    
    In [6]: data
    Out[6]: 
       x  y
    0  1  2
    1  2  4
    2  3  6
    
    [3 rows x 2 columns]
    
    # this assignment was inconsistent
    In [7]: data.y = 5
    

    以前の動作

    In [6]: data.y
    Out[6]: 2
    
    In [7]: data['y'].values
    Out[7]: array([5, 5, 5])
    

    新しい動作

    In [8]: data.y
    Out[8]: 5
    
    In [9]: data['y'].values
    Out[9]: array([2, 4, 6])
    
  • Timestamp('now') は、UTC ではなくローカル時間を返すという点で Timestamp.now() と同等になりました。また、Timestamp('today')Timestamp.today() と同等になり、両方とも tz を引数として指定できるようになりました。( GH 9000 )

  • ラベルベースのスライスにおける負のステップサポートを修正 ( GH 8753 )

    以前の動作

    In [1]: s = pd.Series(np.arange(3), ['a', 'b', 'c'])
    Out[1]:
    a    0
    b    1
    c    2
    dtype: int64
    
    In [2]: s.loc['c':'a':-1]
    Out[2]:
    c    2
    dtype: int64
    

    新しい動作

    In [10]: s = pd.Series(np.arange(3), ['a', 'b', 'c'])
    
    In [11]: s.loc['c':'a':-1]
    Out[11]: 
    c    2
    b    1
    a    0
    Length: 3, dtype: int64
    

機能強化#

Categorical の機能強化

  • Categorical データを Stata にエクスポートする機能を追加しました (GH 8633)。Stata データファイルにエクスポートされるカテゴリ変数の制限については、こちらを参照してください。

  • StataReader および read_stata に、インポートされたカテゴリデータを順序付けするかどうかを選択するフラグ order_categoricals を追加しました (GH 8836)。Stata データファイルからカテゴリ変数をインポートする方法の詳細については、こちらを参照してください。

  • Categorical データを HDF5 にエクスポート/インポートする機能が追加されました (GH 7621)。クエリはオブジェクト配列の場合と同じように機能します。ただし、category dtyped データはより効率的な方法で保存されます。例と以前のバージョンの pandas に関する注意点については、こちらを参照してください。

  • Categorical クラスでの searchsorted() のサポートが追加されました (GH 8420)。

その他の拡張機能

  • DataFrameをデータベースに書き込む際に、列のSQL型を指定する機能が追加されました (GH 8778)。たとえば、文字列列にデフォルトの Text 型ではなく sqlalchemy の String 型を使用するように指定するなど。

    from sqlalchemy.types import String
    data.to_sql('data_dtype', engine, dtype={'Col_1': String})  # noqa F821
    
  • Series.all および Series.anylevel および skipna パラメータをサポートするようになりました (GH 8302)

    >>> s = pd.Series([False, True, False], index=[0, 0, 1])
    >>> s.any(level=0)
    0     True
    1    False
    dtype: bool
    
  • Panelall および any 集約関数をサポートするようになりました。( GH 8302 )

    >>> p = pd.Panel(np.random.rand(2, 5, 4) > 0.1)
    >>> p.all()
           0      1      2     3
    0   True   True   True  True
    1   True  False   True  True
    2   True   True   True  True
    3  False   True  False  True
    4   True   True   True  True
    
  • Timestamp クラスで utcfromtimestamp()fromtimestamp()、および combine() のサポートを追加しました (GH 5351)。

  • Google Analytics (pandas.io.ga) の基本的なドキュメントが追加されました (GH 8835)。こちらを参照してください。

  • Timedelta の算術演算は、不明なケースでは NotImplemented を返し、カスタムクラスによる拡張を可能にします (GH 8813)。

  • Timedelta が適切な dtype を持つ numpy.ndarray オブジェクトとの算術演算をサポートするようになりました (numpy 1.8 以降のみ) (GH 8884)。

  • 公開 API に Timedelta.to_timedelta64() メソッドを追加しました (GH 8884)。

  • gbq モジュールに gbq.generate_bq_schema() 関数を追加しました (GH 8325)。

  • Series がジェネレータと同じようにマップオブジェクトで動作するようになりました (GH 8909)。

  • 自動クローズのためのコンテキストマネージャが HDFStore に追加されました (GH 8791)。

  • to_datetimeexact キーワードが追加され、( False の場合) 指定されたフォーマット文字列に対して正確な一致を要求しないように設定できます。exact のデフォルトは True です (つまり、厳密な一致がデフォルトのままです) (GH 8904)

  • parallel_coordinates プロット関数に axvlines ブールオプションを追加しました。これは垂直線が描画されるかどうかを決定し、デフォルトは True です。

  • read_html にテーブルフッターを読み込む機能を追加しました (GH 8552)

  • to_sql が、NA 値を含み dtype が object の列について、非NA値のデータ型を推論するようになりました (GH 8778)。

パフォーマンス#

  • read_csvでskiprowsが整数である場合のメモリ使用量を削減しました (GH 8681)

  • 渡された format=exact=False を使用した to_datetime 変換のパフォーマンスが向上しました (GH 8904)

バグ修正#

  • category dtype を持つ Series の連結で、object に強制変換されていたバグを修正しました。( GH 8641 )

  • Timestamp-TimestampがTimedelta型を返さないバグと、タイムゾーンを持つdatelike-datelike演算のバグ (GH 8865)

  • タイムゾーンの不一致例外 (None と演算された tz または互換性のないタイムゾーン) を一貫させ、ValueError ではなく TypeError を返すようになりました (いくつかのエッジケースのみ) (GH 8865)

  • レベル/軸なし、またはレベルのみの pd.Grouper(key=...) を使用する際のバグ (GH 8795, GH 8866)

  • groupbyに無効な/引数なしのパラメータが渡された場合に TypeError を報告するようになりました (GH 8015)

  • py2app/cx_Freeze で pandas をパッケージングする際のバグ (GH 8602, GH 8831)

  • *args または **kwargs を含まない groupby シグネチャのバグ (GH 8733)。

  • io.data.Options は、Yahoo から有効期限が取得できない場合や、Yahoo からデータを受信しない場合に RemoteDataError を発生させるようになりました (GH 8761), (GH 8783)。

  • CSV解析でdtypeとnamesを渡し、解析されたデータが異なるデータ型である場合に不明瞭なエラーメッセージ (GH 8833)

  • 空のリストと少なくとも1つのブールインデクサでMultiIndexをスライスする際のバグ (GH 8781)

  • io.data.Options は、Yahoo から有効期限が取得できない場合に RemoteDataError を発生させるようになりました (GH 8761)。

  • Timedelta のキーワード引数として numpy の整数と浮動小数点数を使用できるようになりました (GH 8757)。

  • Timedelta の算術演算と比較に関するいくつかの未解決のバグを修正しました (GH 8813, GH 5963, GH 5436)。

  • sql_schema が、方言に適した CREATE TABLE ステートメントを生成するようになりました (GH 8697)

  • slice 文字列メソッドがステップを考慮するようになりました (GH 8754)

  • BlockManager で、異なる型の値で設定するとブロックの整合性が崩れるバグを修正しました (GH 8850)

  • DatetimeIndextime オブジェクトをキーとして使用した場合のバグ (GH 8667)

  • mergehow='left' および sort=False が左フレームの順序を保持しないバグ (GH 7331)

  • MultiIndex.reindex で、レベルでの再インデックスがラベルを再順序付けしないバグ (GH 4088)

  • dateutilタイムゾーンでの特定の操作におけるバグ。dateutil 2.3で顕現していました (GH 8639)

  • 固定/ローカルオフセットタイムゾーンでのDatetimeIndexイテレーションにおけるリグレッション (GH 8890)

  • to_datetime%f フォーマットを使用してナノ秒をパースする際のバグ (GH 8989)

  • io.data.Options は、Yahoo から有効期限が取得できない場合や、Yahoo からデータを受信しない場合に RemoteDataError を発生させるようになりました (GH 8761), (GH 8783)。

  • 修正: フォントサイズは垂直の場合はx軸、水平の場合はy軸のみに設定されていました。( GH 8765 )

  • Python 3 で大きな CSV ファイルを読み込む際に発生する 0 による除算エラーを修正しました (GH 8621)。

  • to_html,index=False でMultiIndexを出力する際に余分な列が追加されるバグ (GH 8452)

  • Stata ファイルからインポートされたカテゴリ変数は、基となるデータの順序情報を保持するようになりました (GH 8836)。

  • NDFrame オブジェクト全体で .size 属性を定義し、numpy >= 1.9.1 との互換性を提供しました。np.array_split でバグがありました (GH 8846)

  • matplotlib <= 1.2 のヒストグラムプロットのテストをスキップします (GH 8648)。

  • get_data_google がオブジェクトの dtype を返していたバグ (GH 3995)

  • DataFrameの columnsMultiIndex であり、その labels がすべての levels を参照していない場合に、DataFrame.stack(..., dropna=False) が失敗するバグ (GH 8844)

  • __enter__ に適用された Option コンテキストのバグ (GH 8514)

  • 複数日にわたるリサンプリングで、最後のオフセットが範囲の開始から計算されない場合にValueErrorを引き起こすresampleのバグ (GH 8683)

  • DataFrame.plot(kind='scatter') が np.array が DataFrame に存在するかどうかをチェックする際に失敗するバグ (GH 8852)

  • インデックスに夏時間の日が含まれている場合に、日中の周波数推論が適切に行われない pd.infer_freq/DataFrame.inferred_freq のバグを修正しました (GH 8772)。

  • use_index=False を使用してシリーズをプロットする際に、インデックス名がまだ使用されていたバグ (GH 8558)。

  • 複数の列をスタックする際に、レベル名の一部 (またはすべて) が数字である場合のバグ (GH 8584)。

  • MultiIndex で、インデックスが辞書順にソートされていない、またはユニークでない場合に __contains__ が誤った結果を返すバグ (GH 7724)

  • CSVのバグ: スキップされた行の末尾の空白文字に関する問題を修正しました (GH 8679), (GH 8661), (GH 8983)

  • Timestamp がUTCの 'Z' ゾーン指定子を解析しない回帰バグ (GH 8771)

  • StataWriter が実際のサイズに関わらず244文字の文字列を書き込むバグを修正しました (GH 8969)

  • datetime64 Series に NaT が含まれている場合に cummin/cummax が発生させる ValueError を修正しました。( GH 8965 )

  • DataReaderが欠損値がある場合にオブジェクトdtypeを返すバグ (GH 8980)

  • sharexが有効でインデックスが時系列の場合、プロットで複数の軸にラベルが表示されるバグ (GH 3964)。

  • TimedeltaIndexコンストラクタにユニットを渡すと、ナノ秒変換が2回適用されるバグ (GH 9011)。

  • 期間のような配列をプロットする際のバグ (GH 9012)

貢献者#

本リリースには合計49名がパッチを貢献しました。「+」が付いている方は、今回初めてパッチを貢献されました。

  • Aaron Staple

  • Angelos Evripiotis +

  • アルテム・コルチンスキー

  • Benoit Pointet +

  • Brian Jacobowski +

  • Charalampos Papaloizou +

  • Chris Warth +

  • David Stephens

  • Fabio Zanini +

  • Francesc Via +

  • Henry Kleynhans +

  • Jake VanderPlas +

  • ヤン・シュルツ

  • ジェフ・リーバック

  • Jeff Tratner

  • Joris Van den Bossche

  • ケビン・シェパード

  • Matt Suggit +

  • Matthew Brett

  • Phillip Cloud

  • Rupert Thompson +

  • Scott E Lasley +

  • ステファン・ホイヤー

  • Stephen Simmons +

  • Sylvain Corlay +

  • Thomas Grainger +

  • Tiago Antao +

  • Tom Augspurger

  • Trent Hauck

  • Victor Chaves +

  • Victor Salgado +

  • Vikram Bhandoh +

  • WANG Aiyong

  • Will Holmgren +

  • behzad nouri

  • broessli +

  • charalampos papaloizou +

  • immerrr

  • jnmclarty

  • jreback

  • mgilbert +

  • ワンズアンドゼロズ

  • peadarcoyle +

  • ロックg

  • seth-p

  • sinhrks

  • unutbu

  • wavedatalab +

  • Åsmund Hjulstad +