2.1.0 の新機能 (2023 年 8 月 30 日)#

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

機能強化#

PyArrow は pandas 3.0 で必須の依存関係になります#

PyArrow は pandas 3.0 以降、pandas の必須の依存関係になります。この決定は PDEP 10 に基づいています。

これにより、pandas ユーザーに多大な利益をもたらすさらなる変更が可能になります。これには以下が含まれますが、これらに限定されません。

  • デフォルトで文字列を PyArrow のバックアップされた文字列として推論し、メモリフットプリントを大幅に削減し、パフォーマンスを大幅に向上させます。

  • デフォルトで Decimallistsbytesstructured data など、より複雑な dtype を PyArrow で推論します。

  • Apache Arrow に依存する他のライブラリとの相互運用性が向上します。

この決定に対するフィードバックはこちらで収集しています。

デフォルトで文字列に NumPy object dtype を使用しないようにします#

以前は、すべての文字列はデフォルトで NumPy object dtype を持つ列に格納されていました。このリリースでは、すべての文字列を dtype "string[pyarrow_numpy]" を持つ PyArrow のバックアップされた文字列として推論するオプション future.infer_string が導入されました。これは、比較操作で NumPy セマンティクスに従い、欠損値インジケーターとして np.nan を返す新しい文字列 dtype 実装です。このオプションを設定すると、dtype "string" も、オプション mode.string_storage の値に関係なく、ストレージが "pyarrow_numpy" に設定された StringDtype として推論されます。

このオプションは PyArrow がインストールされている場合にのみ機能します。PyArrow のバックアップされた文字列は、NumPy object と比較してメモリフットプリントが大幅に削減され、パフォーマンスが大幅に向上します (GH 54430)。

このオプションは、

pd.options.future.infer_string = True

で有効にできます。この動作は pandas 3.0 でデフォルトになります。

DataFrame の削減は拡張 dtype を保持します#

以前のバージョンの pandas では、DataFrame の削減 (DataFrame.sum() DataFrame.mean() など) の結果は、DataFrame が拡張 dtype であっても NumPy dtype を持っていました。pandas は、共通の dtype を持つ DataFrame 列に対する削減を行う際に、dtype を保持できるようになりました (GH 52788)。

以前の動作

In [1]: df = pd.DataFrame({"a": [1, 1, 2, 1], "b": [np.nan, 2.0, 3.0, 4.0]}, dtype="Int64")
In [2]: df.sum()
Out[2]:
a    5
b    9
dtype: int64
In [3]: df = df.astype("int64[pyarrow]")
In [4]: df.sum()
Out[4]:
a    5
b    9
dtype: int64

新しい動作

In [1]: df = pd.DataFrame({"a": [1, 1, 2, 1], "b": [np.nan, 2.0, 3.0, 4.0]}, dtype="Int64")

In [2]: df.sum()
Out[2]: 
a    5
b    9
dtype: Int64

In [3]: df = df.astype("int64[pyarrow]")

In [4]: df.sum()
Out[4]: 
a    5
b    9
dtype: int64[pyarrow]

以前は NumPy 整数 dtype であったのに対し、dtype がそれぞれマスクされた dtype と PyArrow dtype になったことに注目してください。

DataFrame の削減が拡張 dtype を保持できるようにするために、ExtensionArray._reduce() に新しいキーワードパラメータ keepdims が追加されました。keepdims=True を指定して ExtensionArray._reduce() を呼び出すと、削減軸に沿って長さ 1 の配列を返す必要があります。後方互換性を維持するために、このパラメータは必須ではありませんが、将来的には必須になります。シグネチャにこのパラメータが見つからない場合、DataFrame の削減は拡張 dtype を保持できません。また、このパラメータが見つからない場合、FutureWarning が発行され、mypy のような型チェッカーはシグネチャが ExtensionArray._reduce() と互換性がないと警告する可能性があります。

コピーオンライトの改善#

  • funcSeries をインプレースで変更する場合、Series.transform() がコピーオンライトを尊重しない (GH 53747)

  • Index.values() の呼び出しは、読み取り専用の NumPy 配列を返すようになりました (GH 53704)

  • DataFrameSeries を設定すると、ディープコピーではなくレイジーコピーが作成されるようになりました (GH 53142)

  • DataFrame コンストラクタは、Index オブジェクトの辞書から DataFrame を構築し、copy=False を指定した場合、DataFrame の列にそれらの Index オブジェクトのレイジーコピーを使用するようになりました (GH 52947)

  • Series または DataFrame のシャローコピー (df.copy(deep=False)) は、データのシャローコピーだけでなく、行/列 Index オブジェクトのシャローコピーも返すようになりました。つまり、結果のインデックスはもはや同一ではありません (df.copy(deep=False).index is df.index はもはや True ではありません) (GH 53721)

  • DataFrame.head() および DataFrame.tail() はディープコピーを返すようになりました (GH 54011)

  • DataFrame.eval() にレイジーコピーメカニズムを追加しました (GH 53746)

  • 一時的な列選択でインプレース操作を試みる (例: df["a"].fillna(100, inplace=True)) と、コピーオンライトが有効な場合は常に警告が発行されるようになりました。このモードでは、選択が一時的なコピーとして機能するため、このようなインプレース操作は機能しません。これは以下の場合に当てはまります。

    • DataFrame.update / Series.update

    • DataFrame.fillna / Series.fillna

    • DataFrame.replace / Series.replace

    • DataFrame.clip / Series.clip

    • DataFrame.where / Series.where

    • DataFrame.mask / Series.mask

    • DataFrame.interpolate / Series.interpolate

    • DataFrame.ffill / Series.ffill

    • DataFrame.bfill / Series.bfill

