バージョン 0.21.1 (2017年12月12日)#

これは 0.21.x シリーズにおけるマイナーなバグ修正リリースであり、いくつかの小さなリグレッション修正、バグ修正、およびパフォーマンス改善が含まれています。すべてのユーザーにこのバージョンへのアップグレードを推奨します。

主な機能は以下の通りです。

  • matplotlib の datetime プロット機能を一時的に復元します。これにより、matplotlib で datetime をプロットするために暗黙的に pandas に依存していたユーザーの問題が解決されるはずです。こちらを参照してください。

  • 0.21.0 で導入された Parquet IO 関数の改善。こちらを参照してください。

Matplotlib datetime コンバーターの登録を復元#

pandas は、datetime または Period 値を持つプロットの軸ラベルを適切にフォーマットするために、いくつかの matplotlib コンバーターを実装しています。pandas 0.21.0 より前は、これらは import pandas の副次作用として matplotlib に暗黙的に登録されていました。

pandas 0.21.0 では、ユーザーにコンバーターを明示的に登録することを要求していました。これは、通常の matplotlib.pyplot プロットメソッドでこれらのコンバーターが存在することに依存していた一部のユーザーに問題を引き起こしたため、その変更を一時的に元に戻します。pandas 0.21.1 では、0.21.0 以前と同様に、インポート時にコンバーターを再び登録します。

コンバーターを制御する新しいオプション pd.options.plotting.matplotlib.register_converters を追加しました。デフォルトでは、これらは登録されています。これを False に切り替えると、pandas のフォーマッターが削除され、登録時に上書きしたコンバーターがすべて復元されます (GH 18301)。

matplotlib 開発者と協力して、これをより簡単にできるようにしています。ユーザーの利便性 (コンバーターの自動登録) とインポートパフォーマンスおよびベストプラクティス (pandas のインポートが、すでに設定したカスタムコンバーターを上書きする副次作用を持つべきではない) のバランスを取ろうとしています。将来的には、datetime フォーマット機能のほとんどを matplotlib に持たせ、pandas 固有のコンバーターのみを pandas に持たせることを望んでいます。そして、ユーザーが望むときに明示的にコンバーターを登録するよう、自動登録を段階的に廃止する予定です。

新機能#

Parquet IO 機能の改善#

  • DataFrame.to_parquet() は、基盤となるエンジンがサポートしている場合、非デフォルトのインデックスを書き込むようになりました。read_parquet() で読み戻すときにインデックスは保持されます (GH 18581)。

  • read_parquet() は、parquet ファイルから読み込む列を指定できるようになりました (GH 18154)

  • read_parquet() は、それぞれのエンジンに渡される kwargs を指定できるようになりました (GH 18216)

その他の機能強化#

非推奨#

パフォーマンス改善#

  • 大規模な Series/DataFrame のプロットパフォーマンスが改善されました (GH 18236)。

バグ修正#

変換#

  • TimedeltaIndex の減算におけるバグで、NaT が存在する場合に誤ってオーバーフローする可能性がありました (GH 17791)

  • DatetimeIndex から datetimelike を減算する際にオーバーフローに失敗する可能性があったバグ (GH 18020)

  • 非デフォルトの closed を持つ IntervalIndex をコピーする際の IntervalIndex.copy() のバグ (GH 18339)

  • DataFrame.to_dict() のバグで、タイムゾーン対応の datetime 列が orient='records' とともに使用されたときに、必要な配列に変換されず、TypeError が発生していました (GH 18372)

  • DateTimeIndexdate_range() のバグで、タイムゾーン対応の startend のタイムゾーンが一致しない場合に、end.tzinfo が None であればエラーが発生しませんでした (GH 18431)

  • Python 2 で長整数が渡されたときに例外を発生させていた Series.fillna() のバグ (GH 18159)。

インデックス付け#

  • datetime.datetimedatetime64[ns] dtype の Series のブール比較におけるバグ (GH 17965)

  • 100万件を超えるレコードを持つ MultiIndex が、存在しない属性にアクセスしようとしたときに AttributeError を発生させていなかったバグ (GH 18165)

  • 非デフォルトの closed を持つ間隔のリストが渡された場合の IntervalIndex コンストラクターのバグ (GH 18334)

  • 無効なマスクが渡された場合の Index.putmask のバグ (GH 18368)

  • timedelta64[ns] dtype の Series のマスク付き代入におけるバグで、誤って float に強制型変換されていました (GH 18493)

