バージョン 0.17.1 (2015年11月21日)#

pandasがNumFOCUS組織の支援プロジェクトになったことを発表できることを誇りに思います(NumFOCUS組織)。これにより、世界クラスのオープンソースプロジェクトとしてのpandasの開発の成功が確実になります。

これは0.17.0からのマイナーなバグ修正リリースであり、多数のバグ修正に加え、いくつかの新機能、機能強化、パフォーマンス改善が含まれています。すべてのユーザーにこのバージョンへのアップグレードを推奨します。

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

  • 条件付きHTMLフォーマットのサポートについては、こちらを参照してください。

  • CSVリーダーおよびその他の操作でのGILの解放については、こちらを参照してください。

  • DataFrame.drop_duplicatesにおける0.16.2からのリグレッションが修正され、整数値で誤った結果を引き起こしていたバグが解決しました(GH 11376)。

新機能#

条件付きHTMLフォーマット#

警告

これは新しい機能であり、現在活発に開発中です。将来のリリースでは機能を追加したり、互換性のない変更を行う可能性があります。フィードバックはGH 11610で歓迎します。

条件付きHTMLフォーマット、つまりデータに基づいたDataFrameの視覚的なスタイル設定について、実験的なサポートが追加されました。スタイル設定はHTMLとCSSで行われます。データが添付されたStylerのインスタンスであるpandas.DataFrame.style属性を使用して、スタイラークラスにアクセスします。

簡単な例を次に示します。

In [1]: np.random.seed(123)

In [2]: df = pd.DataFrame(np.random.randn(10, 5), columns=list("abcde"))

In [3]: html = df.style.background_gradient(cmap="viridis", low=0.5)

HTMLをレンダリングして、次のテーブルを取得できます。

abcde
0 -1.085631 0.997345 0.282978 -1.506295 -0.5786
1 1.651437 -2.426679 -0.428913 1.265936 -0.86674
2 -0.678886 -0.094709 1.49139 -0.638902 -0.443982
3 -0.434351 2.20593 2.186786 1.004054 0.386186
4 0.737369 1.490732 -0.935834 1.175829 -1.253881
5 -0.637752 0.907105 -1.428681 -0.140069 -0.861755
6 -0.255619 -2.798589 -1.771533 -0.699877 0.927462
7 -0.173636 0.002846 0.688223 -0.879536 0.283627
8 -0.805367 -1.727669 -0.3909 0.573806 0.338589
9 -0.01183 2.392365 0.412912 0.978736 2.238143

StylerはJupyter Notebookとうまく連携します。詳細については、ドキュメントを参照してください。