新しい DataFrame.map() メソッドと ExtensionArray のサポート#

DataFrame.map() が追加され、DataFrame.applymap() は非推奨になりました。DataFrame.map()DataFrame.applymap() と同じ機能を持っていますが、新しい名前は、これが Series.map()DataFrame 版であることをよりよく伝えています (GH 52353)。

呼び出し可能オブジェクトが与えられた場合、Series.map()Series のすべての要素に呼び出し可能オブジェクトを適用します。同様に、DataFrame.map()DataFrame のすべての要素に呼び出し可能オブジェクトを適用し、Index.map()Index のすべての要素に呼び出し可能オブジェクトを適用します。

多くの場合、呼び出し可能オブジェクトを配列の NaN ライクな値に適用することは望ましくなく、それを避けるために map メソッドを na_action="ignore"、つまり ser.map(func, na_action="ignore") で呼び出すことができます。しかし、多くの ExtensionArray および Index 型では na_action="ignore" が実装されておらず、nullable な数値型 (つまり、dtype が Int64 など) を除くすべての ExtensionArray サブクラスでは na_action="ignore" が正しく機能しませんでした。

na_action="ignore" はすべての配列型で機能するようになりました (GH 52219, GH 51645, GH 51809, GH 51936, GH 52033; GH 52096)。

以前の動作:

In [1]: ser = pd.Series(["a", "b", np.nan], dtype="category")
In [2]: ser.map(str.upper, na_action="ignore")
NotImplementedError
In [3]: df = pd.DataFrame(ser)
In [4]: df.applymap(str.upper, na_action="ignore")  # worked for DataFrame
     0
0    A
1    B
2  NaN
In [5]: idx = pd.Index(ser)
In [6]: idx.map(str.upper, na_action="ignore")
TypeError: CategoricalIndex.map() got an unexpected keyword argument 'na_action'

新しい動作:

In [5]: ser = pd.Series(["a", "b", np.nan], dtype="category")

In [6]: ser.map(str.upper, na_action="ignore")
Out[6]: 
0      A
1      B
2    NaN
dtype: category
Categories (2, object): ['A', 'B']

In [7]: df = pd.DataFrame(ser)

In [8]: df.map(str.upper, na_action="ignore")
Out[8]: 
     0
0    A
1    B
2  NaN

In [9]: idx = pd.Index(ser)

In [10]: idx.map(str.upper, na_action="ignore")
Out[10]: CategoricalIndex(['A', 'B', nan], categories=['A', 'B'], ordered=False, dtype='category')

また、Categorical.map() は暗黙的に na_action がデフォルトで "ignore" に設定されていたことに注意してください。これは非推奨となり、Categorical.map() のデフォルトは、他のすべての配列型と一貫して na_action=None に変更されます。

DataFrame.stack() の新しい実装#

pandas は DataFrame.stack() を再実装しました。新しい実装を使用するには、引数 future_stack=True を渡します。これは pandas 3.0 で唯一のオプションになります。

以前の実装には、主に2つの動作上の欠点がありました。

  1. 以前の実装では、結果に不必要な NA 値が導入されました。ユーザーは dropna=True (デフォルト) を渡すことで NA 値を自動的に削除できましたが、これを行うと、入力に存在した NA 値も結果から削除される可能性がありました。以下の例を参照してください。

  2. sort=True (デフォルト) を使用した以前の実装では、結果のインデックスの一部がソートされたり、ソートされなかったりすることがありました。入力の列が MultiIndex でない場合、結果のインデックスはソートされませんでした。列が MultiIndex の場合、ほとんどの場合、列レベルのスタッキングに由来する結果のインデックスのレベルはソートされました。まれに、列の作成方法によっては、そのようなレベルが非標準の順序でソートされることがありました。

新しい実装 (future_stack=True) では、複数のレベルをスタックする際に不必要な NA 値を導入せず、決してソートされません。そのため、future_stack=True を使用する場合、引数 dropnasort は使用されず、指定されていない状態を維持する必要があります。これらの引数は次のメジャーリリースで削除されます。

In [11]: columns = pd.MultiIndex.from_tuples([("B", "d"), ("A", "c")])

In [12]: df = pd.DataFrame([[0, 2], [1, 3]], index=["z", "y"], columns=columns)

In [13]: df
Out[13]: 
   B  A
   d  c
z  0  2
y  1  3

以前のバージョン (future_stack=False) では、dropna=True のデフォルトは不必要に導入された NA 値を削除しましたが、その過程で dtype を float64 に強制変換しました。新しいバージョンでは、NA は導入されないため、dtype の強制変換もありません。

In [14]: df.stack([0, 1], future_stack=False, dropna=True)
Out[14]: 
z  A  c    2.0
   B  d    0.0
y  A  c    3.0
   B  d    1.0
dtype: float64

In [15]: df.stack([0, 1], future_stack=True)
Out[15]: 
z  B  d    0
   A  c    2
y  B  d    1
   A  c    3
dtype: int64

入力に NA 値が含まれている場合、以前のバージョンは dropna=True でそれらも削除するか、dropna=False で新しい NA 値を導入しました。新しいバージョンは入力からのすべての値を保持します。