IO#

  • StataReader で、表示形式を持つ日付/時刻列が変換されないバグが修正されました (GH 17990)。以前は、表示形式を持つ列は通常、序数として扱われ、datetime オブジェクトに変換されませんでした。

  • 圧縮された UTF-16 エンコードファイルを読み込む際の read_csv() のバグ (GH 18071)

  • na_filter=False を指定したときにインデックス列の null 値を処理する read_csv() のバグ (GH 5239)

  • カーディナリティの高い数値カテゴリフィールドを読み込む際の read_csv() のバグ (GH 18186)

  • テーブルに MultiIndex 列があり、header に文字列のリストが渡された場合の DataFrame.to_csv() のバグ (GH 5539)

  • read_sql で指定された形式で整数 datetime 類似列を解析する際のバグ (GH 17855)。

  • numpy.bool_ データ型のデータをシリアル化する際の DataFrame.to_msgpack() のバグ (GH 18390)

  • S3 から行区切りの JSON を読み込む際にデコードしない read_json() のバグ (GH 17200)

  • meta の変更を避けるための pandas.io.json.json_normalize() のバグ (GH 18610)

  • to_latex() のバグで、上位レベルのインデックスが前の行と異なっていても、繰り返される MultiIndex 値が印刷されませんでした (GH 14484)

  • HDFStore で NaN のみを含むカテゴリ列を読み込む際のバグ (GH 18413)

  • longtable=True を使用した DataFrame.to_latex() のバグで、latex multicolumn が常に3列にまたがっていました (GH 17959)

プロット#

  • DatetimeIndex を使用した DataFrame.plot()Series.plot() のバグで、Python 3 で生成された図が pickleable ではありませんでした (GH 18439)

GroupBy/resample/rolling#

  • 異なる列を返す呼び出し可能オブジェクトがある場合の DataFrame.resample(...).apply(...) のバグ (GH 15169)

  • 時刻変更 (夏時間) があり、リサンプリング周波数が12時間以上の場合の DataFrame.resample(...) のバグ (GH 15549)

  • datetimelike 列のカウントにおける pd.DataFrameGroupBy.count() のバグ (GH 13393)

  • ゼロ値配列での計算が不正確だった rolling.var のバグ (GH 18430)

再整形#

  • pd.merge_asof() のキーデータ型不一致のエラーメッセージに、左キーと右キーのデータ型が含まれるようになりました (GH 18068)

  • 空の DataFrame と空でない DataFrame または Series が連結された場合の pd.concat のバグ (GH 18178 GH 18187)

  • Python 2 で unicode が条件として渡された場合の DataFrame.filter(...) のバグ (GH 13101)

  • np.seterr(divide='raise') が設定されている場合に空の DataFrame をマージする際のバグ (GH 17776)

数値#

  • すべての値が等しい場合の pd.Series.rolling.skew()rolling.kurt() の浮動小数点問題に関するバグ (GH 18044)

カテゴリカル#

  • 空の DataFrame で 'category' にキャストするとセグメンテーションフォールトが発生する DataFrame.astype() のバグ (GH 18004)

  • 項目が異なる CategoricalDtype を持つ場合のテストモジュールのエラーメッセージが改善されました (GH 18069)

  • CategoricalIndexpd.api.types.CategoricalDtype を dtype として正しく受け取れるようになりました (GH 18116)

  • すべてのカテゴリが NaN であった場合に読み取り専用の codes 配列を返していた Categorical.unique() のバグ (GH 18051)

  • CategoricalIndex を使用した DataFrame.groupby(axis=1) のバグ (GH 18432)

文字列#

  • Series.str.split() は、None の代わりに NaN 値をすべての展開された列に伝播するようになりました (GH 18450)

貢献者#

このリリースには合計46人がパッチを寄稿しました。名前に「+」が付いている人は初めてパッチを寄稿しました。

  • Aaron Critchley +

  • Alex Rychyk

  • Alexander Buchkovsky +

  • Alexander Michael Schade +

  • Chris Mazzullo

  • Cornelius Riemenschneider +

  • Dave Hirschfeld +

  • David Fischer +

  • David Stansby +

  • Dror Atariah +

  • Eric Kisslinger +

  • Hans +

  • Ingolf Becker +

  • Jan Werkmann +

  • ジェフ・リーバック

  • Joris Van den Bossche

  • Jörg Döpfert +

  • Kevin Kuhl +

  • Krzysztof Chomski +

  • Leif Walsh

  • Licht Takeuchi

  • Manraj Singh +

  • Matt Braymer-Hayes +

  • Michael Waskom +

  • Mie~~~ +

  • Peter Hoffmann +

  • Robert Meyer +

  • Sam Cohan +

  • Sietse Brouwer +

  • Sven +

  • Tim Swast

  • Tom Augspurger

  • ウェス・ターナー

  • William Ayd +

  • Yee Mey +

  • bolkedebruin +

  • cgohlke

  • derestle-htwg +

  • fjdiod +

  • gabrielclow +

  • ジーエフヤング

  • ghasemnaddaf +

  • jbrockmendel

  • jschendel

  • miker985 +

  • topper-123