機能強化#

  • DatetimeIndexastype(str)による文字列への変換をサポートしました (GH 10442)。

  • pandas.DataFrame.to_csv()におけるcompression (gzip/bz2) のサポート (GH 7615)。

  • pd.read_*関数は、filepath_or_buffer引数としてpathlib.Pathまたはpy:py._path.local.LocalPathオブジェクトも受け入れるようになりました。( GH 11033 ) - DataFrame および Series の関数 .to_csv().to_html() および .to_latex() が、チルダで始まるパス (例: ~/Documents/ ) を処理できるようになりました。( GH 11438 )

  • DataFrameは、列が指定されていない場合、namedtupleのフィールドを列として使用するようになりました(GH 11181)。

  • DataFrame.itertuples()は、可能な場合、namedtupleオブジェクトを返すようになりました。( GH 11269, GH 11625 )

  • 並行座標プロットにaxvlines_kwdsが追加されました(GH 10709)。

  • .info()および.memory_usage()に、メモリ消費量の詳細な内部検査を提供するオプションが追加されました。これは計算にコストがかかる場合があるため、オプションのパラメータであることに注意してください。( GH 11595 )

    In [4]: df = pd.DataFrame({"A": ["foo"] * 1000})  # noqa: F821
    
    In [5]: df["B"] = df["A"].astype("category")
    
    # shows the '+' as we have object dtypes
    In [6]: df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 1000 entries, 0 to 999
    Data columns (total 2 columns):
     #   Column  Non-Null Count  Dtype   
    ---  ------  --------------  -----   
     0   A       1000 non-null   object  
     1   B       1000 non-null   category
    dtypes: category(1), object(1)
    memory usage: 9.0+ KB
    
    # we have an accurate memory assessment (but can be expensive to compute this)
    In [7]: df.info(memory_usage="deep")
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 1000 entries, 0 to 999
    Data columns (total 2 columns):
     #   Column  Non-Null Count  Dtype   
    ---  ------  --------------  -----   
     0   A       1000 non-null   object  
     1   B       1000 non-null   category
    dtypes: category(1), object(1)
    memory usage: 59.9 KB
    
  • Indexfillnaメソッドが追加されました(GH 10089)。

    In [8]: pd.Index([1, np.nan, 3]).fillna(2)
    Out[8]: Index([1.0, 2.0, 3.0], dtype='float64')
    
  • category型のSeriesは、その型カテゴリである場合、.str.<...>および.dt.<...>アクセサーメソッド/プロパティを利用できるようになりました。( GH 10661 )

    In [9]: s = pd.Series(list("aabb")).astype("category")
    
    In [10]: s
    Out[10]: 
    0    a
    1    a
    2    b
    3    b
    Length: 4, dtype: category
    Categories (2, object): ['a', 'b']
    
    In [11]: s.str.contains("a")
    Out[11]: 
    0     True
    1     True
    2    False
    3    False
    Length: 4, dtype: bool
    
    In [12]: date = pd.Series(pd.date_range("1/1/2015", periods=5)).astype("category")
    
    In [13]: date
    Out[13]: 
    0   2015-01-01
    1   2015-01-02
    2   2015-01-03
    3   2015-01-04
    4   2015-01-05
    Length: 5, dtype: category
    Categories (5, datetime64[ns]): [2015-01-01, 2015-01-02, 2015-01-03, 2015-01-04, 2015-01-05]
    
    In [14]: date.dt.day
    Out[14]: 
    0    1
    1    2
    2    3
    3    4
    4    5
    Length: 5, dtype: int32
    
  • pivot_tablemargins_name引数が追加され、デフォルトの「All」以外のものを使用できるようになりました(GH 3335)。

  • 固定HDF5ストアによるdatetime64[ns, tz] dtypeのエクスポートを実装しました(GH 11411)。

  • セットの整形表示 (DataFrameセル内など) が、従来のPython構文 (set([x, y])) の代わりにセットリテラル構文 ({x, y}) を使用するようになりました。( GH 11215 )

  • pandas.io.gbq.to_gbq()でストリーミング挿入が失敗した場合(GH 11285)、およびDataFrameが宛先テーブルのスキーマと一致しない場合(GH 11359)のエラーメッセージを改善しました。

APIの変更点#

  • 非サポートのインデックスタイプの場合、Index.shiftNotImplementedErrorを発生させるようにしました(GH 8038)。

  • datetime64timedelta64 dtyped seriesのminmaxの削減が、nanではなくNaTを返すようになりました(GH 11245)。

  • nullキーによるインデックス付けは、ValueErrorではなくTypeErrorを発生させるようになりました(GH 11356)。

  • Series.ptpはデフォルトで欠損値を無視するようになりました(GH 11163)。

非推奨#

  • google-analyticsのサポートを実装しているpandas.io.gaモジュールは非推奨となり、将来のバージョンで削除されます(GH 11308)。

  • .to_csv()内のengineキーワードは非推奨となり、将来のバージョンで削除されます(GH 11274)。

パフォーマンス改善#

  • インデックスのソート前に単調性を確認するようにしました(GH 11080)。

  • Series.dropnaのパフォーマンスが向上しました。これは、dtypeがNaNを含まない場合です(GH 11159)。

  • ほとんどのdatetimeフィールド操作(例:DatetimeIndex.yearSeries.dt.year)、正規化、およびPeriodとの変換、DatetimeIndex.to_periodおよびPeriodIndex.to_timestampにおけるGILを解放しました(GH 11263)。

  • いくつかのローリングアルゴリズムでGILを解放しました: rolling_medianrolling_meanrolling_maxrolling_minrolling_varrolling_kurtrolling_skew (GH 11450)。

  • read_csvread_tableでテキストファイルを読み込み、パースする際にGILを解放しました(GH 11272)。

  • rolling_medianのパフォーマンスが向上しました(GH 11450)。

  • to_excelのパフォーマンスが向上しました(GH 11352)。

  • Categoricalカテゴリのreprにおけるパフォーマンスバグを修正しました。これは、表示のために文字列を切り詰める前にレンダリングしていました(GH 11305)。

  • Categorical.remove_unused_categoriesのパフォーマンスが向上しました(GH 11643)。

  • データなしでDatetimeIndexを持つSeriesコンストラクタのパフォーマンスが向上しました(GH 11433)。

  • groupbyにおけるshiftcumprod、およびcumsumのパフォーマンスが向上しました(GH 4095)。

