バージョン 0.16.2 (2015年6月12日)#

これは0.16.1からのマイナーなバグ修正リリースであり、多数のバグ修正に加え、いくつかの新機能(pipe() メソッド)、機能強化、パフォーマンス改善が含まれています。

すべてのユーザーはこのバージョンにアップグレードすることをお勧めします。

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

  • 新しい pipe メソッドについては、こちらを参照してください。

  • numbapandas で使用する方法に関するドキュメントは、こちらを参照してください。

新機能#

パイプ#

新しいメソッド DataFrame.pipe() を導入しました。名前が示すように、pipe は一連の関数呼び出しを通じてデータをパイプするために使用されます。目的は、以下のような紛らわしいネストされた関数呼び出しを避けることです。

# df is a DataFrame
# f, g, and h are functions that take and return DataFrames
f(g(h(df), arg1=1), arg2=2, arg3=3)  # noqa F821

ロジックは内側から外側へと流れ、関数名とキーワード引数は分離されています。これは次のように書き直すことができます。

(
    df.pipe(h)  # noqa F821
    .pipe(g, arg1=1)  # noqa F821
    .pipe(f, arg2=2, arg3=3)  # noqa F821
)

これで、コードとロジックの両方が上から下へと流れるようになりました。キーワード引数はその関数の隣にあります。全体として、コードははるかに読みやすくなりました。

上記の例では、関数 fg、および h はそれぞれDataFrameを最初の位置引数として期待していました。適用したい関数が最初の引数以外の場所でデータを取る場合、DataFrameが流れるべき場所を示す (function, keyword) のタプルを渡します。例えば、

In [1]: import statsmodels.formula.api as sm

In [2]: bb = pd.read_csv("data/baseball.csv", index_col="id")

# sm.ols takes (formula, data)
In [3]: (
...:     bb.query("h > 0")
...:     .assign(ln_h=lambda df: np.log(df.h))
...:     .pipe((sm.ols, "data"), "hr ~ ln_h + year + g + C(lg)")
...:     .fit()
...:     .summary()
...: )
...:
Out[3]:
<class 'statsmodels.iolib.summary.Summary'>
"""
                            OLS Regression Results
==============================================================================
Dep. Variable:                     hr   R-squared:                       0.685
Model:                            OLS   Adj. R-squared:                  0.665
Method:                 Least Squares   F-statistic:                     34.28
Date:                Tue, 22 Nov 2022   Prob (F-statistic):           3.48e-15
Time:                        05:35:23   Log-Likelihood:                -205.92
No. Observations:                  68   AIC:                             421.8
Df Residuals:                      63   BIC:                             432.9
Df Model:                           4
Covariance Type:            nonrobust
===============================================================================
                coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept   -8484.7720   4664.146     -1.819      0.074   -1.78e+04     835.780
C(lg)[T.NL]    -2.2736      1.325     -1.716      0.091      -4.922       0.375
ln_h           -1.3542      0.875     -1.547      0.127      -3.103       0.395
year            4.2277      2.324      1.819      0.074      -0.417       8.872
g               0.1841      0.029      6.258      0.000       0.125       0.243
==============================================================================
Omnibus:                       10.875   Durbin-Watson:                   1.999
Prob(Omnibus):                  0.004   Jarque-Bera (JB):               17.298
Skew:                           0.537   Prob(JB):                     0.000175
Kurtosis:                       5.225   Cond. No.                     1.49e+07
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.49e+07. This might indicate that there are
strong multicollinearity or other numerical problems.
"""

パイプメソッドは、Unixパイプに触発されており、プロセスを通じてテキストをストリームします。最近では、dplyrmagrittrR のための人気のある (%>%) パイプ演算子を導入しました。

詳細については、ドキュメントを参照してください。(GH 10129)

その他の機能強化#

  • Index/Series StringMethods に rsplit を追加しました (GH 10303)

  • IPythonノートブックにおける DataFrame HTML表現のハードコードされたサイズ制限を削除し、IPython自身に任せるようにしました (IPython v3.0以降のみ)。これにより、大きなフレームでノートブックに表示されていた重複するスクロールバーがなくなります (GH 10231)。

    ノートブックには、非常に大きなフレームの表示を制限するための toggle output scrolling 機能があります(出力の左側をクリック)。また、pandasオプションを使用してDataFrameの表示方法を設定することもできます。詳細についてはこちらを参照してください。

  • DataFrame.quantileaxis パラメータが index および column も受け入れるようになりました。(GH 9543)

APIの変更点#

  • Holiday は、コンストラクタで offsetobservance の両方が使用された場合に、誤った結果を返す代わりに NotImplementedError を発生させるようになりました (GH 10217)。

パフォーマンス改善#

  • dtype=datetime64[ns] での Series.resample のパフォーマンスを改善しました (GH 7754)

  • expand=True の場合の str.split のパフォーマンスを向上させました (GH 10081)

