1.5.0の新機能 (2022年9月19日)#

これらはpandas 1.5.0での変更点です。他のバージョンのpandasを含む変更点の完全なリストについては、リリースノートをご覧ください。

機能強化#

pandas-stubs#

pandas-stubsライブラリは現在pandas開発チームによってサポートされており、pandas APIの型スタブを提供しています。詳細については、pandas-dev/pandas-stubsをご覧ください。

pandas-stubsへの最初の重要な貢献をしてくださったVirtusLabとMicrosoftに感謝します。

ネイティブなPyArrowバックエンドのExtensionArray#

Pyarrowをインストールすると、ユーザーはpyarrow.ChunkedArraypyarrow.DataTypeによってバックアップされたpandasオブジェクトを作成できるようになりました。

dtype引数は、角括弧で囲まれたpyarrowを含むpyarrowデータ型の文字列、例:"int64[pyarrow]"を受け入れることができます。または、パラメーターを取るpyarrowデータ型の場合、pyarrow.DataTypeで初期化されたArrowDtypeを受け入れます。

In [1]: import pyarrow as pa

In [2]: ser_float = pd.Series([1.0, 2.0, None], dtype="float32[pyarrow]")

In [3]: ser_float
Out[3]: 
0     1.0
1     2.0
2    <NA>
dtype: float[pyarrow]

In [4]: list_of_int_type = pd.ArrowDtype(pa.list_(pa.int64()))

In [5]: ser_list = pd.Series([[1, 2], [3, None]], dtype=list_of_int_type)

In [6]: ser_list
Out[6]: 
0      [1. 2.]
1    [ 3. nan]
dtype: list<item: int64>[pyarrow]

In [7]: ser_list.take([1, 0])
Out[7]: 
1    [ 3. nan]
0      [1. 2.]
dtype: list<item: int64>[pyarrow]

In [8]: ser_float * 5
Out[8]: 
0     5.0
1    10.0
2    <NA>
dtype: float[pyarrow]

In [9]: ser_float.mean()
Out[9]: 1.5

In [10]: ser_float.dropna()
Out[10]: 
0    1.0
1    2.0
dtype: float[pyarrow]

ほとんどの操作はサポートされており、pyarrow compute関数を使用して実装されています。最近実装されたcompute関数にアクセスするには、最新バージョンのPyArrowをインストールすることをお勧めします。

警告

この機能は実験的であり、APIは将来のリリースで予告なく変更される可能性があります。

DataFrame交換プロトコルの実装#

PandasはDataFrame交換API仕様を実装しました。APIの完全な詳細については、https://data-apis.org/dataframe-protocol/latest/index.htmlをご覧ください。

このプロトコルは2つの部分で構成されています

  • 交換オブジェクトを生成する新しいメソッドDataFrame.__dataframe__()。これは、pandas DataFrameを交換オブジェクトとして効果的に「エクスポート」するため、プロトコルを実装している他のライブラリは、プロデューサーが交換オブジェクトを作成すること以外何も知らずにそのDataFrameを「インポート」できます。

  • 任意の適合ライブラリから任意の交換オブジェクトを受け取り、そこからpandas DataFrameを構築できる新しい関数pandas.api.interchange.from_dataframe()

Styler#