バグ修正#

  • SparseArray.__iter__()はPython 3.5でPendingDeprecationWarningを引き起こさなくなりました(GH 11622)。

  • 0.16.2からの回帰である、長い浮動小数点数/NaNの出力フォーマットが(GH 11302)で復元されました。

  • Series.sort_index()inplaceオプションを正しく処理するようになりました(GH 11402)。

  • PyPiのビルドで、浮動小数点数のCSVを読み込み、na_values=<a scalar>を渡すと例外が発生する、誤って配布された.cファイル(GH 11374)を修正しました。

  • .to_latex()の出力が、インデックスに名前がある場合に壊れるバグを修正しました(GH 10660)。

  • HDFStore.appendで、エンコードされた長さがエンコードされていない最大長を超えた文字列を扱う際のバグを修正しました(GH 11234)。

  • datetime64[ns, tz] dtypeのマージに関するバグを修正しました(GH 11405)。

  • HDFStore.selectにおいて、where句でnumpyスカラーと比較する際のバグを修正しました(GH 11283)。

  • DataFrame.ixをMultiIndexインデクサーと共に使用する際のバグを修正しました(GH 11372)。

  • 曖昧なエンドポイントを持つdate_rangeのバグを修正しました(GH 11626)。

  • アクセサー.str.dt.catに新しい属性を追加するのを禁止しました。そのような値を取得することはできなかったため、設定時にエラーを発生させます。( GH 10673 )

  • 曖昧な時間と.dtアクセサーによるタイムゾーン変換のバグを修正しました(GH 11295)。

  • 曖昧な時間を持つインデックスを使用する際の出力フォーマットのバグを修正しました(GH 11619)。

  • Seriesとlist-likeオブジェクトの比較に関するバグを修正しました(GH 11339)。

  • DataFrame.replaceにおけるバグで、datetime64[ns, tz]と互換性のないto_replaceを使用すると発生していました(GH 11326, GH 11153)。

  • isnullにおけるバグを修正しました。numpy.array内のnumpy.datetime64('NaT')がnullと判定されていませんでした(GH 11206)。

  • Mixed-integer Indexを用いたリスト状インデックスのバグを修正しました(GH 11320)。

  • pivot_tableにおいて、インデックスがCategorical dtypeである場合にmargins=Trueを使用すると発生するバグを修正しました(GH 10993)。

  • DataFrame.plotが16進数文字列の色を使用できないバグを修正しました(GH 10299)。

  • DataFrame.drop_duplicatesにおける0.16.2からの回帰により、整数値で誤った結果が生じていたバグを修正しました(GH 11376)。

  • pd.evalにおけるバグで、リスト内の単項演算子がエラーを発生させていたものを修正しました(GH 11235)。

  • ゼロ長配列に対するsqueeze()のバグを修正しました(GH 11230, GH 8999)。

  • describe()が階層型インデックスの列名を削除するバグを修正しました(GH 11517)。

  • DataFrame.pct_change().fillnaメソッドでaxisキーワードを伝播しないバグを修正しました(GH 11150)。

  • columnsパラメータとして整数と文字列の列名が混在して渡された場合に.to_csv()で発生するバグを修正しました(GH 11637)。

  • rangeによるインデックス作成のバグを修正しました(GH 11652)。

  • numpyスカラーの推論と、列を設定する際のdtypeの保持に関するバグを修正しました(GH 11638)。

  • to_sqlがUnicodeの列名を使用するとUnicodeEncodeErrorを発生させるバグを修正しました(GH 11431)。

  • plotにおけるxticksの設定に関する回帰を修正しました(GH 11529)。

  • holiday.datesにおける、祝日に遵守規則を適用できないバグとドキュメントの改善を修正しました(GH 11477, GH 11533)。

  • SubplotAxesの代わりにプレーンなAxesインスタンスがある場合のプロットの問題を修正しました(GH 11520, GH 11556)。

  • DataFrame.to_latex()header=Falseの場合に余分な罫線を生成するバグを修正しました(GH 7124)。

  • df.groupby(...).apply(func)において、funcが新しい日付時刻のような列を含むSeriesを返す場合のバグを修正しました(GH 11324)。

  • ファイルサイズが大きい場合のpandas.jsonのバグを修正しました(GH 11344)。

  • 重複する列を持つto_excelのバグを修正しました(GH 11007, GH 10982, GH 10970)。

  • dtype datetime64[ns, tz] の空のシリーズ構築を妨げていたバグを修正しました(GH 11245)。

  • 整数を含むMultiIndexを持つread_excelのバグを修正しました(GH 11317)。

  • openpyxl 2.2以降でのマージに関するto_excelのバグを修正しました(GH 11408)。

  • DataFrame.to_dict()が、データにdatetimeのみが存在する場合にTimestampではなくnp.datetime64オブジェクトを生成するバグを修正しました(GH 11327)。

  • DataFrame.corr()が、ブール値と非ブール値の列を持つDataFrameに対してKendall相関を計算する際に例外を発生させるバグを修正しました(GH 11560)。

  • FreeBSD 10+ (with clang) におけるC inline 関数によって引き起こされるリンク時エラーのバグを修正しました。( GH 10510 )

  • DataFrame.to_csvにおける、MultiIndexesのフォーマットのための引数(date_formatを含む)の受け渡しに関するバグを修正しました(GH 7791)。

  • DataFrame.join()how='right'を使用するとTypeErrorが発生するバグを修正しました(GH 11519)。

  • Series.quantileで空のリストを渡すと、結果のIndexobject dtypeになるバグを修正しました(GH 11588)。

  • pd.mergeの結果が空の場合に、Index(dtype=object)ではなく空のInt64Indexが返されるバグを修正しました(GH 11588)。

  • NaN値がある場合のCategorical.remove_unused_categoriesのバグを修正しました(GH 11599)。

  • DataFrame.to_sparse()がMultiIndexesの列名を失うバグを修正しました(GH 11600)。

  • DataFrame.round()で非ユニークな列インデックスを使用すると致命的なPythonエラーが発生するバグを修正しました(GH 11611)。

  • DataFrame.round()で、decimalsが非ユニークなインデックスを持つSeriesである場合に余分な列が生成されるバグを修正しました(GH 11618)。