バグ修正#

  • 1行の Series が与えられたときに Series.hist でエラーが発生するバグを修正しました (GH 10214)

  • HDFStore.select が渡された列リストを変更するバグを修正しました (GH 7212)

  • Python 3 で display.widthNone の場合の Categorical repr のバグを修正しました (GH 10087)

  • 特定のオリエントと CategoricalIndex を持つ to_json でセグメンテーションフォールトを引き起こすバグを修正しました (GH 10317)

  • 一部のNaN関数で、戻り値のデータ型が一貫していないバグを修正しました (GH 10251)

  • DataFrame.quantile で有効な軸が渡されたことをチェックする際のバグを修正しました (GH 9543)

  • Categorical のカテゴリを保持しない groupby.apply 集計のバグを修正しました (GH 10138)

  • datetime が小数部を持つ場合、date_format が無視される to_csv のバグを修正しました (GH 10209)

  • 混合データ型を持つ DataFrame.to_json のバグを修正しました (GH 10289)

  • 統合時のキャッシュ更新のバグを修正しました (GH 10264)

  • mean() で整数データ型がオーバーフローする可能性のあるバグを修正しました (GH 10172)

  • Panel.from_dict が指定されたときに dtype を設定しないバグを修正しました (GH 10058)

  • Index.union が配列ライクなオブジェクトを渡すと AttributeError を発生させるバグを修正しました。(GH 10149)

  • Timestampmicrosecondquarterdayofyearweekdaysinmonth プロパティが組み込みの int ではなく np.int 型を返すバグを修正しました。(GH 10050)

  • NaTdaysinmonth, dayofweek プロパティにアクセスすると AttributeError が発生するバグを修正しました。(GH 10096)

  • max_seq_items=None の設定を使用している場合の Index repr のバグを修正しました (GH 10182)。

  • 様々なプラットフォームで dateutil を使用したタイムゾーンデータの取得に関するバグ (GH 9059, GH 8639, GH 9663, GH 10121)

  • 異なる頻度のdatetimeを表示する際のバグ。'ms' の datetime を適切な精度で表示するように修正しました。(GH 10170)

  • 型プロモーションがブロック全体に適用される setitem のバグを修正しました (GH 10280)

  • Series 算術メソッドが名前を誤って保持する可能性のあるバグを修正しました (GH 10068)

  • 複数のキー(そのうちの1つはカテゴリカル)でグループ化する際の GroupBy.get_group のバグを修正しました。(GH 10132)

  • DatetimeIndexTimedeltaIndex の名前が timedelta 算術後に失われるバグ (GH 9926)

  • datetime64 を含むネストされた dict から DataFrame を構築する際のバグを修正しました (GH 10160)

  • datetime64 キーを持つ dict から Series を構築する際のバグを修正しました (GH 9456)

  • Series.plot(label="LABEL") がラベルを正しく設定しないバグを修正しました (GH 10119)

  • plot が matplotlib axes.grid 設定にデフォルト設定されないバグを修正しました (GH 9792)

  • read_csvengine='python' において、指数を含むが小数点を含まない文字列が float ではなく int として解析されるバグを修正しました (GH 9565)

  • fill_value が指定されたときに Series.alignname をリセットするバグを修正しました (GH 10067)

  • read_csv で空のDataFrameにインデックス名が設定されないバグを修正しました (GH 10184)

  • SparseSeries.absname をリセットするバグを修正しました (GH 10241)

  • TimedeltaIndex のスライスが freq をリセットする可能性があるバグを修正しました (GH 10292)

  • グループキーに NaT が含まれている場合、GroupBy.get_groupValueError を発生させるバグを修正しました (GH 6992)

  • SparseSeries コンストラクタが入力データ名を無視するバグを修正しました (GH 10258)

  • Categorical.remove_categories で、基礎となる dtype が浮動小数点型の場合に NaN カテゴリを削除すると ValueError が発生するバグを修正しました (GH 10156)

  • infer_freq が to_offset でサポートされていない時間規則 (WOM-5XXX) を推論するバグを修正しました (GH 9425)

  • DataFrame.to_hdf() で、テーブル形式が無効な(文字列でない)列名に対して無関係に見えるエラーを発生させるバグを修正しました。これは明示的に禁止されました。(GH 9057)

  • 空の DataFrame のマスキングを処理するバグ (GH 10126) を修正しました。

  • MySQLインターフェースが数値のテーブル/カラム名を処理できないバグを修正しました (GH 10255)

  • read_csv で、datetime64 配列を [ns] 以外の時間分解能で返す date_parser があった場合のバグを修正しました (GH 10245)

  • 結果が ndim=0 の場合の Panel.apply のバグを修正しました (GH 10332)

  • read_hdfauto_close を渡すことができなかったバグを修正しました (GH 9327)。

  • read_hdf で開いているストアが使用できなかったバグを修正しました (GH 10330)。

  • 空の DataFrames の追加に関するバグ。現在は空の DataFrame.equals になる DataFrame になります (GH 10181)。

  • to_hdfHDFStore で、complib の選択が有効かどうかをチェックしていなかったバグを修正しました (GH 4582, GH 8874)。

貢献者#

このリリースには合計34名の方々がパッチを貢献しました。「+」が付いている方は今回初めてパッチを貢献された方です。

  • アンドリュー・ローゼンフェルド

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

  • バーナード・ウィラーズ +

  • クリスター・ファン・デル・ミーレン

  • クリスチャン・ユードン +

  • コンスタンティン・グレン・エバンス +

  • ダニエル・ジュリアス・ラシマン +

  • エヴァン・ライト

  • フランチェスコ・ブルンドゥ +

  • ガエタン・ド・メンテン +

  • ジェイク・ヴァンダープラス

  • ジェームズ・ヒーバート +

  • ジェフ・リーバック

  • Joris Van den Bossche

  • ジャスティン・レヒャー +

  • カ・ウォー・チェン +

  • ケビン・シェパード

  • モルタダ・メヒヤル

  • モートン・フォックス +

  • ロビン・ウィルソン +

  • Sinhrks

  • ステファン・ホイヤー

  • トーマス・グレンジャー

  • トム・アジャミアン

  • Tom Augspurger

  • ヨシキ・バスケス・バエザ

  • ヨンガン・キム

  • オーティンス +

  • behzad nouri

  • jreback

  • レクシュアル

  • レクキャーパシーラ +

  • scls19fr

  • sinhrks