In [16]: df = pd.DataFrame([[0, 2], [np.nan, np.nan]], columns=columns)

In [17]: df
Out[17]: 
     B    A
     d    c
0  0.0  2.0
1  NaN  NaN

In [18]: df.stack([0, 1], future_stack=False, dropna=True)
Out[18]: 
0  A  c    2.0
   B  d    0.0
dtype: float64

In [19]: df.stack([0, 1], future_stack=False, dropna=False)
Out[19]: 
0  A  d    NaN
      c    2.0
   B  d    0.0
      c    NaN
1  A  d    NaN
      c    NaN
   B  d    NaN
      c    NaN
dtype: float64

In [20]: df.stack([0, 1], future_stack=True)
Out[20]: 
0  B  d    0.0
   A  c    2.0
1  B  d    NaN
   A  c    NaN
dtype: float64

その他の機能強化#

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

Python の最小バージョンが引き上げられました#

pandas 2.1.0 は Python 3.9 以降をサポートしています。

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

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

パッケージ

最小バージョン

必須

変更済み

numpy

1.22.4

X

X

mypy (開発)

1.4.1

X

beautifulsoup4

4.11.1

X

bottleneck

1.3.4

X

dataframe-api-compat

0.1.7

X

fastparquet

0.8.1

X

fsspec

2022.05.0

X

hypothesis

6.46.1

X

gcsfs

2022.05.0

X

jinja2

3.1.2

X

lxml

4.8.0

X

numba

0.55.2

X

numexpr

2.8.0

X

openpyxl

3.0.10

X

pandas-gbq

0.17.5

X

psycopg2

2.9.3

X

pyreadstat

1.1.5

X

pyqt5

5.15.6

X

pytables

3.7.0

X

pytest

7.3.2

X

python-snappy

0.6.1

X

pyxlsb

1.0.9

X

s3fs

2022.05.0

X

scipy

1.8.1

X

sqlalchemy

1.4.36

X

表計算

0.8.10

X

xarray

2022.03.0

X

xlsxwriter

3.0.3

X

zstandard

0.17.0

X

オプションライブラリについては、最新バージョンを使用することが一般的な推奨事項です。

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

その他の API の変更#

  • arrays.PandasArrayNumpyExtensionArray に名前が変更され、関連する dtype 名が PandasDtype から NumpyEADtype に変更されました。PandasArray のインポートは次のメジャーバージョンまで機能します (GH 53694)

非推奨#

setitem-like Series 操作でのサイレントアップキャストは非推奨になりました#

PDEP-6: https://pandas.dokyumento.jp/pdeps/0006-ban-upcasting.html

dtype をサイレントにアップキャストする Series (または DataFrame 列) の setitem-like 操作は非推奨となり、警告が表示されます。影響を受ける操作の例は次のとおりです。

  • ser.fillna('foo', inplace=True)

  • ser.where(ser.isna(), 'foo', inplace=True)

  • ser.iloc[indexer] = 'foo'

  • ser.loc[indexer] = 'foo'

  • df.iloc[indexer, 0] = 'foo'

  • df.loc[indexer, 'a'] = 'foo'

  • ser[indexer] = 'foo'

ここで、serSeriesdfDataFrameindexer はスライス、マスク、単一値、値のリストまたは配列、またはその他の許可されたインデクサーです。

将来のバージョンでは、これらはエラーを発生させるため、最初に共通の dtype にキャストする必要があります。

以前の動作:

In [1]: ser = pd.Series([1, 2, 3])

In [2]: ser
Out[2]:
0    1
1    2
2    3
dtype: int64

In [3]: ser[0] = 'not an int64'

In [4]: ser
Out[4]:
0    not an int64
1               2
2               3
dtype: object

新しい動作:

In [1]: ser = pd.Series([1, 2, 3])

In [2]: ser
Out[2]:
0    1
1    2
2    3
dtype: int64

In [3]: ser[0] = 'not an int64'
FutureWarning:
  Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas.
  Value 'not an int64' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.

In [4]: ser
Out[4]:
0    not an int64
1               2
2               3
dtype: object

現在の動作を維持するには、上記の場合、最初に serobject dtype にキャストすることができます。

In [21]: ser = pd.Series([1, 2, 3])

In [22]: ser = ser.astype('object')

In [23]: ser[0] = 'not an int64'

In [24]: ser
Out[24]: 
0    not an int64
1               2
2               3
dtype: object

使用例に応じて、別の dtype にキャストする方が適切な場合があります。以下の例では、float64 にキャストしています。

In [25]: ser = pd.Series([1, 2, 3])

In [26]: ser = ser.astype('float64')

In [27]: ser[0] = 1.1

In [28]: ser
Out[28]: 
0    1.1
1    2.0
2    3.0
dtype: float64

詳細については、https://pandas.dokyumento.jp/pdeps/0006-ban-upcasting.html を参照してください。

混合タイムゾーンを持つ日付時刻の解析は非推奨になりました#

ユーザーが to_datetime()utc=True を渡さない限り、混合タイムゾーンを持つ日付時刻の解析は非推奨となり、警告が表示されます (GH 50887)

以前の動作:

In [7]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]

In [8]:  pd.to_datetime(data, utc=False)
Out[8]:
Index([2020-01-01 00:00:00+06:00, 2020-01-01 00:00:00+01:00], dtype='object')

新しい動作:

In [9]: pd.to_datetime(data, utc=False)
FutureWarning:
  In a future version of pandas, parsing datetimes with mixed time zones will raise
  a warning unless `utc=True`. Please specify `utc=True` to opt in to the new behaviour
  and silence this warning. To create a `Series` with mixed offsets and `object` dtype,
  please use `apply` and `datetime.datetime.strptime`.
Index([2020-01-01 00:00:00+06:00, 2020-01-01 00:00:00+01:00], dtype='object')

この警告を抑制し、将来のバージョンの pandas でのエラーを回避するには、utc=True を指定してください。

In [29]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]

In [30]: pd.to_datetime(data, utc=True)
Out[30]: DatetimeIndex(['2019-12-31 18:00:00+00:00', '2019-12-31 23:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)

混合オフセットと object dtype を持つ Series を作成するには、applydatetime.datetime.strptime を使用してください。

In [31]: import datetime as dt

In [32]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]

In [33]: pd.Series(data).apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S%z'))
Out[33]: 
0    2020-01-01 00:00:00+06:00
1    2020-01-01 00:00:00+01:00
dtype: object

その他の非推奨事項#

パフォーマンス改善#

  • 同種の np.float64 または np.float32 dtype を持つ concat() のパフォーマンスが向上しました (GH 52685)

  • 文字列を含まないオブジェクト列に対する factorize() のパフォーマンスが向上しました (GH 51921)

  • リモート URI ファイルパスを読み込む際の read_orc() のパフォーマンスが向上しました (GH 51609)

  • engine="pyarrow" でリモートファイルを読み込む際の read_parquet() および DataFrame.to_parquet() のパフォーマンスが向上しました (GH 51609)

  • use_nullable_dtypes=True を使用した場合の文字列列に対する read_parquet() のパフォーマンスが向上しました (GH 47345)

  • DataFrame.clip() および Series.clip() のパフォーマンスが向上しました (GH 51472)

  • items が与えられた場合の DataFrame.filter() のパフォーマンスが向上しました (GH 52941)

  • 拡張配列 dtype に対する DataFrame.first_valid_index() および DataFrame.last_valid_index() のパフォーマンスが向上しました (GH 51549)

  • cond が拡張 dtype に対応している場合の DataFrame.where() のパフォーマンスが向上しました (GH 51574)

  • verify_integrity=True の場合の MultiIndex.set_levels() および MultiIndex.set_codes() のパフォーマンスが向上しました (GH 51873)

  • ascending がリストである場合の MultiIndex.sortlevel() のパフォーマンスが向上しました (GH 51612)

  • Series.combine_first() のパフォーマンスが向上しました (GH 51777)

  • 配列がnullを含まない場合の fillna() のパフォーマンスが向上しました (GH 51635)

  • 配列がゼロのnullまたはすべてのnullである場合の isna() のパフォーマンスが向上しました (GH 51630)

  • 文字列を boolean[pyarrow] dtype にパースする際のパフォーマンスが向上しました (GH 51730)

  • 他のインデックスからスライスされた Index を検索する際のパフォーマンスが向上しました (GH 51738)

  • concat() のパフォーマンスが向上しました (GH 52291GH 52290)

  • Period のデフォルトフォーマッタ (period_format) は大幅に (約2倍) 高速化されました。これにより、str(Period)repr(Period)Period.strftime(fmt=None)() のパフォーマンスが向上し、.PeriodArray.strftime(fmt=None).PeriodIndex.strftime(fmt=None).PeriodIndex.format(fmt=None) も改善されました。デフォルトの date_format を持つ PeriodArray または PeriodIndex を含む to_csv 操作も大幅に高速化されました (GH 51459)

  • arrays.IntegerArrays.dtypearrays.FloatingArray.dtype へのアクセスパフォーマンスが向上しました (GH 52998)

  • engine="numba" を使用した DataFrameGroupBy/SeriesGroupBy 集計 (例: DataFrameGroupBy.sum()) のパフォーマンスが向上しました (GH 53731)

  • axis=1 と拡張 dtype を持つ DataFrame リダクションのパフォーマンスが向上しました (GH 54341)

  • axis=None と拡張 dtype を持つ DataFrame リダクションのパフォーマンスが向上しました (GH 54308)

  • インデックス/列の値がすでにソートされている場合の MultiIndex および複数列操作 (例: DataFrame.sort_values()DataFrame.groupby()Series.unstack()) のパフォーマンスが向上しました (GH 53806)

  • Series リダクションのパフォーマンスが向上しました (GH 52341)

  • axis=1 でオブジェクトのインデックスが異なる場合の concat() のパフォーマンスが向上しました (GH 52541)

  • 連結軸が MultiIndex である場合の concat() のパフォーマンスが向上しました (GH 53574)

  • PyArrow バックアップの文字列に対する merge() のパフォーマンスが向上しました (GH 54443)

  • engine="c" を使用した read_csv() のパフォーマンスが向上しました (GH 52632)

  • ArrowExtensionArray.to_numpy() のパフォーマンスが向上しました (GH 52525)

  • DataFrameGroupBy.groups() のパフォーマンスが向上しました (GH 53088)

  • dtype が拡張 dtype である場合の DataFrame.astype() のパフォーマンスが向上しました (GH 54299)

  • 入力が単一の整数で、DataFrame が拡張 dtype でバックアップされている場合の DataFrame.iloc() のパフォーマンスが向上しました (GH 54508)

  • 拡張 dtype の DataFrame.isin() のパフォーマンスが向上しました (GH 53514)

  • 行と列を選択する場合の DataFrame.loc() のパフォーマンスが向上しました (GH 53014)

  • 単一の PyArrow dtype を持つ DataFrame を転置する際の DataFrame.transpose() のパフォーマンスが向上しました (GH 54224)

  • 単一のマスクされた dtype (例: Int64) を持つ DataFrame を転置する際の DataFrame.transpose() のパフォーマンスが向上しました (GH 52836)

  • PyArrow 文字列およびバイナリ dtype に対する Series.add() のパフォーマンスが向上しました (GH 53150)

  • 拡張 dtype に対する Series.corr() および Series.cov() のパフォーマンスが向上しました (GH 52502)

  • ArrowDtype に対する Series.drop_duplicates() のパフォーマンスが向上しました (GH 54667)。

  • PyArrow dtype を使用した Series.ffill()Series.bfill()DataFrame.ffill()DataFrame.bfill() のパフォーマンスが向上しました (GH 53950)

  • PyArrow バックアップの文字列に対する Series.str.get_dummies() のパフォーマンスが向上しました (GH 53655)

  • PyArrow バックアップの文字列に対する Series.str.get() のパフォーマンスが向上しました (GH 53152)

  • PyArrow バックアップの文字列に対して expand=True を使用した場合の Series.str.split() のパフォーマンスが向上しました (GH 53585)

  • dtype が NumPy 浮動小数点 dtype で na_valuenp.nan である場合の Series.to_numpy() のパフォーマンスが向上しました (GH 52430)

  • PyArrow のタイムスタンプまたは期間 dtype から NumPy に変換する際の astype() のパフォーマンスが向上しました (GH 53326)

  • さまざまな MultiIndex セットおよびインデックス操作のパフォーマンスが向上しました (GH 53955)

  • 不要な検証を回避することで、arrays.IntegerArray および arrays.FloatingArray での様々な再整形操作のパフォーマンスが向上しました (GH 53013)

  • PyArrow タイムスタンプおよび期間 dtype を使用したインデックス作成のパフォーマンスが向上しました (GH 53368)

  • 配列を RangeIndex.take()DataFrame.loc()、または DataFrame.iloc() に渡す場合、および DataFrame が RangeIndex を使用している場合のパフォーマンスが向上しました (GH 53387)

バグ修正#

カテゴリカル#

日付時刻ライク#

  • na_action="ignore" を使用した DatetimeIndex.map() が期待通りに動作するようになりました (GH 51644)

  • DatetimeIndex.slice_indexer() は、スライス境界のいずれかがインデックスにない非単調インデックスに対して KeyError を発生させるようになりました。この動作は以前非推奨でしたが、一貫して処理されていませんでした (GH 53983)

  • DateOffset オブジェクトを定数で乗算したときに一貫性のない動作をする DateOffset のバグを修正しました (GH 47953)

  • freqnanoseconds を持つ DateOffset であった場合の date_range() のバグを修正しました (GH 46877)

  • to_datetime() が PyArrow タイムスタンプの arrays.ArrowExtensionArray を含む Series または DataFrame を NumPy datetime に変換する際のバグを修正しました (GH 52545)

  • DatetimeArray.map() および DatetimeIndex.map() のバグで、指定された呼び出し可能オブジェクトが要素ごとではなく配列全体で動作する問題を修正しました (GH 51977)

  • PyArrow バックアップの日付のような dtype に対して DataFrame.to_sql()ValueError を発生させるバグを修正しました (GH 53854)

  • Timestamp.date()Timestamp.isocalendar()Timestamp.timetuple()、および Timestamp.toordinal() が、Python 標準ライブラリの datetime モジュールでサポートされている範囲外の入力に対して誤った結果を返すバグを修正しました (GH 53668)

  • Timestamp.round() のバグで、実装境界に近い値が OutOfBoundsDatetime を発生させる代わりに誤った結果を返す問題を修正しました (GH 51494)

  • datetime または timedelta スカラーから Series または DataFrame を構築する際に、入力から推論するのではなく常にナノ秒解像度を推論するバグを修正しました (GH 52212)

  • 日付なしの時間を表す文字列から Timestamp を構築する際に、誤った単位を推論するバグを修正しました (GH 54097)

  • ts_input=pd.NATimestamp を構築する際に TypeError が発生するバグを修正しました (GH 45481)

  • 曜日があるが日がない datetime 文字列 (例: "2023 Sept Thu") をパースする際に、誤って ValueError ではなく AttributeError が発生するバグを修正しました (GH 52659)

  • dtype がタイムゾーン対応の datetime でナノ秒以外の解像度を持つ場合に、Series の repr で OutOfBoundsDatetime が発生するバグを修正しました (GH 54623)

Timedelta#

  • TimedeltaIndex の除算または乗算で、.freqNone ではなく「0 Days」になるバグを修正しました (GH 51575)

  • NumPy timedelta64 オブジェクトを持つ Timedelta が適切に ValueError を発生させないバグを修正しました (GH 52806)

  • to_timedelta()pyarrow.durationArrowDtype を含む Series または DataFrame を NumPy timedelta64 に変換する際のバグを修正しました (GH 54298)

  • Timedelta.__hash__() のバグで、特定の大きな秒解像度の値で OutOfBoundsTimedelta が発生する問題を修正しました (GH 54037)

  • Timedelta.round() のバグで、実装境界に近い値が OutOfBoundsTimedelta を発生させる代わりに誤った結果を返す問題を修正しました (GH 51494)

  • na_action="ignore" を使用した TimedeltaIndex.map() のバグを修正しました (GH 51644)

  • arrays.TimedeltaArray.map() および TimedeltaIndex.map() のバグで、指定された呼び出し可能オブジェクトが要素ごとではなく配列全体で動作する問題を修正しました (GH 51977)

タイムゾーン#

  • タイムゾーン対応のタイムスタンプの Series に対して infer_freq()TypeError を発生させるバグを修正しました (GH 52456)

  • DatetimeTZDtype.base() が常にナノ秒解像度の NumPy dtype を返すバグを修正しました (GH 52705)

数値#

変換#

  • DataFrame.style.to_latex() および DataFrame.style.to_html() で、DataFrame が浮動小数点倍精度で表現できる桁数よりも多い桁数を持つ整数を含んでいる場合に発生するバグ (GH 52272)

  • array() で、単位が "s"、"us"、または "ms" の datetime64 または timedelta64 dtype が指定された場合、DatetimeArray または TimedeltaArray ではなく NumpyExtensionArray が返されるバグ (GH 52859)

  • array() で、空のリストと dtype が指定されなかった場合、FloatingArray ではなく NumpyExtensionArray が返されるバグ (GH 54371)

  • ArrowDtype.numpy_dtype() が、ナノ秒単位ではない pyarrow.timestamp および pyarrow.duration 型に対してナノ秒単位を返すバグ (GH 51800)

  • DataFrame.__repr__() が、列の dtype が np.record の場合に TypeError を誤って発生するバグ (GH 48526)

  • DataFrame.info()use_numba が設定されている場合に ValueError を発生するバグ (GH 51922)

  • DataFrame.insert()locnp.int64 の場合に TypeError を発生するバグ (GH 53193)

  • HDFStore.select() が、大きな整数を格納して取得する際に精度を失うバグ (GH 54186)

  • Series.astype()object_ をサポートしないバグ (GH 54251)

文字列#

  • Series.str() が反復されたときに TypeError を発生しなかったバグ (GH 54173)

  • 文字列 dtype の列を持つ DataFrame`repr のバグ (GH 54797)

Interval#

  • IntervalIndex.get_indexer() および IntervalIndex.get_indexer_nonunique()target が読み取り専用配列の場合に発生するバグ (GH 53703)

  • IntervalDtype で、オブジェクトが削除されたときに生き残る可能性があったバグ (GH 54184)

  • interval_range() で、float 型の step が浮動小数点アーティファクトから不正な間隔を生成するバグ (GH 54477)

インデックス付け#

  • DataFrame.__setitem__() が、重複する列に DataFrame を設定する際に dtype を失うバグ (GH 53143)

  • DataFrame.__setitem__() でブールマスクを使用し、DataFrame.putmask() で混合された非数値 dtype と NaN 以外の値を使用すると、誤って TypeError が発生するバグ (GH 53291)

  • DataFrame.iloc() で、唯一の要素として nan を使用した場合のバグ (GH 52234)

  • Series.loc() が、定義済みインデックスの object dtype の SeriesSeries を割り当てる際に、Seriesnp.dnarray にキャストするバグ (GH 48933)

欠損値#

MultiIndex#

I/O#

  • DataFrame.to_orc() が、デフォルト以外の Index が与えられた場合に ValueError を発生するようになりました (GH 51828)

  • DataFrame.to_sql() が、SQLAlchemy を使用して接続する際に name パラメータが空の場合に ValueError を発生するようになりました (GH 52675)

  • json_normalize() がメタデータフィールドのリスト型を解析できなかったバグ (GH 37782)

  • read_csv() で、parse_dates がリストまたは辞書に設定され、engine="pyarrow" が使用された場合にエラーが発生するバグ (GH 47961)

  • read_csv() で、engine="pyarrow"index_col を指定して dtype を指定した場合にエラーが発生するバグ (GH 53229)

  • read_hdf()IndexError が発生した後、ストアを適切に閉じないバグ (GH 52781)

  • read_html() で、スタイル要素が DataFrame に読み込まれるバグ (GH 52197)

  • read_html() で、display:none スタイルを含む要素とともに末尾のテキストが削除されるバグ (GH 51629)

  • read_sql_table() がビューを読み込む際に例外を発生するバグ (GH 52969)

  • read_sql() で、同じ列名を持つ複数のタイムゾーン対応列を読み込む場合のバグ (GH 44421)

  • read_xml() が文字列データの空白を削除するバグ (GH 53811)

  • DataFrame.to_html() で、マルチインデックス列の場合に colspace が誤って適用されるバグ (GH 53885)

  • DataFrame.to_html() で、複雑な dtype を持つ空の DataFrame の変換が ValueError を発生するバグ (GH 54167)

  • DataFrame.to_json() で、ナノ秒以外の精度を持つ DateTimeArray/DateTimeIndex が正しくシリアライズできないバグ (GH 53686)

  • 空の Stata dta ファイルを書き込み、読み込む際に dtype 情報が失われるバグ (GH 46240)

  • bz2 が必須要件として扱われていたバグ (GH 53857)

期間#

  • PeriodDtype コンストラクタが、引数が渡されなかった場合や None が渡された場合に TypeError を発生しないバグ (GH 27388)

  • PeriodDtype コンストラクタが、異なる DateOffset freq 入力に対して同じ normalize を誤って返すバグ (GH 24121)

  • PeriodDtype コンストラクタが、無効な型が渡された場合に TypeError ではなく ValueError を発生するバグ (GH 51790)

  • PeriodDtype で、オブジェクトが削除されたときに生き残る可能性があったバグ (GH 54184)

  • read_csv() で、engine="pyarrow" の場合に空文字列を null 値として処理しないバグ (GH 52087)

  • read_csv() で、engine="pyarrow" の場合に、すべての列が null の場合に float64 dtype の列ではなく object dtype の列を返すバグ (GH 52087)

  • Period.now()freq パラメータをキーワード引数として受け入れないバグ (GH 53369)

  • PeriodIndex.map()na_action="ignore" を使用した場合のバグ (GH 51644)

  • arrays.PeriodArray.map() および PeriodIndex.map() で、指定された呼び出し可能オブジェクトが要素ごとではなく配列ごとに動作するバグ (GH 51977)

  • CustomBusinessDay freq を持つ Period または PeriodDtype の構築を誤って許可していたバグ。代わりに BusinessDay を使用してください (GH 52534)

プロット#

Groupby/resample/rolling#

再整形#

スパース#

  • SparseDtype コンストラクタが、そのサブタイプ (NumPy dtype である必要がある) に互換性のない dtype が与えられた場合に TypeError を発生しないバグ (GH 53160)

  • arrays.SparseArray.map() が、fill 値を sparse 値に含めることを許可していたバグ (GH 52095)

ExtensionArray#

  • ArrowStringArray コンストラクタが、文字列の辞書型で ValueError を発生するバグ (GH 54074)

  • DataFrame コンストラクタが、dict で与えられた場合に拡張 dtype を持つ Series をコピーしないバグ (GH 53744)

  • ArrowExtensionArray が、pandas のナノ秒以外の時間オブジェクトを非ゼロ値からゼロ値に変換するバグ (GH 53171)

  • Series.quantile() で、PyArrow の時間型に対して ArrowInvalid を発生するバグ (GH 52678)

  • Series.rank() で、Float64 dtype の小さな値に対して誤った順序を返すバグ (GH 52471)

  • Series.unique() で、NA 値を持つブール型 ArrowDtype に対して発生するバグ (GH 54667)

  • __iter__() および __getitem__() が、ナノ秒以外の dtype に対して python の datetime および timedelta オブジェクトを返すバグ (GH 53326)

  • factorize() が、複数のチャンクを持つ pyarrow.dictionarypyarrow.chunked_array に対して不正なユニーク値を返すバグ (GH 54844)

  • ExtensionArray サブクラスを dtype キーワードに渡す場合のバグ。これはインスタンスを渡すことを推奨するために UserWarning を発生するようになりました (GH 31356, GH 54592)

  • DataFrame の repr が、列に pyarrow.ExtensionDtype を持つ ArrowDtype がある場合に機能しないバグ (GH 54063)

  • マスクされた ExtensionDtypes (例: Float64Dtype, BooleanDtype) の __from_arrow__ メソッドが、pyarrow.null() 型の PyArrow 配列を受け入れないバグ (GH 52223)

Styler#

  • Styler._copy() が、Styler のサブクラスでオーバーライドされたメソッドを呼び出すバグ (GH 52728)

メタデータ#

その他#

貢献者#

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

  • AG +

  • Aarni Koskela

  • Adrian D’Alessandro +

  • Adrien RUAULT +

  • Ahmad +

  • Aidos Kanapyanov +

  • Alex Malins

  • Alexander Seiler +

  • Ali Asgar +

  • Allison Kwan

  • Amanda Bizzinotto +

  • Andres Algaba +

  • Angela Seo +

  • Anirudh Hegde +

  • Antony Evmorfopoulos +

  • Anushka Bishnoi

  • ArnaudChanoine +

  • Artem Vorobyev +

  • Arya Sarkar +

  • Ashwin Srinath

  • Austin Au-Yeung +

  • Austin Burnett +

  • Bear +

  • Ben Mangold +

  • Bernardo Gameiro +

  • Boyd Kane +

  • Brayan Alexander Muñoz B +

  • Brock

  • Chetan0402 +

  • Chris Carini

  • ChristofKaufmann

  • Clark-W +

  • Conrad Mcgee Stocks

  • Corrie Bartelheimer +

  • Coulton Theuer +

  • D067751 +

  • ダニエル・アイザック

  • Daniele Nicolodi +

  • David Samuel +

  • David Seifert +

  • Dea Leon +

  • Dea María Léon

  • Deepyaman Datta

  • Denis Sapozhnikov +

  • Dharani Akurathi +

  • DimiGrammatikakis +

  • Dirk Ulbricht +

  • Dmitry Shemetov +

  • Dominik Berger

  • Efkan S. Goktepe +

  • Ege Özgüroğlu

  • Eli Schwartz

  • Erdi +

  • Fabrizio Primerano +

  • Facundo Batista +

  • ファンチェン・リー

  • Felipe Maion +

  • Francis +

  • Future Programmer +

  • Gabriel Kabbe +

  • Gaétan Ramet +

  • Gianluca Ficarelli

  • Godwill Agbehonou +

  • Guillaume Lemaitre

  • Guo Ci

  • Gustavo Vargas +

  • Hamidreza Sanaee +

  • HappyHorse +

  • Harald Husum +

  • Hugo van Kemenade

  • Ido Ronen +

  • アーブ・ラスティッグ

  • JHM ダービーシャー

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

  • JJ +

  • Jarrod Millman

  • Jay +

  • ジェフ・リーバック

  • Jessica Greene +

  • Jiawei Zhang +

  • Jinli Xiao +

  • Joanna Ge +

  • Jona Sassenhagen +

  • ヨナス・ハーグ

  • Joris Van den Bossche

  • Joshua Shew +

  • Julian Badillo

  • Julian Ortiz +

  • Julien Palard +

  • Justin Tyson +

  • Justus Magin

  • Kabiir Krishna +

  • Kang Su Min

  • Ketu Patel +

  • Kevin +

  • Kevin Anderson

  • Kevin Jan Anker

  • Kevin Klein +

  • ケビン・シェパード

  • Kostya Farber

  • LM +

  • Lars Lien Ankile +

  • Lawrence Mitchell

  • Liwei Cai +

  • Loic Diridollou

  • Luciana Solorzano +

  • Luke Manley

  • Lumberbot (aka Jack)

  • Marat Kopytjuk +

  • Marc Garcia

  • Marco Edward Gorelli

  • MarcoGorelli

  • Maria Telenczuk +

  • MarvinGravert +

  • Mateusz Sokół +

  • Matt Richards

  • Matthew Barber +

  • Matthew Roeschke

  • Matus Valo +

  • Mia Reimer +

  • Michael Terry +

  • Michael Tiemann +

  • Milad Maani Jou +

  • Miles Cranmer +

  • MirijaH +

  • Miyuu +

  • Natalia Mokeeva

  • Nathan Goldbaum +

  • Nicklaus Roach +

  • Nicolas Camenisch +

  • Nikolay Boev +

  • Nirav

  • Nishu Choudhary

  • ノア・タミール

  • Noy Hanan +

  • Numan +

  • Numan Ijaz +

  • Omar Elbaz +

  • Pandas Development Team

  • パーフェイト・ガサナ

  • Parthi

  • Patrick Hoefler

  • Patrick Schleiter +

  • Pawel Kranzberg +

  • Philip

  • Philip Meier +

  • Pranav Saibhushan Ravuri

  • PrathumP +

  • Rahul Siloniya +

  • Rajasvi Vinayak +

  • Rajat Subhra Mukherjee +

  • Ralf Gommers

  • RaphSku

  • Rebecca Chen +

  • Renato Cotrim Maciel +

  • Reza (Milad) Maanijou +

  • Richard Shadrach

  • Rithik Reddy +

  • Robert Luce +

  • Ronalido +

  • Rylie Wei +

  • SOUMYADIP MAL +

  • Sanjith Chockan +

  • Sayed Qaiser Ali +

  • Scott Harp +

  • Se +

  • Shashwat Agrawal

  • Simar Bassi +

  • Simon Brugman +

  • Simon Hawkins

  • Simon Høxbro Hansen

  • Snorf Yang +

  • Sortofamudkip +

  • Stefan Krawczyk

  • ステファニー・モリン

  • Stefanie Senger

  • Stelios Petrakis +

  • スティン・ヴァン・ホーイ

  • スヴェン

  • Sylvain MARIE

  • シルヴァン・マリー

  • テルジ・ピーターセン

  • ティエリー・モワザン

  • Thomas

  • トーマス・A・キャスウェル

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

  • Thomas Li

  • Thomas Vranken +

  • Tianye Song +

  • Tim Hoffmann

  • Tim Loderhose +

  • Tim Swast

  • Timon Jurschitsch +

  • Tolker-KU +

  • Tomas Pavlik +

  • Toroi +

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

  • Travis Gibbs +

  • Umberto Fasci +

  • Valerii +

  • VanMyHu +

  • Victor Momodu +

  • Vijay Vaidyanathan +

  • VomV +

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

  • ウィリアム・エイド

  • Wolf Behrenhoff +

  • Xiao Yuan

  • Yao Xiao

  • Yasin Tatar

  • Yaxin Li +

  • Yi Wei +

  • Yulia +

  • Yusharth Singh +

  • Zach Breger +

  • Zhengbo Wang

  • abokey1 +

  • ahmad2901 +

  • assafam +

  • auderson

  • august-tengland +

  • bunardsheng +

  • cmmck +

  • cnguyen-03 +

  • coco +

  • dependabot[bot]

  • giplessis +

  • github-actions[bot]

  • gmaiwald +

  • gmollard +

  • jbrockmendel

  • kathleenhang

  • kevx82 +

  • lia2710 +

  • liang3zy22 +

  • ltartaro +

  • lusolorz +

  • m-ganko +

  • mKlepsch +

  • mattkeanny +

  • mrastgoo +

  • nabdoni +

  • omar-elbaz +

  • paulreece +

  • penelopeysm +

  • potap75 +

  • pre-commit-ci[bot] +

  • raanasn +

  • raj-thapa +

  • ramvikrams +

  • レベッカ-パーマー

  • reddyrg1 +

  • rmhowe425 +

  • segatrade +

  • shteken +

  • sweisss +

  • taytzehao

  • tntmatthews +

  • tpaxman +

  • tzehaoo +

  • v-mcoutinho +

  • wcgonzal +

  • yonashub

  • yusharth +

  • Ádám Lippai

  • Štěpán Műller +