貢献者#

このリリースには合計63名がパッチを貢献しました。名前に「+」が付いている人は初めてパッチを貢献した人です。

  • アレクサンドル・ドロズド +

  • アレックス・チェイス +

  • Anthonios Partheniou

  • ブレンバーン +

  • ブライアン・J・マクギルク +

  • Chris

  • クリスチャン・ベレンツ +

  • クリスチャン・ペレス +

  • コーディ・ピアソール +

  • データとコードの専門家 コードとデータを実験中

  • ドリールフ +

  • エヴァン・ライト

  • ギョーム・ゲイ

  • ハメド・サルジュギネジャド +

  • イブリス・リン +

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

  • ヤン・シュルツ

  • ジャン=マチュー・デシェーヌ +

  • ジェフ・リーバック

  • ジミー・カリン +

  • Joris Van den Bossche

  • K.-Michael Aye

  • カ・ウォ・チェン

  • ロイク・セガン=C +

  • ルオ・イーチェン +

  • マグナス・ユード +

  • マヌエル・レオンハルト +

  • マシュー・ギルバート

  • Maximilian Roos

  • マイケル +

  • ニコラス・スタール +

  • ニコラス・ボノット +

  • パスタファリアニスト +

  • ペトラ・チョン +

  • フィル・シャフ +

  • フィリップ・A +

  • ロブ・デカルヴァーリョ +

  • ローマン・ホメンコ +

  • レミー・レオーネ +

  • セバスチャン・バンク +

  • Sinhrks

  • ステファン・ホイヤー

  • ティエリー・モワザン

  • Tom Augspurger

  • タックス1 +

  • ヴァルン +

  • ヴィーラント・ホフマン +

  • ウィンターフラワー

  • ヨアブ・ラム +

  • ヨンガン・キム

  • ゼケ +

  • ajcr

  • azuranski +

  • behzad nouri

  • cel4

  • エミリー・ドルソン +

  • hironow +

  • レクシュアル

  • llllllllll +

  • ロックg

  • サイレントクエーサー +

  • sinhrks

  • テオールド +