最も注目すべき開発は、データに関する追加の計算(合計やカウントなど)を視覚化するために、カスタマイズされたフッター行を追加できる新しいメソッドStyler.concat()です。(GH 43875GH 46186

さらに、Stylerのフォーマットメソッドを使用して、例えばCSVを作成できる代替出力メソッドStyler.to_string()もあります。(GH 44502

インデックスまたは列ヘッダーの表示を完全にカスタマイズできる新機能Styler.relabel_index()も利用可能になりました。(GH 47864

マイナーな機能改善点は以下の通りです。

  • Excelでborderおよびborder-{side} CSSプロパティをレンダリングする機能を追加しました。(GH 42276

  • キーワード引数を整合させました:Styler.highlight_null()colorを受け入れるようになり、null_colorは非推奨になりましたが、これは下位互換性を維持しています。(GH 45907

DataFrame.resample()group_keysによるインデックスの制御#

group_keys引数がDataFrame.resample()メソッドに追加されました。DataFrame.groupby()と同様に、この引数はResampler.apply()を使用するときに、各グループがリサンプルのインデックスに追加されるかどうかを制御します。

警告

group_keys引数を指定しない場合、以前の動作が維持され、group_keys=Falseを指定すると結果が変わる場合には警告が発せられます。将来のバージョンのpandasでは、group_keysを指定しない場合のデフォルトの動作はgroup_keys=Falseと同じになります。

In [11]: df = pd.DataFrame(
   ....:     {'a': range(6)},
   ....:     index=pd.date_range("2021-01-01", periods=6, freq="8H")
   ....: )
   ....:

In [12]: df.resample("D", group_keys=True).apply(lambda x: x)
Out[12]:
                                a
2021-01-01 2021-01-01 00:00:00  0
           2021-01-01 08:00:00  1
           2021-01-01 16:00:00  2
2021-01-02 2021-01-02 00:00:00  3
           2021-01-02 08:00:00  4
           2021-01-02 16:00:00  5

In [13]: df.resample("D", group_keys=False).apply(lambda x: x)
Out[13]:
                     a
2021-01-01 00:00:00  0
2021-01-01 08:00:00  1
2021-01-01 16:00:00  2
2021-01-02 00:00:00  3
2021-01-02 08:00:00  4
2021-01-02 16:00:00  5

以前は、次の例に見られるように、結果のインデックスはapplyによって返される値に依存していました。

In [1]: # pandas 1.3
In [2]: df.resample("D").apply(lambda x: x)
Out[2]:
                     a
2021-01-01 00:00:00  0
2021-01-01 08:00:00  1
2021-01-01 16:00:00  2
2021-01-02 00:00:00  3
2021-01-02 08:00:00  4
2021-01-02 16:00:00  5

In [3]: df.resample("D").apply(lambda x: x.reset_index())
Out[3]:
                           index  a
2021-01-01 0 2021-01-01 00:00:00  0
           1 2021-01-01 08:00:00  1
           2 2021-01-01 16:00:00  2
2021-01-02 0 2021-01-02 00:00:00  3
           1 2021-01-02 08:00:00  4
           2 2021-01-02 16:00:00  5

from_dummies#

ダミーコード化されたDataFrameをカテゴリカルなDataFrameに変換する新しい関数from_dummies()が追加されました。

In [11]: import pandas as pd

In [12]: df = pd.DataFrame({"col1_a": [1, 0, 1], "col1_b": [0, 1, 0],
   ....:                    "col2_a": [0, 1, 0], "col2_b": [1, 0, 0],
   ....:                    "col2_c": [0, 0, 1]})
   ....: 

In [13]: pd.from_dummies(df, sep="_")
Out[13]: 
  col1 col2
0    a    b
1    b    a
2    a    c

ORCファイルへの書き込み#

新しいメソッドDataFrame.to_orc()を使用すると、ORCファイルへの書き込みが可能になります(GH 43864)。

この機能はpyarrowライブラリに依存します。詳細については、ORCに関するIOドキュメントを参照してください。

警告

  • pyarrowで発生するいくつかの問題のため、condaを使用してpyarrowをインストールすることを強くお勧めします

  • to_orc()にはpyarrow>=7.0.0が必要です。

  • to_orc()はWindowsではまだサポートされていません。有効な環境についてはオプションの依存関係のインストールで確認できます。

  • サポートされているdtypeについては、ArrowでサポートされているORC機能を参照してください。

  • 現在、データフレームがORCファイルに変換される際、datetime列のタイムゾーンは保持されません。

df = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
df.to_orc("./out.orc")

TARアーカイブからの直接読み込み#

read_csv()DataFrame.to_json()などのI/Oメソッドは、TARアーカイブからの直接読み書きを可能にするようになりました。(GH 44787

df = pd.read_csv("./movement.tar.gz")
# ...
df.to_csv("./out.tar.gz")

これは.tar.tar.gz.tar.bz.tar.xz2アーカイブをサポートします。使用される圧縮方法はファイル名から推測されます。圧縮方法を推測できない場合は、compression引数を使用してください。

df = pd.read_csv(some_file_obj, compression={"method": "tar", "mode": "r:gz"}) # noqa F821

(modetarfile.openのモードのいずれかです:https://docs.python.org/3/library/tarfile.html#tarfile.open)

read_xmlがdtypeconvertersparse_datesをサポートするようになりました#

他のIOメソッドと同様に、pandas.read_xml()は、列に特定のdtypeを割り当てたり、コンバータメソッドを適用したり、日付を解析したりする機能をサポートするようになりました(GH 43567)。

In [14]: from io import StringIO

In [15]: xml_dates = """<?xml version='1.0' encoding='utf-8'?>
   ....: <data>
   ....:   <row>
   ....:     <shape>square</shape>
   ....:     <degrees>00360</degrees>
   ....:     <sides>4.0</sides>
   ....:     <date>2020-01-01</date>
   ....:    </row>
   ....:   <row>
   ....:     <shape>circle</shape>
   ....:     <degrees>00360</degrees>
   ....:     <sides/>
   ....:     <date>2021-01-01</date>
   ....:   </row>
   ....:   <row>
   ....:     <shape>triangle</shape>
   ....:     <degrees>00180</degrees>
   ....:     <sides>3.0</sides>
   ....:     <date>2022-01-01</date>
   ....:   </row>
   ....: </data>"""
   ....: 

In [16]: df = pd.read_xml(
   ....:     StringIO(xml_dates),
   ....:     dtype={'sides': 'Int64'},
   ....:     converters={'degrees': str},
   ....:     parse_dates=['date']
   ....: )
   ....: 

In [17]: df
Out[17]: 
      shape degrees  sides       date
0    square   00360      4 2020-01-01
1    circle   00360   <NA> 2021-01-01
2  triangle   00180      3 2022-01-01

In [18]: df.dtypes
Out[18]: 
shape              object
degrees            object
sides               Int64
date       datetime64[ns]
dtype: object

read_xmlはiterparseを使用して大規模なXMLをサポートするようになりました#

数百メガバイトからギガバイトに及ぶ非常に大きなXMLファイルの場合、pandas.read_xml()は、lxmlのiterparseおよびetreeのiterparseを使用してこのような大規模なファイルを解析する機能をサポートするようになりました。これらは、XMLツリー全体をメモリに保持することなく、XMLツリーを反復処理して特定の要素や属性を抽出するためのメモリ効率の良いメソッドです。(GH 45442

In [1]: df = pd.read_xml(
...      "/path/to/downloaded/enwikisource-latest-pages-articles.xml",
...      iterparse = {"page": ["title", "ns", "id"]})
...  )
df
Out[2]:
                                                     title   ns        id
0                                       Gettysburg Address    0     21450
1                                                Main Page    0     42950
2                            Declaration by United Nations    0      8435
3             Constitution of the United States of America    0      8435
4                     Declaration of Independence (Israel)    0     17858
...                                                    ...  ...       ...
3578760               Page:Black cat 1897 07 v2 n10.pdf/17  104    219649
3578761               Page:Black cat 1897 07 v2 n10.pdf/43  104    219649
3578762               Page:Black cat 1897 07 v2 n10.pdf/44  104    219649
3578763      The History of Tom Jones, a Foundling/Book IX    0  12084291
3578764  Page:Shakespeare of Stratford (1926) Yale.djvu/91  104     21450

[3578765 rows x 3 columns]

コピーオンライト#

新機能copy_on_writeが追加されました(GH 46958)。コピーオンライトは、何らかの方法で別のDataFrameまたはSeriesから派生したDataFrameまたはSeriesが常にコピーとして動作することを保証します。コピーオンライトは、メソッドが適用されたオブジェクト以外のオブジェクトの更新を許可しません。

コピーオンライトは以下で有効にできます。

pd.set_option("mode.copy_on_write", True)
pd.options.mode.copy_on_write = True

あるいは、コピーオンライトはローカルで以下のように有効にできます。

with pd.option_context("mode.copy_on_write", True):
    ...

コピーオンライトがない場合、子DataFrameがこのDataFrameから派生したものである場合、子DataFrameを更新すると、親DataFrameも更新されます。

In [19]: df = pd.DataFrame({"foo": [1, 2, 3], "bar": 1})

In [20]: view = df["foo"]

In [21]: view.iloc[0]
Out[21]: 1

In [22]: df
Out[22]: 
   foo  bar
0    1    1
1    2    1
2    3    1

コピーオンライトを有効にすると、dfは更新されなくなります。

In [23]: with pd.option_context("mode.copy_on_write", True):
   ....:     df = pd.DataFrame({"foo": [1, 2, 3], "bar": 1})
   ....:     view = df["foo"]
   ....:     view.iloc[0]
   ....:     df
   ....: 

より詳細な説明はこちらで確認できます。

その他の機能強化#

注目すべきバグ修正#

これらは、注目すべき動作変更をもたらす可能性のあるバグ修正です。

dropna=Truegroupby変換で使用する#

変換とは、結果が入力と同じサイズを持つ操作です。結果がDataFrameまたはSeriesである場合、結果のインデックスが入力のインデックスと一致することも必要です。pandas 1.4では、グループ内のnull値とdropna=Trueを伴うDataFrameGroupBy.transform()またはSeriesGroupBy.transform()の使用は正しくない結果をもたらしました。以下の例で示すように、正しくない結果には誤った値が含まれていたり、結果のインデックスが入力のインデックスと一致していなかったりしました。

In [24]: df = pd.DataFrame({'a': [1, 1, np.nan], 'b': [2, 3, 4]})

以前の動作:

In [3]: # Value in the last row should be np.nan
        df.groupby('a', dropna=True).transform('sum')
Out[3]:
   b
0  5
1  5
2  5

In [3]: # Should have one additional row with the value np.nan
        df.groupby('a', dropna=True).transform(lambda x: x.sum())
Out[3]:
   b
0  5
1  5

In [3]: # The value in the last row is np.nan interpreted as an integer
        df.groupby('a', dropna=True).transform('ffill')
Out[3]:
                     b
0                    2
1                    3
2 -9223372036854775808

In [3]: # Should have one additional row with the value np.nan
        df.groupby('a', dropna=True).transform(lambda x: x)
Out[3]:
   b
0  2
1  3

新しい動作:

In [25]: df.groupby('a', dropna=True).transform('sum')
Out[25]: 
     b
0  5.0
1  5.0
2  NaN

In [26]: df.groupby('a', dropna=True).transform(lambda x: x.sum())
Out[26]: 
     b
0  5.0
1  5.0
2  NaN

In [27]: df.groupby('a', dropna=True).transform('ffill')
Out[27]: 
     b
0  2.0
1  3.0
2  NaN

In [28]: df.groupby('a', dropna=True).transform(lambda x: x)
Out[28]: 
     b
0  2.0
1  3.0
2  NaN

iso_dates=Trueを使用してtz-naiveなTimestampsをto_json()でシリアル化する#

DataFrame.to_json()Series.to_json()、およびIndex.to_json()は、tz-naiveなタイムスタンプを持つDatetimeArrays/DatetimeIndexesをUTCに誤ってローカライズしていました。(GH 38760

このパッチは、tz-awareなタイムスタンプのシリアル化時にUTCへのローカライズを修正するものではないことに注意してください。(関連する問題GH 12997

以前の動作

In [32]: index = pd.date_range(
   ....:     start='2020-12-28 00:00:00',
   ....:     end='2020-12-28 02:00:00',
   ....:     freq='1H',
   ....: )
   ....:

In [33]: a = pd.Series(
   ....:     data=range(3),
   ....:     index=index,
   ....: )
   ....:

In [4]: from io import StringIO

In [5]: a.to_json(date_format='iso')
Out[5]: '{"2020-12-28T00:00:00.000Z":0,"2020-12-28T01:00:00.000Z":1,"2020-12-28T02:00:00.000Z":2}'

In [6]: pd.read_json(StringIO(a.to_json(date_format='iso')), typ="series").index == a.index
Out[6]: array([False, False, False])

新しい動作

In [34]: from io import StringIO

In [35]: a.to_json(date_format='iso')
Out[35]: '{"2020-12-28T00:00:00.000Z":0,"2020-12-28T01:00:00.000Z":1,"2020-12-28T02:00:00.000Z":2}'

# Roundtripping now works
In [36]: pd.read_json(StringIO(a.to_json(date_format='iso')), typ="series").index == a.index
Out[36]: array([ True,  True,  True])

非グループ化カテゴリカル列とobserved=Trueを持つDataFrameGroupBy.value_counts#

DataFrameGroupBy.value_counts()observed=Trueで呼び出すと、非グループ化列の観測されないカテゴリを誤って削除していました(GH 46357)。

In [6]: df = pd.DataFrame(["a", "b", "c"], dtype="category").iloc[0:2]
In [7]: df
Out[7]:
   0
0  a
1  b

以前の動作

In [8]: df.groupby(level=0, observed=True).value_counts()
Out[8]:
0  a    1
1  b    1
dtype: int64

新しい動作

In [9]: df.groupby(level=0, observed=True).value_counts()
Out[9]:
0  a    1
1  a    0
   b    1
0  b    0
   c    0
1  c    0
dtype: int64

下位互換性のない API の変更#

依存関係の最小バージョン引き上げ#

一部の依存関係の最小サポートバージョンが更新されました。インストールされている場合、以下のバージョンが必要になります。

パッケージ

最小バージョン

必須

変更済み

numpy

1.20.3

X

X

mypy (開発)

0.971

X

beautifulsoup4

4.9.3

X

blosc

1.21.0

X

bottleneck

1.3.2

X

fsspec

2021.07.0

X

仮説

6.13.0

X

gcsfs

2021.07.0

X

ジンジャーツー

3.0.0

X

lxml

4.6.3

X

numba

0.53.1

X

numexpr

2.7.3

X

openpyxl

3.0.7

X

pandas-gbq

0.15.0

X

psycopg2

2.8.6

X

pymysql

1.0.2

X

pyreadstat

1.1.2

X

pyxlsb

1.0.8

X

s3fs

2021.08.0

X

scipy

1.7.1

X

sqlalchemy

1.4.16

X

表計算

0.8.9

X

xarray

0.19.0

X

xlsxwriter

1.4.3

X

オプションのライブラリについては、一般的に最新バージョンを使用することが推奨されます。以下の表は、pandas の開発全体で現在テストされているライブラリごとの最低バージョンを示しています。最低テストバージョンより古いオプションのライブラリは動作する可能性がありますが、サポートされているとはみなされません。

パッケージ

最小バージョン

変更済み

beautifulsoup4

4.9.3

X

blosc

1.21.0

X

bottleneck

1.3.2

X

ブロトリピー

0.7.0

fastparquet

0.4.0

fsspec

2021.08.0

X

html5lib

1.1

仮説

6.13.0

X

gcsfs

2021.08.0

X

ジンジャーツー

3.0.0

X

lxml

4.6.3

X

matplotlib

3.3.2

numba

0.53.1

X

numexpr

2.7.3

X

odfpy

1.4.1

openpyxl

3.0.7

X

pandas-gbq

0.15.0

X

psycopg2

2.8.6

X

pyarrow

1.0.1

pymysql

1.0.2

X

pyreadstat

1.1.2

X

pytables

3.6.1

python-snappy

0.6.0

pyxlsb

1.0.8

X

s3fs

2021.08.0

X

scipy

1.7.1

X

sqlalchemy

1.4.16

X

表計算

0.8.9

X

tzdata

2022a

xarray

0.19.0

X

xlrd

2.0.1

xlsxwriter

1.4.3

X

xlwt

1.3.0

zstandard

0.15.2

詳細については、依存関係 および オプションの依存関係 を参照してください。

その他の API の変更#

  • BigQuery I/O メソッドread_gbq()DataFrame.to_gbq()は、デフォルトでauth_local_webserver = Trueになります。Googleはauth_local_webserver = False「帯域外」(コピー&ペースト)フローを非推奨にしました。auth_local_webserver = Falseオプションは2022年10月に機能しなくなる予定です。(GH 46312

  • read_json()は、入力が.json.json.gz.json.bz2などで終わる文字列であっても、そのようなファイルが存在しない場合にFileNotFoundError(以前はValueError)を発生させるようになりました。(GH 29102

  • TimestampまたはTimedeltaとの操作で以前にOverflowErrorを発生させていたものが、適切な場合にOutOfBoundsDatetimeまたはOutOfBoundsTimedeltaを発生させるようになりました(GH 47268)。

  • read_sas()が以前Noneを返していた場合、現在は空のDataFrameを返します(GH 47410)。

  • DataFrameコンストラクタは、indexまたはcolumns引数がセットである場合に例外を発生させます(GH 47215)。

非推奨#

警告

次期メジャーバージョンリリース2.0では、標準ライブラリzoneinfopytzの代わりにデフォルトのタイムゾーン実装にする、Indexが複数のサブクラス(CategoricalIndexInt64Indexなど)を持つ代わりにすべてのデータ型をサポートする、といった正式な非推奨化を伴わない大規模なAPI変更が検討されています。検討中の変更はこのGitHubイシューに記録されており、フィードバックや懸念は大歓迎です。

Int64IndexまたはRangeIndexを持つSeriesでのラベルベースの整数スライス#

将来のバージョンでは、Int64IndexまたはRangeIndexを持つSeriesに対する整数スライスは、位置ベースではなくラベルベースとして扱われるようになります。これにより、他のSeries.__getitem__()およびSeries.__setitem__()の動作との一貫性が保たれます(GH 45162)。

例えば

In [29]: ser = pd.Series([1, 2, 3, 4, 5], index=[2, 3, 5, 7, 11])

以前の動作では、ser[2:4]はスライスを位置ベースとして扱っていました。

以前の動作:

In [3]: ser[2:4]
Out[3]:
5    3
7    4
dtype: int64

将来のバージョンでは、これはラベルベースとして扱われます。

将来の動作:

In [4]: ser.loc[2:4]
Out[4]:
2    1
3    2
dtype: int64

以前の動作を維持するには、series.iloc[i:j]を使用します。将来の動作を取得するには、series.loc[i:j]を使用します。

DataFrameに対するスライスは影響を受けません。

ExcelWriter属性#

ExcelWriterのすべての属性は、以前は非公開として文書化されていました。しかし、一部のサードパーティExcelエンジンはExcelWriter.bookまたはExcelWriter.sheetsへのアクセスを文書化しており、ユーザーはこれらや他の属性を利用していました。以前はこれらの属性は安全に使用できませんでした。例えば、ExcelWriter.bookの変更はExcelWriter.sheetsを更新せず、その逆も同様でした。これをサポートするために、pandasは一部の属性を公開し、その実装を改善して、安全に使用できるようになりました。(GH 45572

以下の属性は現在公開されており、安全にアクセスできるとみなされます。

  • ブック

  • チェック拡張子

  • 閉じる

  • 日付フォーマット

  • 日時フォーマット

  • エンジン

  • if_sheet_exists

  • シート

  • 対応する拡張機能

以下の属性は非推奨になりました。これらはアクセス時にFutureWarningを発生させ、将来のバージョンで削除されます。ユーザーはこれらの使用が安全でないと見なされ、予期せぬ結果につながる可能性があることに注意してください。

  • cur_sheet

  • ハンドル

  • パス

  • 保存

  • 書き込みセル

詳細については、ExcelWriterのドキュメントを参照してください。

DataFrameGroupBy.apply()およびSeriesGroupBy.apply()でのトランスフォーマーによるgroup_keysの使用#

以前のバージョンのpandasでは、DataFrameGroupBy.apply()またはSeriesGroupBy.apply()に渡された関数がトランスフォーマー(つまり、結果のインデックスが入力インデックスと同じ)であると推論された場合、DataFrame.groupby()Series.groupby()group_keys引数は無視され、グループキーは結果のインデックスには追加されませんでした。将来は、ユーザーがgroup_keys=Trueを指定した場合に、グループキーがインデックスに追加されるようになります。

group_keys=TrueDataFrame.groupby()およびSeries.groupby()のデフォルト値であるため、トランスフォーマーでgroup_keysを指定しない場合、FutureWarningが発生します。group_keys=Falseを指定することで、この警告を抑制し、以前の動作を維持することができます。

locilocで値を設定する際のインプレース操作#

ほとんどの場合、DataFrame.iloc()で値を設定すると、インプレースで値を設定しようとし、必要に応じて新しい配列を挿入するにとどまります。このルールに従わないケースもあります。例えば、異なるdtypeを持つ配列から列全体を設定する場合などです。

In [30]: df = pd.DataFrame({'price': [11.1, 12.2]}, index=['book1', 'book2'])

In [31]: original_prices = df['price']

In [32]: new_prices = np.array([98, 99])

以前の動作:

In [3]: df.iloc[:, 0] = new_prices
In [4]: df.iloc[:, 0]
Out[4]:
book1    98
book2    99
Name: price, dtype: int64
In [5]: original_prices
Out[5]:
book1    11.1
book2    12.2
Name: price, float: 64

この動作は非推奨です。将来のバージョンでは、ilocで列全体を設定する際、インプレース操作が試行されます。

将来の動作:

In [3]: df.iloc[:, 0] = new_prices
In [4]: df.iloc[:, 0]
Out[4]:
book1    98.0
book2    99.0
Name: price, dtype: float64
In [5]: original_prices
Out[5]:
book1    98.0
book2    99.0
Name: price, dtype: float64

以前の動作を取得するには、DataFrame.__setitem__()を直接使用します。

In [3]: df[df.columns[0]] = new_prices
In [4]: df.iloc[:, 0]
Out[4]
book1    98
book2    99
Name: price, dtype: int64
In [5]: original_prices
Out[5]:
book1    11.1
book2    12.2
Name: price, dtype: float64

df.columnsが一意でなく、インデックスで単一の列を変更したい場合に以前の動作を得るには、pandas 1.5で追加されたDataFrame.isetitem()を使用できます。

In [3]: df_with_duplicated_cols = pd.concat([df, df], axis='columns')
In [3]: df_with_duplicated_cols.isetitem(0, new_prices)
In [4]: df_with_duplicated_cols.iloc[:, 0]
Out[4]:
book1    98
book2    99
Name: price, dtype: int64
In [5]: original_prices
Out[5]:
book1    11.1
book2    12.2
Name: 0, dtype: float64

numeric_onlyのデフォルト値#

DataFrameDataFrameGroupBy、およびResamplerの操作(minsumidxmaxなど)において、numeric_only引数が存在する場合のデフォルト値が一貫していませんでした。さらに、デフォルト値Noneでの操作は予期せぬ結果につながる可能性があります。(GH 46560

In [1]: df = pd.DataFrame({"a": [1, 2], "b": ["x", "y"]})

In [2]: # Reading the next line without knowing the contents of df, one would
        # expect the result to contain the products for both columns a and b.
        df[["a", "b"]].prod()
Out[2]:
a    2
dtype: int64

この動作を回避するため、numeric_only=Noneの指定は非推奨となり、将来のバージョンのpandasで削除されます。将来は、numeric_only引数を持つすべての操作のデフォルトはFalseになります。ユーザーは操作可能な列のみで操作を呼び出すか、Boolean、整数、および浮動小数点列のみで操作するためにnumeric_only=Trueを指定する必要があります。

新しい動作への移行をサポートするために、以下のメソッドにnumeric_only引数が追加されました。

その他の非推奨化#

  • DataFrame.to_csv()Series.to_csv()のキーワードline_terminatorを非推奨とし、代わりにlineterminatorを使用します。これはread_csv()および標準ライブラリの「csv」モジュールとの一貫性のためです(GH 9568)。

  • SparseArray.astype()Series.astype()、およびDataFrame.astype()が非スパースのdtypeを渡された際のSparseDtypeに関する動作が非推奨になりました。将来のバージョンでは、これはその非スパースdtypeにキャストされ、SparseDtypeでラップされるのではなく、変換がオーバーフローした場合は例外を発生させます(GH 34457)。

  • DatetimeIndex.intersection()およびDatetimeIndex.symmetric_difference()unionの動作はバージョン1.3.0で既に非推奨)の混合タイムゾーンでの動作が非推奨になりました。将来のバージョンでは、両方ともオブジェクトdtypeの代わりにUTCにキャストされるようになります(GH 39328GH 45357)。

  • DataFrame.iteritems()Series.iteritems()HDFStore.iteritems()は、DataFrame.items()Series.items()HDFStore.items()に置き換えられ非推奨となりました(GH 45321)。

  • Series.is_monotonic()およびIndex.is_monotonic()は、Series.is_monotonic_increasing()およびIndex.is_monotonic_increasing()に置き換えられ非推奨となりました(GH 45422GH 21335)。

  • DatetimeIndex.astype()TimedeltaIndex.astype()PeriodIndex.astype()int64以外の整数dtypeに変換する際の動作が非推奨になりました。将来のバージョンでは、これらは指定されたdtypeに正確に変換され(常にint64ではなく)、変換がオーバーフローした場合は例外を発生させます(GH 45034)。

  • DataFrameとSeriesの__array_wrap__メソッドは非推奨となり、代わりに標準のnumpy ufuncsを使用するようになりました(GH 45451)。

  • SeriesまたはDatetimeIndexにタイムゾーンとともに渡された浮動小数点型データを壁時計時間として扱う動作が非推奨になりました(GH 45573)。

  • Series.fillna()DataFrame.fillna()timedelta64[ns] dtypeと互換性のない埋め込み値で呼び出された場合の動作が非推奨になりました。将来のバージョンでは、他のdtypeの動作に合わせて、例外を発生させる代わりに共通のdtype(通常はオブジェクト)にキャストされます(GH 45746)。

  • infer_freq()warnパラメータが非推奨になりました(GH 45947)。

  • ExtensionArray.argsort()でキーワード以外の引数を許可する動作が非推奨になりました(GH 46134)。

  • DataFrame.any()およびDataFrame.all()bool_only=Trueを使用する際に、すべてがbool型のobject-dtype列をbool型として扱う動作が非推奨になりました。代わりに明示的にbool型にキャストしてください(GH 46188)。

  • メソッド DataFrame.quantile() の非推奨の動作で、属性 numeric_only がデフォルトで False になります。結果に datetime/timedelta 列が含まれるようになります (GH 7308)。

  • Timedelta.freq および Timedelta.is_populated は非推奨となりました (GH 46430)

  • Timedelta.delta は非推奨となりました (GH 46476)

  • DataFrame.any() および Series.any() で引数を位置指定で渡すことは非推奨となりました (GH 44802)

  • DataFrame.pivot() および pivot()data 以外の位置指定引数を渡すことは非推奨となりました (GH 30228)

  • メソッド DataFrame.mad()Series.mad() および対応する groupby メソッドは非推奨となりました (GH 11787)

  • Index.join()other 以外の位置指定引数は非推奨となりました。代わりにキーワード専用引数を使用してください (GH 46518)

  • StringMethods.rsplit() および StringMethods.split()pat 以外の位置指定引数は非推奨となりました。代わりにキーワード専用引数を使用してください (GH 47423)

  • タイムゾーン認識 datetime を表す文字列を使用して、タイムゾーン非対応の DatetimeIndex にインデックスを付けることは非推奨となりました (GH 46903, GH 36148)

  • Timestamp コンストラクタで、丸められていない浮動小数点値で unit="M" または unit="Y" を許可することは非推奨となりました (GH 47267)

  • display.column_space グローバル設定オプションは非推奨となりました (GH 7576)

  • factorize()Index.factorize()、および ExtensionArray.factorize() の引数 na_sentinel は非推奨となりました。NaN 値に番兵 -1 を使用するには use_na_sentinel=True を、NaN 値をエンコードするために na_sentinel=None の代わりに use_na_sentinel=False を渡してください (GH 46910)

  • UDF が DataFrame を返した場合に結果が整列されない DataFrameGroupBy.transform() は非推奨となりました (GH 45648)

  • to_datetime() からの警告が、指定された dayfirst 引数に従って区切られた日付を解析できない場合に明確化されました (GH 46210)

  • to_datetime() から、先行ゼロが省略されている日付 (例: 31/1/2001) であっても、指定された dayfirst 引数に従って区切られた日付を解析できない場合に警告が発せられるようになりました (GH 47880)

  • 非数値 dtype で numeric_only=True が指定された場合に NotImplementedError を発生させる Series および Resampler リデューサー (例: min, max, sum, mean) は非推奨となりました。これらは将来のバージョンで TypeError を発生させます (GH 47500)

  • 非数値 dtype で numeric_only=True が指定された場合に空の結果を返す Series.rank() は非推奨となりました。これらは将来のバージョンで TypeError を発生させます (GH 47500)

  • Series.mask()Series.where()DataFrame.mask()、および DataFrame.where() の引数 errors は、これらのメソッドに影響を与えなかったため非推奨となりました (GH 47728)

  • RollingExpanding、および ExponentialMovingWindow 演算の引数 *args および **kwargs は非推奨となりました (GH 47836)

  • Categorical.set_ordered()Categorical.as_ordered()、および Categorical.as_unordered()inplace キーワードは非推奨となりました (GH 37643)

  • cat.categories = ['a', 'b', 'c'] でカテゴリカルのカテゴリを設定することは非推奨となりました。代わりに Categorical.rename_categories() を使用してください (GH 37643)

  • Series.to_excel() および DataFrame.to_excel() の未使用の引数 encoding および verbose は非推奨となりました (GH 47912)

  • DataFrame.set_axis() および Series.set_axis()inplace キーワードは非推奨となりました。代わりに obj = obj.set_axis(..., copy=False) を使用してください (GH 48130)

  • 長さ 1 のリストでグループ化された DataFrameGroupBy または SeriesGroupBy を反復処理する際に単一の要素を生成することは非推奨となりました。代わりに長さ 1 のタプルが返されます (GH 42795)

  • 公開メソッドとしての MultiIndex.lesort_depth() の非推奨の警告メッセージが修正されました。以前は MultiIndex.is_lexsorted() を参照していました (GH 38701)

  • DataFrame.plot() および Series.plot()sort_columns 引数は非推奨となりました (GH 47563)。

  • DataFrame.to_stata() および read_stata() の最初の引数以外の位置指定引数は非推奨となりました。代わりにキーワード引数を使用してください (GH 48128)。

  • read_csv()read_fwf()read_table() および read_excel() の引数 mangle_dupe_cols は非推奨となりました。この引数は実装されたことがなく、代わりに名前変更パターンを指定できる新しい引数が追加される予定です (GH 47718)

  • Series.astype()dtype='datetime64' または dtype=np.datetime64 を許可することは非推奨となりました。代わりに "datetime64[ns]" を使用してください (GH 47844)

パフォーマンス改善#

バグ修正#

カテゴリカル#

  • Categorical.view() が整数 dtype を受け入れないバグ (GH 25464)

  • CategoricalIndex.union() で、インデックスのカテゴリが整数 dtype であり、インデックスに NaN 値が含まれる場合に、float64 にキャストされずに誤ってエラーが発生するバグ (GH 45362)

  • concat() で、カテゴリが順列である 2 つ (またはそれ以上) の順序なし CategoricalIndex 変数を連結すると、誤ったインデックス値が生成されるバグ (GH 24845)

日付時刻ライク#

  • DataFrame.quantile() で、datetime-like dtype と行がない場合に、datetime-like dtype を保持せずに誤って float64 dtype を返すバグ (GH 41544)

  • to_datetime() で、np.str_ オブジェクトのシーケンスを誤って発生させるバグ (GH 32264)

  • Timestamp コンストラクタで、datetime コンポーネントを位置引数として渡し、tzinfo をキーワード引数として渡すと誤ってエラーが発生するバグ (GH 31929)

  • Index.astype() で、オブジェクト dtype から timedelta64[ns] dtype にキャストする際に、np.datetime64("NaT") 値をエラーを発生させずに誤って np.timedelta64("NaT") にキャストするバグ (GH 45722)

  • カテゴリカル列を渡した場合の SeriesGroupBy.value_counts() インデックスのバグ (GH 44324)

  • DatetimeIndex.tz_localize() で UTC にローカライズする際に、基になるデータのコピーを作成できないバグ (GH 46460)

  • ナノ秒解像度のインデックスに対して DatetimeIndex.resolution() が "nanosecond" の代わりに誤って "day" を返すバグ (GH 46903)

  • Timestamp で、整数または浮動小数点値と unit="Y" または unit="M" を指定した場合にわずかに間違った結果を与えるバグ (GH 47266)

  • DatetimeArray コンストラクタで、別の DatetimeArrayfreq=None を渡した場合に、与えられた配列から誤って freq を推測するバグ (GH 47296)

  • to_datetime() で、50 行を超える場合に errors=coerce が指定されていても OutOfBoundsDatetime がスローされるバグ (GH 45319)

  • DateOffsetSeries に追加すると、nanoseconds フィールドが追加されないバグ (GH 47856)

Timedelta#

  • astype_nansafe() の astype("timedelta64[ns]") が np.nan が含まれている場合に失敗するバグ (GH 45798)

  • np.timedelta64 オブジェクトと unit を使用して Timedelta を構築する際に、OutOfBoundsTimedelta を発生させずに、時々サイレントオーバーフローして誤った結果を返すバグ (GH 46827)

  • 大きな整数または浮動小数点値と unit="W" を使用して Timedelta を構築する際に、OutOfBoundsTimedelta を発生させずに、サイレントオーバーフローして誤った結果を返すバグ (GH 47268)

タイムゾーン#

  • Timestamp コンストラクタで、ZoneInfo tzinfo オブジェクトを渡すとエラーが発生するバグ (GH 46425)

数値#

  • dtype="boolean" および NA を持つ配列ライクとの演算で、配列が誤ってインプレースで変更されるバグ (GH 45421)

  • NA 値のない null 許容型との算術演算が、非 null 許容型との同じ演算と一致しないバグ (GH 48223)

  • floordiv で、IntegerDtype 0 で除算すると inf の代わりに 0 が返されるバグ (GH 48223)

  • dtype="boolean" を持つ配列ライクでの除算、pow および mod 演算が、対応する np.bool_ と同様ではないバグ (GH 46063)

  • IntegerDtype または FloatingDtype を持つ Seriestimedelta64[ns] dtype を持つ配列ライクで乗算すると、誤ってエラーが発生するバグ (GH 45622)

  • mean() で、オプションの依存関係 bottleneck が配列の長さに比例する精度損失を引き起こすバグ。mean() に対して bottleneck は無効化され、損失は対数線形に改善されましたが、パフォーマンスが低下する可能性があります (GH 42878)

変換#

  • DataFrame.astype() がサブクラスを保持しないバグ (GH 40810)

  • 浮動小数点を含むリスト、または浮動小数点 dtype の ndarray ライク (例: dask.Array) から整数 dtype を持つ Series を構築する際に、np.ndarray の場合と同様にキャストせずにエラーが発生するバグ (GH 40110)

  • Float64Index.astype() で、符号なし整数 dtype にキャストする際に、誤って np.int64 dtype にキャストされるバグ (GH 45309)

  • Series.astype() および DataFrame.astype() で、浮動小数点 dtype から符号なし整数 dtype へのキャストで、負の値が存在する場合にエラーを発生させないバグ (GH 45151)

  • FloatingDtype と浮動小数点にキャスト可能な文字列を含む値を持つ array() で、誤ってエラーが発生するバグ (GH 45424)

  • 文字列と datetime64ns オブジェクトを比較する際に OverflowError 例外が発生するバグ (GH 45506)

  • 汎用抽象 dtype のメタクラスで、DataFrame.apply() および Series.apply() が組み込み関数 type に対してエラーを発生させるバグ (GH 46684)

  • DataFrame.to_records() で、インデックスが MultiIndex の場合に、一貫性のない numpy 型を返すバグ (GH 47263)

  • DataFrame.to_dict() で、orient="list" または orient="index" の場合にネイティブ型を返さないバグ (GH 46751)

  • DataFrame.apply() で、空の DataFrameaxis=1 を適用した場合に、Series の代わりに DataFrame を返すバグ (GH 39111)

  • NumPy の ndarray ではない、すべての NumPy 符号なし整数スカラーで構成されるイテラブルから dtype を推測する際に、符号なし整数 dtype にならないバグ (GH 47294)

  • DataFrame.eval() で、pandas オブジェクト (例: 'Timestamp') が列名である場合に発生するバグ (GH 44603)

文字列#

  • str.startswith() および str.endswith() で、他のシリーズをパラメータ _pat_ として使用するときのバグ。現在は TypeError を発生させます (GH 3485)

  • Series.str.zfill() で、文字列に先行符号が含まれる場合に、標準ライブラリの str.zfill と同様に符号文字の後に '0' を埋めるのではなく、符号文字の前に '0' を埋めるバグ (GH 20868)

Interval#

  • IntervalArray.__setitem__() で、整数バックアップ配列に np.nan を設定する際に、TypeError の代わりに ValueError を発生させるバグ (GH 45484)

  • IntervalDtype で、datetime64[ns, tz] を dtype 文字列として使用する際のバグ (GH 46999)

インデックス付け#

  • DataFrame.iloc() で、単一の ExtensionDtype 列を持つ DataFrame の単一行にインデックスを付けると、基になるデータのビューではなくコピーが返されるバグ (GH 45241)

  • DataFrame.__getitem__() で、DataFrame に重複する列がある場合でも、一意の列が選択されたときにコピーが返されるバグ (GH 45316, GH 41062)

  • Series.align() で、両方の MultiIndexes の交差部分が同一である場合に、レベルの結合で MultiIndex が作成されないバグ (GH 45224)

  • int ベースの IntervalDtype を持つ Series に NA 値 (None または np.nan) を設定する際に、float ベースの IntervalDtype にキャストされずに誤って object dtype にキャストされるバグ (GH 45568)

  • ExtensionDtype 列に df.iloc[:, i] = values で値を設定する際に、valuesdf.iloc[:, i] と同じ dtype を持つ場合に、インプレースで設定せずに誤って新しい配列が挿入されるバグ (GH 33457)

  • 非整数 Index を持つ Series.__setitem__() で、整数キーを使用してインプレースで設定できない値を設定する際に、共通の dtype にキャストされずに ValueError が発生するバグ (GH 45070)

  • DataFrame.loc() で、値をリストとして DataFrame に設定する際に、NoneNA にキャストしないバグ (GH 47987)

  • Series.__setitem__() で、PeriodDtype または IntervalDtype Series に互換性のない値を設定する際に、ブールマスクでインデックスを付けるとエラーが発生するが、それ以外の同等のインデクサーでインデックスを付けると強制変換されるバグ。これらは現在、Series.mask() および Series.where() とともに一貫して強制変換されます (GH 45768)

  • DataFrame.where() で、datetime-like dtype を持つ複数の列で、他の dtype と一貫したダウンキャストが行われないバグ (GH 45837)

  • isin() で、符号なし整数 dtype と dtype なしのリストライク引数で float64 にアップキャストされるバグ (GH 46485)

  • Series.loc.__setitem__() および Series.loc.__getitem__() で、MultiIndex を使用せずに複数のキーを使用した場合にエラーが発生しないバグ (GH 13831)

  • Index.reindex() で、level が指定されているにもかかわらず MultiIndex が与えられなかった場合に AssertionError が発生するバグ。レベルは現在無視されます (GH 35132)

  • Series の dtype に対して大きすぎる値を設定すると、共通の型に強制変換できないバグ (GH 26049, GH 32878)

  • loc.__setitem__() で、range キーがラベルベースではなく位置指定として扱われるバグ (GH 45479)

  • DataFrame.__setitem__() で、スカラーキーと DataFrame を値として設定する際に、拡張配列 dtype をオブジェクトにキャストするバグ (GH 46896)

  • Series.__setitem__() で、スカラーを null 許容 pandas dtype に設定する際に、スカラーが null 許容型に (損失なしで) キャストできない場合に TypeError を発生させないバグ (GH 45404)

  • Series.__setitem__() で、NA を含む boolean dtype 値を設定する際に、boolean dtype にキャストせずに誤ってエラーを発生させるバグ (GH 45462)

  • Series.loc() で、Index が一致しない場合に NA を含むブールインデクサーでエラーが発生するバグ (GH 46551)

  • Series.__setitem__() で、数値 dtype の SeriesNA を設定する際に、np.nan として値を扱わずに誤ってオブジェクト dtype にアップキャストするバグ (GH 44199)

  • DataFrame.loc() で、列に値を設定する際に右辺が辞書である場合のバグ (GH 47216)

  • Series.__setitem__() で、datetime64[ns] dtype、すべて False のブールマスク、および互換性のない値がある場合に、datetime64[ns] dtype を保持せずに誤って object にキャストするバグ (GH 45967)

  • Index.__getitem__() で、インデクサーが NA を含むブール dtype の場合に ValueError が発生するバグ (GH 45806)

  • Series.__setitem__() で、スカラーを使用して Series を拡張する際に精度が失われるバグ (GH 32346)

  • Series.mask() で、inplace=True を使用するか、小さな整数 dtype でブールマスクを使用して値を設定する際に誤ってエラーが発生するバグ (GH 45750)

  • DataFrame.mask() で、inplace=TrueExtensionDtype 列がある場合に誤ってエラーが発生するバグ (GH 45577)

  • datetime-like 値を持つ object-dtype 行インデックスを持つ DataFrame から列を取得する際のバグ: 結果の Series は、親 DataFrame からの正確な object-dtype Index を保持するようになりました (GH 42950)

  • DataFrame.__getattribute__() で、列が "string" dtype を持つ場合に AttributeError が発生するバグ (GH 46185)

  • DataFrame.compare() で、拡張配列 dtype と numpy dtype を比較する際に、すべての NaN 列を返すバグ (GH 44014)

  • DataFrame.where() で、numpy dtype の "boolean" マスクで間違った値を設定するバグ (GH 44014)

  • DatetimeIndex で、np.str_ キーでインデックスを付けると誤ってエラーが発生するバグ (GH 45580)

  • CategoricalIndex.get_indexer() で、インデックスに NaN 値が含まれる場合に、ターゲットに存在するがインデックスに存在しない要素が、-1 の代わりに NaN 要素のインデックスにマッピングされるバグ (GH 45361)

  • Seriesfloat32 または float16 dtype で大きな整数値を設定する際に、float64 dtype に強制変換されずにこれらの値が誤って変更されるバグ (GH 45844)

  • Series.asof() および DataFrame.asof() で、bool-dtype 結果が誤って float64 dtype にキャストされるバグ (GH 16063)

  • NDFrame.xs()DataFrame.iterrows()DataFrame.loc() および DataFrame.iloc() で、メタデータが常に伝播されないバグ (GH 28283)

  • DataFrame.sum() で、入力に NaN が含まれている場合に min_count が dtype を変更するバグ (GH 46947)

  • 無限再帰を引き起こす IntervalTree のバグ (GH 46658)

  • PeriodIndex で、NA にインデックスを付ける際に、NaT をその場所に配置せずに AttributeError が発生するバグ (GH 46673)

  • DataFrame.at() で、複数の列の変更を許可するバグ (GH 48296)

欠損値#

MultiIndex#

  • DataFrame.loc() で、負のステップサイズと非 null の start/stop 値で MultiIndex をスライスする際に、空の結果を返すバグ (GH 46156)

  • DataFrame.loc() で、-1 以外の負のステップサイズで MultiIndex をスライスする際にエラーが発生するバグ (GH 46156)

  • DataFrame.loc() で、負のステップサイズと非整数ラベルのインデックスレベルで MultiIndex をスライスする際にエラーが発生するバグ (GH 46156)

  • Series.to_numpy() で、na_value が指定された場合に、マルチインデックス Series を numpy 配列に変換できないバグ (GH 45774)

  • MultiIndex.equals において、いずれか一方の側のみが拡張配列 dtype を持っている場合、非可換となるバグ (GH 46026)

  • MultiIndex.from_tuples() が空のタプルの Index を構築できないバグ (GH 45608)

I/O#

  • DataFrame.to_stata() において、DataFrame-np.inf を含む場合にエラーが上がらないバグ (GH 45350)

  • read_excel() において、特定の skiprows 呼び出し可能オブジェクトで無限ループが発生するバグ (GH 45585)

  • DataFrame.info() において、空の DataFrame で呼び出された場合、出力の末尾の改行が省略されるバグ (GH 45494)

  • read_csv() において、engine="c"on_bad_lines="warn" の場合、改行を認識しないバグ (GH 41710)

  • DataFrame.to_csv() において、Float64 dtype で float_format が尊重されないバグ (GH 45991)

  • read_csv() において、すべてのケースでインデックス列に指定されたコンバーターが尊重されないバグ (GH 40589)

  • read_csv() において、index_col=False であっても2行目を Index 名として解釈するバグ (GH 46569)

  • read_parquet() において、engine="pyarrow" でサポートされていないデータ型の列が渡されたときに、ディスクへの部分的な書き込みを引き起こすバグ (GH 44914)

  • DataFrame.to_excel()ExcelWriter において、空の DataFrame を .ods ファイルに書き込むときに例外が発生するバグ (GH 45793)

  • read_csv() において、engine="python" で存在しないヘッダー行を無視するバグ (GH 47400)

  • read_excel() において、header が存在しない行を参照している場合に、制御不能な IndexError を発生させるバグ (GH 43143)

  • read_html() において、<br> を囲む要素がスペースなしで結合されるバグ (GH 29528)

  • read_csv() において、データがヘッダーよりも長い場合に、文字列を期待する usecols の呼び出し可能オブジェクトで問題が発生するバグ (GH 46997)

  • Parquet において、datetime64[ns] サブタイプを持つ Interval dtype のラウンドトリップでバグ (GH 45881)

  • read_excel() において、XML 要素間に改行がある .ods ファイルを読み込む際のバグ (GH 45598)

  • read_parquet() において、engine="fastparquet" でエラー時にファイルが閉じられないバグ (GH 46555)

  • DataFrame.to_html() は、border キーワードが False に設定されている場合、<table> 要素から border 属性を除外するようになりました。

  • read_sas() において、特定の種類の圧縮された SAS7BDAT ファイルでバグ (GH 35545)

  • read_excel() において、名前が与えられなかった場合に MultiIndex を前方フィルしないバグ (GH 47487)

  • read_sas() において、行数がゼロの SAS7BDAT ファイルに対して空の DataFrame ではなく None を返すバグ (GH 18198)

  • DataFrame.to_string() において、MultiIndex の拡張配列で間違った欠損値を使用するバグ (GH 47986)

  • StataWriter において、値ラベルが常にデフォルトエンコーディングで書き込まれるバグ (GH 46750)

  • StataWriterUTF8 において、一部の有効な文字が変数名から削除されるバグ (GH 47276)

  • DataFrame.to_excel() において、MultiIndex を持つ空のデータフレームを書き込む際のバグ (GH 19543)

  • read_sas() において、0x40 制御バイトを含む RLE 圧縮 SAS7BDAT ファイルでバグ (GH 31243)

  • read_sas() において、列名をスクランブルするバグ (GH 31243)

  • read_sas() において、0x00 制御バイトを含む RLE 圧縮 SAS7BDAT ファイルでバグ (GH 47099)

  • read_parquet() において、use_nullable_dtypes=True で Null 許容の Float64 dtype ではなく float64 dtype が返されるバグ (GH 45694)

  • DataFrame.to_json() において、PeriodDtyperead_json() で読み戻されたときにシリアル化ラウンドトリップを行わないバグ (GH 44720)

  • read_xml() において、中国語の文字タグを持つ XML ファイルを読み込むときに XMLSyntaxError を発生させるバグ (GH 47902)

期間#

  • PeriodArray から Period を減算すると間違った結果を返すバグ (GH 45999)

  • Period.strftime()PeriodIndex.strftime() において、ディレクティブ %l%u が間違った結果を返すバグ (GH 46252)

  • Period に1000の倍数であるマイクロ秒の文字列を渡すときに、誤った freq を推論するバグ (GH 46811)

  • Timestamp または np.datetime64 オブジェクトから、ナノ秒がゼロでなく freq="ns"Period を構築する際に、ナノ秒が誤って切り捨てられるバグ (GH 46811)

  • timedelta に似た freq を持つ Periodnp.timedelta64("NaT", "ns") を追加すると、NaT を返す代わりに IncompatibleFrequency が誤って発生するバグ (GH 47196)

  • PeriodDtype を持つ配列に整数の配列を追加すると、dtype.freq.n > 1 の場合に不正な結果を返すバグ (GH 47209)

  • PeriodDtype を持つ配列から Period を減算すると、操作がオーバーフローした場合に OverflowError を発生させる代わりに誤った結果を返すバグ (GH 47538)

プロット#

Groupby/resample/rolling#

再整形#

  • concat() において、整数 dtype の Series と整数カテゴリを持ち NaN 値を含む CategoricalDtype を持つ別の Series の連結で、float64 ではなく object dtype にキャストされるバグ (GH 45359)

  • get_dummies() において、object と categorical dtypes は選択されるが string は選択されないバグ (GH 44965)

  • DataFrame.align() において、MultiIndex を別の MultiIndex を持つ Series にアラインする際のバグ (GH 46001)

  • IntegerDtype または FloatingDtype 配列との連結で、結果の dtype が Null 許容ではない dtypes の動作を反映しないバグ (GH 46379)

  • concat() において、join="outer"sort=True の場合に列の dtype が失われるバグ (GH 47329)

  • concat() において、None が含まれている場合に列名がソートされないバグ (GH 47331)

  • concat() において、同一キーでの連結が MultiIndex のインデックス作成時にエラーにつながるバグ (GH 46519)

  • pivot_table() において、dropna=True で集計列が拡張配列 dtype の場合に TypeError を発生させるバグ (GH 47477)

  • merge() において、ssl ライブラリで FIPS モードを使用しているときに how="cross" でエラーが発生するバグ (GH 48024)

  • DataFrame.join() において、重複する列名を持つ DataFrame を結合するためにサフィックスを使用する場合、リストとの結合でバグ (GH 46396)

  • DataFrame.pivot_table() において、sort=False で結果がソートされたインデックスになるバグ (GH 17041)

  • concat() において、axis=1sort=False で、結果の Index が RangeIndex ではなく Int64Index になるバグ (GH 46675)

  • wide_to_long() において、columns に stubnames が欠落しており、i に文字列 dtype の列が含まれている場合に例外が発生するバグ (GH 46044)

  • DataFrame.join() において、カテゴリカルインデックスとの結合で予期しない並べ替えが発生するバグ (GH 47812)

スパース#

ExtensionArray#

  • IntegerArray.searchsorted()FloatingArray.searchsorted() において、np.nan に対して実行すると一貫性のない結果を返すバグ (GH 45255)

Styler#

  • 空の DataFrame サブセットにスタイル関数を適用しようとするときのバグ (GH 45313)

  • CSSToExcelConverter において、xlsxwriter エンジンでボーダースタイルなしでボーダー色が指定された場合に TypeError が発生するバグ (GH 42276)

  • Styler.set_sticky() において、ダークモードで白地に白いテキストが表示されるバグ (GH 46984)

  • Styler.to_latex() において、clines="all;data"DataFrame に行がない場合に UnboundLocalError が発生するバグ。 (GH 47203)

  • Styler.to_excel() において、xlsxwriter エンジンで vertical-align: middle; を使用する場合のバグ (GH 30107)

  • ブール型の列ラベルを持つ DataFrame にスタイルを適用する際のバグを修正 (GH 47838)

メタデータ#

その他#

貢献者#

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

  • Aadharsh Acharya +

  • Aadharsh-Acharya +

  • Aadhi Manivannan +

  • Adam Bowden

  • Aditya Agarwal +

  • Ahmed Ibrahim +

  • Alastair Porter +

  • Alex Povel +

  • Alex-Blade

  • Alexandra Sciocchetti +

  • AlonMenczer +

  • Andras Deak +

  • Andrew Hawyrluk

  • Andy Grigg +

  • Aneta Kahleová +

  • Anthony Givans +

  • Anton Shevtsov +

  • B. J. Potter +

  • BarkotBeyene +

  • Ben Beasley +

  • Ben Wozniak +

  • Bernhard Wagner +

  • Boris Rumyantsev

  • Brian Gollop +

  • CCXXXI +

  • Chandrasekaran Anirudh Bhardwaj +

  • Charles Blackmon-Luca +

  • Chris Moradi +

  • ChrisAlbertsen +

  • Compro Prasad +

  • DaPy15

  • Damian Barabonkov +

  • Daniel I +

  • Daniel Isaac +

  • Daniel Schmidt

  • Danil Iashchenko +

  • Dare Adewumi

  • Dennis Chukwunta +

  • Dennis J. Gray +

  • Derek Sharp +

  • Dhruv Samdani +

  • Dimitra Karadima +

  • Dmitry Savostyanov +

  • Dmytro Litvinov +

  • Do Young Kim +

  • Dries Schaumont +

  • Edward Huang +

  • Eirik +

  • Ekaterina +

  • Eli Dourado +

  • Ezra Brauner +

  • Fabian Gabel +

  • FactorizeD +

  • ファンチェン・リー

  • Francesco Romandini +

  • Greg Gandenberger +

  • Guo Ci +

  • Hiroaki Ogasawara

  • Hood Chatham +

  • Ian Alexander Joiner +

  • アーブ・ラスティッグ

  • Ivan Ng +

  • JHM ダービーシャー

  • JHM Darbyshire (MBP)

  • JHM ダービーシャー (iMac)

  • JMBurley

  • Jack Goldsmith +

  • James Freeman +

  • James Lamb

  • James Moro +

  • Janosh Riebesell

  • Jarrod Millman

  • Jason Jia +

  • ジェフ・リーバック

  • Jeremy Tuloup +

  • Johannes Mueller

  • John Bencina +

  • John Mantios +

  • John Zangwill

  • Jon Bramley +

  • ヨナス・ハーグ

  • Jordan Hicks

  • Joris Van den Bossche

  • Jose Ortiz +

  • JosephParampathu +

  • José Duarte

  • Julian Steger +

  • Kai Priester +

  • Kapil E. Iyer +

  • Karthik Velayutham +

  • Kashif Khan

  • Kazuki Igeta +

  • Kevin Jan Anker +

  • ケビン・シェパード

  • Khor Chean Wei

  • Kian Eliasi

  • Kian S +

  • Kim, KwonHyun +

  • Kinza-Raza +

  • Konjeti Maruthi +

  • Leonardus Chen

  • Linxiao Francis Cong +

  • Loïc Estève

  • LucasG0 +

  • Lucy Jiménez +

  • Luis Pinto

  • Luke Manley

  • Marc Garcia

  • Marco Edward Gorelli

  • マルコ・ゴレリ

  • MarcoGorelli

  • Margarete Dippel +

  • Mariam-ke +

  • Martin Fleischmann

  • Marvin John Walter +

  • Marvin Walter +

  • Mateusz

  • Matilda M +

  • Matthew Roeschke

  • Matthias Bussonnier

  • MeeseeksMachine

  • Mehgarg +

  • Melissa Weber Mendonça +

  • Michael Milton +

  • Michael Wang

  • Mike McCarty +

  • Miloni Atal +

  • Mitlasóczki Bence +

  • Moritz Schreiber +

  • Morten Canth Hels +

  • Nick Crews +

  • NickFillot +

  • Nicolas Hug +

  • Nima Sarang

  • Noa Tamir +

  • Pandas Development Team

  • パーフェイト・ガサナ

  • Parthi +

  • Partho +

  • Patrick Hoefler

  • Peter

  • Peter Hawkins +

  • Philipp A

  • Philipp Schaefer +

  • Pierrot +

  • Pratik Patel +

  • Prithvijit

  • Purna Chandra Mansingh +

  • Radoslaw Lemiec +

  • RaphSku +

  • Reinert Huseby Karlsen +

  • Richard Shadrach

  • Richard Shadrach +

  • Robbie Palmer

  • Robert de Vries

  • Roger +

  • Roger Murray +

  • Ruizhe Deng +

  • SELEE +

  • Sachin Yadav +

  • Saiwing Yeung +

  • Sam Rao +

  • Sandro Casagrande +

  • Sebastiaan Vermeulen +

  • Shaghayegh +

  • Shantanu +

  • Shashank Shet +

  • Shawn Zhong +

  • Shuangchi He +

  • Simon Hawkins

  • Simon Knott +

  • Solomon Song +

  • Somtochi Umeh +

  • Stefan Krawczyk +

  • ステファニー・モリン

  • Steffen Rehberg

  • Steven Bamford +

  • Steven Rotondo +

  • Steven Schaerer

  • Sylvain MARIE +

  • シルヴァン・マリー

  • Tarun Raghunandan Kaushik +

  • Taylor Packard +

  • テルジ・ピーターセン

  • ティエリー・モワザン

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

  • Thomas Hunter +

  • Thomas Li

  • Tim McFarland +

  • Tim Swast

  • Tim Yang +

  • Tobias Pitters

  • Tom Aarsen +

  • Tom Augspurger

  • トルステン・ヴェルトワイン

  • TraverseTowner +

  • Tyler Reddy

  • Valentin Iovene

  • Varun Sharma +

  • Vasily Litvinov

  • Venaturum

  • Vinicius Akira Imaizumi +

  • Vladimir Fokow +

  • Wenjun Si

  • Will Lachance +

  • ウィリアム・アンドレア

  • Wolfgang F. Riedl +

  • Xingrong Chen

  • Yago González

  • Yikun Jiang +

  • ユアンハオ・ゲン

  • Yuval +

  • Zero

  • Zhengfei Wang +

  • abmyii

  • alexondor +

  • alm

  • andjhall +

  • anilbey +

  • arnaudlegout +

  • asv-bot +

  • ateki +

  • auderson +

  • bherwerth +

  • bicarlsen +

  • carbonleakage +

  • charles +

  • charlogazzo +

  • code-review-doctor +

  • dataxerik +

  • deponovo

  • dimitra-karadima +

  • dospix +

  • ehallam +

  • ehsan shirvanian +

  • ember91 +

  • eshirvana

  • fractionalhare +

  • gaotian98 +

  • gesoos

  • github-actions[bot]

  • gunghub +

  • hasan-yaman

  • iansheng +

  • iasoon +

  • jbrockmendel

  • joshuabello2550 +

  • jyuv +

  • kouya takahashi +

  • mariana-LJ +

  • matt +

  • mattB1989 +

  • nealxm +

  • パルテフ

  • poloso +

  • realead

  • roib20 +

  • rtpsw

  • ryangilmour +

  • shourya5 +

  • srotondo +

  • stanleycai95 +

  • staticdev +

  • tehunter +

  • theidexisted +

  • tobias.pitters +

  • uncjackg +

  • vernetya

  • wany-oh +

  • wfr +

  • z3c0 +