バージョン 0.16.2 (2015年6月12日)#
これは0.16.1からのマイナーなバグ修正リリースであり、多数のバグ修正に加え、いくつかの新機能(pipe() メソッド)、機能強化、パフォーマンス改善が含まれています。
すべてのユーザーはこのバージョンにアップグレードすることをお勧めします。
主な機能は以下の通りです。
v0.16.2の新機能
新機能#
パイプ#
新しいメソッド 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
)
これで、コードとロジックの両方が上から下へと流れるようになりました。キーワード引数はその関数の隣にあります。全体として、コードははるかに読みやすくなりました。
上記の例では、関数 f、g、および 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パイプに触発されており、プロセスを通じてテキストをストリームします。最近では、dplyr と magrittr が R のための人気のある (%>%) パイプ演算子を導入しました。
詳細については、ドキュメントを参照してください。(GH 10129)
その他の機能強化#
Index/Series StringMethods に
rsplitを追加しました (GH 10303)IPythonノートブックにおける
DataFrameHTML表現のハードコードされたサイズ制限を削除し、IPython自身に任せるようにしました (IPython v3.0以降のみ)。これにより、大きなフレームでノートブックに表示されていた重複するスクロールバーがなくなります (GH 10231)。ノートブックには、非常に大きなフレームの表示を制限するための
toggle output scrolling機能があります(出力の左側をクリック)。また、pandasオプションを使用してDataFrameの表示方法を設定することもできます。詳細についてはこちらを参照してください。DataFrame.quantileのaxisパラメータがindexおよびcolumnも受け入れるようになりました。(GH 9543)
APIの変更点#
Holidayは、コンストラクタでoffsetとobservanceの両方が使用された場合に、誤った結果を返す代わりに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.widthがNoneの場合のCategoricalrepr のバグを修正しました (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)Timestampのmicrosecond、quarter、dayofyear、week、daysinmonthプロパティが組み込みのintではなくnp.int型を返すバグを修正しました。(GH 10050)NaTのdaysinmonth,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)DatetimeIndexとTimedeltaIndexの名前が timedelta 算術後に失われるバグ (GH 9926)datetime64を含むネストされたdictからDataFrameを構築する際のバグを修正しました (GH 10160)datetime64キーを持つdictからSeriesを構築する際のバグを修正しました (GH 9456)Series.plot(label="LABEL")がラベルを正しく設定しないバグを修正しました (GH 10119)plotが matplotlibaxes.grid設定にデフォルト設定されないバグを修正しました (GH 9792)read_csvのengine='python'において、指数を含むが小数点を含まない文字列がfloatではなくintとして解析されるバグを修正しました (GH 9565)fill_valueが指定されたときにSeries.alignがnameをリセットするバグを修正しました (GH 10067)read_csvで空のDataFrameにインデックス名が設定されないバグを修正しました (GH 10184)SparseSeries.absがnameをリセットするバグを修正しました (GH 10241)TimedeltaIndexのスライスが freq をリセットする可能性があるバグを修正しました (GH 10292)グループキーに
NaTが含まれている場合、GroupBy.get_groupがValueErrorを発生させるバグを修正しました (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_hdfでauto_closeを渡すことができなかったバグを修正しました (GH 9327)。read_hdfで開いているストアが使用できなかったバグを修正しました (GH 10330)。空の
DataFramesの追加に関するバグ。現在は空のDataFrameと.equalsになるDataFrameになります (GH 10181)。to_hdfとHDFStoreで、complib の選択が有効かどうかをチェックしていなかったバグを修正しました (GH 4582, GH 8874)。
貢献者#
このリリースには合計34名の方々がパッチを貢献しました。「+」が付いている方は今回初めてパッチを貢献された方です。
アンドリュー・ローゼンフェルド
アルテム・コルチンスキー
バーナード・ウィラーズ +
クリスター・ファン・デル・ミーレン
クリスチャン・ユードン +
コンスタンティン・グレン・エバンス +
ダニエル・ジュリアス・ラシマン +
エヴァン・ライト
フランチェスコ・ブルンドゥ +
ガエタン・ド・メンテン +
ジェイク・ヴァンダープラス
ジェームズ・ヒーバート +
ジェフ・リーバック
Joris Van den Bossche
ジャスティン・レヒャー +
カ・ウォー・チェン +
ケビン・シェパード
モルタダ・メヒヤル
モートン・フォックス +
ロビン・ウィルソン +
Sinhrks
ステファン・ホイヤー
トーマス・グレンジャー
トム・アジャミアン
Tom Augspurger
ヨシキ・バスケス・バエザ
ヨンガン・キム
オーティンス +
behzad nouri
jreback
レクシュアル
レクキャーパシーラ +
scls19fr
sinhrks