2.0.0 の新機能 (2023年4月3日)#

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

機能強化#

pip extras を使用したオプションの依存関係のインストール#

pip を使用して pandas をインストールする場合、extras を指定することで、オプションの依存関係のセットもインストールできます。

pip install "pandas[performance, aws]>=2.0.0"

インストールガイド にある利用可能な extras は、[all, performance, computation, fss, aws, gcp, excel, parquet, feather, hdf5, spss, postgresql, mysql, sql-other, html, xml, plot, output_formatting, clipboard, compression, test] です (GH 39164)。

Index が NumPy 数値 dtype を保持できるようになりました#

Index で任意の NumPy 数値 dtype を使用できるようになりました (GH 42717)。

以前は int64uint64float64 の dtype のみ使用可能でした。

In [1]: pd.Index([1, 2, 3], dtype=np.int8)
Out[1]: Int64Index([1, 2, 3], dtype="int64")
In [2]: pd.Index([1, 2, 3], dtype=np.uint16)
Out[2]: UInt64Index([1, 2, 3], dtype="uint64")
In [3]: pd.Index([1, 2, 3], dtype=np.float32)
Out[3]: Float64Index([1.0, 2.0, 3.0], dtype="float64")

Int64IndexUInt64Index、および Float64Index は pandas バージョン 1.4 で非推奨となり、現在は削除されています。代わりに Index を直接使用する必要があります。これは、すべての NumPy 数値 dtype、つまり int8/int16/int32/int64/uint8/uint16/uint32/uint64/float32/float64 の dtype を受け入れることができます。

In [1]: pd.Index([1, 2, 3], dtype=np.int8)
Out[1]: Index([1, 2, 3], dtype='int8')

In [2]: pd.Index([1, 2, 3], dtype=np.uint16)
Out[2]: Index([1, 2, 3], dtype='uint16')

In [3]: pd.Index([1, 2, 3], dtype=np.float32)
Out[3]: Index([1.0, 2.0, 3.0], dtype='float32')

Index が NumPy 数値 dtype を保持できるようになったことで、Pandas の機能にいくつかの変更が生じました。特に、以前は 64 ビットインデックスの作成を強制されていた操作が、より低いビットサイズ (例: 32 ビットインデックス) のインデックスを作成できるようになりました。

以下は、変更点の網羅的ではないリストです。

  1. NumPy 数値配列を使用してインスタンス化すると、NumPy 配列の dtype に従うようになりました。以前は、NumPy 数値配列から作成されたすべてのインデックスは 64 ビットに強制されていました。例えば、Index(np.array([1, 2, 3])) は、以前は 32 ビットシステムでも int64 でしたが、現在は 32 ビットシステムでは int32 になります。数値のリストを使用して Index をインスタンス化すると、以前と同様に 64 ビット dtype が返されます (例: Index([1, 2, 3])int64 dtype を持ちます)。

  2. DatetimeIndex の各種数値 datetime 属性 (daymonthyear など) は、以前は int64 の dtype でしたが、arrays.DatetimeArray の場合は int32 でした。これらは DatetimeIndex でも int32 になりました。

    In [4]: idx = pd.date_range(start='1/1/2018', periods=3, freq='ME')
    
    In [5]: idx.array.year
    Out[5]: array([2018, 2018, 2018], dtype=int32)
    
    In [6]: idx.year
    Out[6]: Index([2018, 2018, 2018], dtype='int32')
    
  3. Series.sparse.from_coo() からのインデックスのレベル dtype は、scipy スパース行列の rows/cols と同じ int32 の dtype になりました。以前は int64 の dtype でした。

    In [7]: from scipy import sparse
    
    In [8]: A = sparse.coo_matrix(
       ...:     ([3.0, 1.0, 2.0], ([1, 0, 0], [0, 2, 3])), shape=(3, 4)
       ...: )
       ...: 
    
    In [9]: ser = pd.Series.sparse.from_coo(A)
    
    In [10]: ser.index.dtypes
    Out[10]: 
    level_0    int32
    level_1    int32
    dtype: object
    
  4. Index は float16 dtype を使用してインスタンス化できません。以前は、dtype float16 を使用して Index をインスタンス化すると、float64 dtype を持つ Float64Index が生成されていました。現在は NotImplementedError が発生します。

    In [11]: pd.Index([1, 2, 3], dtype=np.float16)
    ---------------------------------------------------------------------------
    NotImplementedError                       Traceback (most recent call last)
    Cell In[11], line 1
    ----> 1 pd.Index([1, 2, 3], dtype=np.float16)
    
    File ~/work/pandas/pandas/pandas/core/indexes/base.py:577, in Index.__new__(cls, data, dtype, copy, name, tupleize_cols)
        573 arr = ensure_wrapped_if_datetimelike(arr)
        575 klass = cls._dtype_to_subclass(arr.dtype)
    --> 577 arr = klass._ensure_array(arr, arr.dtype, copy=False)
        578 result = klass._simple_new(arr, name, refs=refs)
        579 if dtype is None and is_pandas_object and data_dtype == np.object_:
    
    File ~/work/pandas/pandas/pandas/core/indexes/base.py:602, in Index._ensure_array(cls, data, dtype, copy)
        599     raise ValueError("Index data must be 1-dimensional")
        600 elif dtype == np.float16:
        601     # float16 not supported (no indexing engine)
    --> 602     raise NotImplementedError("float16 indexes are not supported")
        604 if copy:
        605     # asarray_tuplesafe does not always copy underlying data,
        606     #  so need to make sure that this happens
        607     data = data.copy()
    
    NotImplementedError: float16 indexes are not supported
    

引数 dtype_backend、pyarrow-backed または numpy-backed nullable dtype を返す#

以下の関数に新しいキーワード dtype_backend が追加されました (GH 36712)。

このオプションが "numpy_nullable" に設定されている場合、nullable dtype によってバックアップされた DataFrame を返します。

このキーワードが "pyarrow" に設定されている場合、これらの関数は pyarrow-backed nullable ArrowDtype DataFrame を返します (GH 48957GH 49997)。

In [12]: import io

In [13]: data = io.StringIO("""a,b,c,d,e,f,g,h,i
   ....:     1,2.5,True,a,,,,,
   ....:     3,4.5,False,b,6,7.5,True,a,
   ....: """)
   ....: 

In [14]: df = pd.read_csv(data, dtype_backend="pyarrow")

In [15]: df.dtypes
Out[15]: 
a     int64[pyarrow]
b    double[pyarrow]
c      bool[pyarrow]
d    string[pyarrow]
e     int64[pyarrow]
f    double[pyarrow]
g      bool[pyarrow]
h    string[pyarrow]
i      null[pyarrow]
dtype: object

In [16]: data.seek(0)
Out[16]: 0

In [17]: df_pyarrow = pd.read_csv(data, dtype_backend="pyarrow", engine="pyarrow")

In [18]: df_pyarrow.dtypes
Out[18]: 
a     int64[pyarrow]
b    double[pyarrow]
c      bool[pyarrow]
d    string[pyarrow]
e     int64[pyarrow]
f    double[pyarrow]
g      bool[pyarrow]
h    string[pyarrow]
i      null[pyarrow]
dtype: object

Copy-on-Write の改善#

  • Copy-on-Write の最適化 にリストされているメソッドに、対象のオブジェクトが変更されるまでコピーを遅延させる新しい遅延コピーメカニズムが追加されました。これらのメソッドは、Copy-on-Write が有効になっている場合、ビューを返し、通常の実行と比較して大幅なパフォーマンス向上を実現します (GH 49473)。

  • DataFrame の単一列を Series としてアクセスする (例: df["col"]) と、Copy-on-Write が有効になっている場合、毎回新しいオブジェクトが返されるようになりました (同一のキャッシュされた Series オブジェクトが複数回返されることはありません)。これにより、これらの Series オブジェクトが Copy-on-Write ルールに正しく従うことが保証されます (GH 49450)。

  • Series コンストラクタは、既存の Series から Series を構築する際に、デフォルトの copy=False で遅延コピー (データの変更が発生するまでコピーを遅延) を作成するようになりました (GH 50471)。

  • DataFrame コンストラクタは、既存の DataFrame から構築する際に、デフォルトの copy=False で遅延コピー (データの変更が発生するまでコピーを遅延) を作成するようになりました (GH 51239)。

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

  • DataFrame コンストラクタは、Series または Index から DataFrame を構築し、copy=False を指定した場合、Copy-on-Write を尊重するようになりました。

  • DataFrame および Series コンストラクタは、NumPy 配列から構築する場合、配列を変更したときに DataFrame / Series が変更されるのを避けるために、デフォルトで配列をコピーするようになりました。copy=False を指定すると、以前の動作に戻ります。copy=False を設定した場合、pandas は DataFrame / Series の作成後に NumPy 配列が変更された場合の正しい Copy-on-Write の動作を保証しません。

  • DataFrame.from_records() は、DataFrame で呼び出されたときに Copy-on-Write を尊重するようになりました。

  • チェーン割り当てを使用して値を設定しようとすると (例: df["a"][1:3] = 0)、Copy-on-Write が有効になっている場合、常に警告が発生するようになりました。このモードでは、チェーン割り当ては機能しません。なぜなら、常にインデックス操作 (getitem) の結果である一時オブジェクトに設定しており、Copy-on-Write の下では常にコピーとして動作するためです。したがって、チェーンを介して割り当てても、元の Series または DataFrame を更新することはできません。そのため、サイレントに何もしないことを避けるために、ユーザーに情報提供の警告が表示されます (GH 49467)。

  • DataFrame.replace() は、inplace=True の場合、Copy-on-Write メカニズムを尊重するようになりました。

  • DataFrame.transpose() は、Copy-on-Write メカニズムを尊重するようになりました。

  • インプレースで実行できる算術演算 (例: ser *= 2) は、Copy-on-Write メカニズムを尊重するようになりました。

  • DataFrameMultiIndex 列を持つ場合、DataFrame.__getitem__() は Copy-on-Write メカニズムを尊重するようになりました。

  • Series.__getitem__() は、Series が MultiIndex を持つ場合、Copy-on-Write メカニズムを尊重するようになりました。

    SeriesMultiIndex を持つ場合、Series.__getitem__() は Copy-on-Write メカニズムを尊重するようになりました。

  • Series.view() は、Copy-on-Write メカニズムを尊重するようになりました。

Copy-on-Write は以下のいずれかによって有効にできます。

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

または、Copy-on-Write は以下のようにローカルで有効にできます。

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

その他の機能強化#

注目すべきバグ修正#

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

DataFrameGroupBy.cumsum()DataFrameGroupBy.cumprod() が、精度の低い浮動小数点へのキャストではなくオーバーフローするようになりました#

以前のバージョンでは、cumsumcumprod を適用する際に浮動小数点にキャストしていたため、結果が int64 dtype で保持できる場合でも誤った結果が生じていました。さらに、int64 の制限に達すると、NumPy と通常の DataFrame.cumprod() および DataFrame.cumsum() メソッドと一貫性のあるオーバーフローが発生するようになりました (GH 37493)。

以前の動作

In [1]: df = pd.DataFrame({"key": ["b"] * 7, "value": 625})
In [2]: df.groupby("key")["value"].cumprod()[5]
Out[2]: 5.960464477539062e+16

6番目の値で誤った結果が返されます。

新しい動作

In [19]: df = pd.DataFrame({"key": ["b"] * 7, "value": 625})

In [20]: df.groupby("key")["value"].cumprod()
Out[20]: 
0                   625
1                390625
2             244140625
3          152587890625
4        95367431640625
5     59604644775390625
6    359414837200037393
Name: value, dtype: int64

7番目の値でオーバーフローしますが、6番目の値はまだ正しいです。

DataFrameGroupBy.nth()SeriesGroupBy.nth() がフィルタリングとして動作するようになりました#

以前のバージョンの pandas では、DataFrameGroupBy.nth()SeriesGroupBy.nth() は集計のように動作していました。しかし、ほとんどの入力 n に対して、グループごとにゼロまたは複数の行を返す可能性があります。これは、DataFrameGroupBy.head() などと同様に、これらがフィルタリングであることを意味します。pandas は、これらをフィルタリングとして扱うようになりました (GH 13666)。

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

In [22]: gb = df.groupby("a")

以前の動作

In [5]: gb.nth(n=1)
Out[5]:
   A    B
1  1  2.0
4  2  5.0

新しい動作

In [23]: gb.nth(n=1)
Out[23]: 
   a    b
1  1  2.0
4  2  5.0

特に、結果のインデックスは、適切な行を選択することで入力から派生されます。また、n がグループより大きい場合、NaN の代わりに何も行が返されません。

以前の動作

In [5]: gb.nth(n=3, dropna="any")
Out[5]:
    B
A
1 NaN
2 NaN

新しい動作

In [24]: gb.nth(n=3, dropna="any")
Out[24]: 
Empty DataFrame
Columns: [a, b]
Index: []

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

サポートされていない解像度での datetime64 または timedelta64 dtype を使用した構築#

以前のバージョンでは、Series または DataFrame を構築し、サポートされていない解像度 (つまり "ns" 以外のもの) の "datetime64" または "timedelta64" dtype を渡した場合、pandas は silently に与えられた dtype をそのナノ秒の対応物に置き換えていました。

以前の動作:

In [5]: pd.Series(["2016-01-01"], dtype="datetime64[s]")
Out[5]:
0   2016-01-01
dtype: datetime64[ns]

In [6] pd.Series(["2016-01-01"], dtype="datetime64[D]")
Out[6]:
0   2016-01-01
dtype: datetime64[ns]

pandas 2.0 では、"s"、"ms"、"us"、"ns" の解像度をサポートしています。サポートされている dtype (例: "datetime64[s]") を渡すと、結果は正確に要求された dtype になります。

新しい動作:

In [25]: pd.Series(["2016-01-01"], dtype="datetime64[s]")
Out[25]: 
0   2016-01-01
dtype: datetime64[s]

サポートされていない dtype を渡すと、pandas は silently にサポートされている dtype に置き換えるのではなく、エラーを発生させるようになりました。

新しい動作:

In [26]: pd.Series(["2016-01-01"], dtype="datetime64[D]")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[26], line 1
----> 1 pd.Series(["2016-01-01"], dtype="datetime64[D]")

File ~/work/pandas/pandas/pandas/core/series.py:584, in Series.__init__(self, data, index, dtype, name, copy, fastpath)
    582         data = data.copy()
    583 else:
--> 584     data = sanitize_array(data, index, dtype, copy)
    586     manager = _get_option("mode.data_manager", silent=True)
    587     if manager == "block":

File ~/work/pandas/pandas/pandas/core/construction.py:648, in sanitize_array(data, index, dtype, copy, allow_2d)
    645     subarr = np.array([], dtype=np.float64)
    647 elif dtype is not None:
--> 648     subarr = _try_cast(data, dtype, copy)
    650 else:
    651     subarr = maybe_convert_platform(data)

File ~/work/pandas/pandas/pandas/core/construction.py:808, in _try_cast(arr, dtype, copy)
    803     return lib.ensure_string_array(arr, convert_na_value=False, copy=copy).reshape(
    804         shape
    805     )
    807 elif dtype.kind in "mM":
--> 808     return maybe_cast_to_datetime(arr, dtype)
    810 # GH#15832: Check if we are requesting a numeric dtype and
    811 # that we can convert the data to the requested dtype.
    812 elif dtype.kind in "iu":
    813     # this will raise if we have e.g. floats

File ~/work/pandas/pandas/pandas/core/dtypes/cast.py:1228, in maybe_cast_to_datetime(value, dtype)
   1224     raise TypeError("value must be listlike")
   1226 # TODO: _from_sequence would raise ValueError in cases where
   1227 #  _ensure_nanosecond_dtype raises TypeError
-> 1228 _ensure_nanosecond_dtype(dtype)
   1230 if lib.is_np_dtype(dtype, "m"):
   1231     res = TimedeltaArray._from_sequence(value, dtype=dtype)

File ~/work/pandas/pandas/pandas/core/dtypes/cast.py:1285, in _ensure_nanosecond_dtype(dtype)
   1282     raise ValueError(msg)
   1283 # TODO: ValueError or TypeError? existing test
   1284 #  test_constructor_generic_timestamp_bad_frequency expects TypeError
-> 1285 raise TypeError(
   1286     f"dtype={dtype} is not supported. Supported resolutions are 's', "
   1287     "'ms', 'us', and 'ns'"
   1288 )

TypeError: dtype=datetime64[D] is not supported. Supported resolutions are 's', 'ms', 'us', and 'ns'

Value counts が結果の名前を count に設定するようになりました#

以前のバージョンでは、Series.value_counts() を実行すると、結果は元のオブジェクトの名前を継承し、結果インデックスは名前がありませんでした。これにより、インデックスをリセットする際に混乱が生じ、列名が列値と対応しないことがありました。現在、結果の名前は 'count' (または normalize=True が渡された場合は 'proportion') になり、インデックスは元のオブジェクトの名前が付けられます (GH 49497)。

以前の動作:

In [8]: pd.Series(['quetzal', 'quetzal', 'elk'], name='animal').value_counts()

Out[2]:
quetzal    2
elk        1
Name: animal, dtype: int64

新しい動作:

In [27]: pd.Series(['quetzal', 'quetzal', 'elk'], name='animal').value_counts()
Out[27]: 
animal
quetzal    2
elk        1
Name: count, dtype: int64

同様に、他の value_counts メソッド (例えば、DataFrame.value_counts()) も同様です。

サポートされていない datetime64/timedelta64 dtype への astype 変換を禁止#

以前のバージョンでは、Series または DataFramedatetime64[ns] から異なる datetime64[X] dtype に変換すると、要求された dtype ではなく datetime64[ns] dtype でオブジェクトが返されていました。pandas 2.0 では、"datetime64[s]"、"datetime64[ms]"、および "datetime64[us]" dtype のサポートが追加されたため、これらの dtype に変換すると、正確に要求された dtype が得られます。

以前の動作:

In [28]: idx = pd.date_range("2016-01-01", periods=3)

In [29]: ser = pd.Series(idx)

以前の動作:

In [4]: ser.astype("datetime64[s]")
Out[4]:
0   2016-01-01
1   2016-01-02
2   2016-01-03
dtype: datetime64[ns]

新しい動作では、正確に要求された dtype が得られます。

新しい動作:

In [30]: ser.astype("datetime64[s]")
Out[30]: 
0   2016-01-01
1   2016-01-02
2   2016-01-03
dtype: datetime64[s]

サポートされていない解像度 (例: "datetime64[D]") の場合、要求された dtype を黙って無視する代わりにエラーが発生します。

新しい動作:

In [31]: ser.astype("datetime64[D]")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[31], line 1
----> 1 ser.astype("datetime64[D]")

File ~/work/pandas/pandas/pandas/core/generic.py:6662, in NDFrame.astype(self, dtype, copy, errors)
   6656     results = [
   6657         ser.astype(dtype, copy=copy, errors=errors) for _, ser in self.items()
   6658     ]
   6660 else:
   6661     # else, only a single dtype is given
-> 6662     new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
   6663     res = self._constructor_from_mgr(new_data, axes=new_data.axes)
   6664     return res.__finalize__(self, method="astype")

File ~/work/pandas/pandas/pandas/core/internals/managers.py:430, in BaseBlockManager.astype(self, dtype, copy, errors)
    427 elif using_copy_on_write():
    428     copy = False
--> 430 return self.apply(
    431     "astype",
    432     dtype=dtype,
    433     copy=copy,
    434     errors=errors,
    435     using_cow=using_copy_on_write(),
    436 )

File ~/work/pandas/pandas/pandas/core/internals/managers.py:363, in BaseBlockManager.apply(self, f, align_keys, **kwargs)
    361         applied = b.apply(f, **kwargs)
    362     else:
--> 363         applied = getattr(b, f)(**kwargs)
    364     result_blocks = extend_blocks(applied, result_blocks)
    366 out = type(self).from_blocks(result_blocks, self.axes)

File ~/work/pandas/pandas/pandas/core/internals/blocks.py:784, in Block.astype(self, dtype, copy, errors, using_cow, squeeze)
    781         raise ValueError("Can not squeeze with more than one column.")
    782     values = values[0, :]  # type: ignore[call-overload]
--> 784 new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
    786 new_values = maybe_coerce_values(new_values)
    788 refs = None

File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:237, in astype_array_safe(values, dtype, copy, errors)
    234     dtype = dtype.numpy_dtype
    236 try:
--> 237     new_values = astype_array(values, dtype, copy=copy)
    238 except (ValueError, TypeError):
    239     # e.g. _astype_nansafe can fail on object-dtype of strings
    240     #  trying to convert to float
    241     if errors == "ignore":

File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:179, in astype_array(values, dtype, copy)
    175     return values
    177 if not isinstance(values, np.ndarray):
    178     # i.e. ExtensionArray
--> 179     values = values.astype(dtype, copy=copy)
    181 else:
    182     values = _astype_nansafe(values, dtype, copy=copy)

File ~/work/pandas/pandas/pandas/core/arrays/datetimes.py:741, in DatetimeArray.astype(self, dtype, copy)
    739 elif isinstance(dtype, PeriodDtype):
    740     return self.to_period(freq=dtype.freq)
--> 741 return dtl.DatetimeLikeArrayMixin.astype(self, dtype, copy)

File ~/work/pandas/pandas/pandas/core/arrays/datetimelike.py:517, in DatetimeLikeArrayMixin.astype(self, dtype, copy)
    513 elif (dtype.kind in "mM" and self.dtype != dtype) or dtype.kind == "f":
    514     # disallow conversion between datetime/timedelta,
    515     # and conversions for any datetimelike to float
    516     msg = f"Cannot cast {type(self).__name__} to dtype {dtype}"
--> 517     raise TypeError(msg)
    518 else:
    519     return np.asarray(self, dtype=dtype)

TypeError: Cannot cast DatetimeArray to dtype datetime64[D]

timedelta64[ns] dtype からの変換の場合、以前の動作では浮動小数点形式に変換されていました。

以前の動作:

In [32]: idx = pd.timedelta_range("1 Day", periods=3)

In [33]: ser = pd.Series(idx)

以前の動作:

In [7]: ser.astype("timedelta64[s]")
Out[7]:
0     86400.0
1    172800.0
2    259200.0
dtype: float64

In [8]: ser.astype("timedelta64[D]")
Out[8]:
0    1.0
1    2.0
2    3.0
dtype: float64

新しい動作は datetime64 と同様に、要求された dtype を正確に与えるか、エラーを発生させます。

新しい動作:

In [34]: ser.astype("timedelta64[s]")
Out[34]: 
0   1 days
1   2 days
2   3 days
dtype: timedelta64[s]

In [35]: ser.astype("timedelta64[D]")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[35], line 1
----> 1 ser.astype("timedelta64[D]")

File ~/work/pandas/pandas/pandas/core/generic.py:6662, in NDFrame.astype(self, dtype, copy, errors)
   6656     results = [
   6657         ser.astype(dtype, copy=copy, errors=errors) for _, ser in self.items()
   6658     ]
   6660 else:
   6661     # else, only a single dtype is given
-> 6662     new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
   6663     res = self._constructor_from_mgr(new_data, axes=new_data.axes)
   6664     return res.__finalize__(self, method="astype")

File ~/work/pandas/pandas/pandas/core/internals/managers.py:430, in BaseBlockManager.astype(self, dtype, copy, errors)
    427 elif using_copy_on_write():
    428     copy = False
--> 430 return self.apply(
    431     "astype",
    432     dtype=dtype,
    433     copy=copy,
    434     errors=errors,
    435     using_cow=using_copy_on_write(),
    436 )

File ~/work/pandas/pandas/pandas/core/internals/managers.py:363, in BaseBlockManager.apply(self, f, align_keys, **kwargs)
    361         applied = b.apply(f, **kwargs)
    362     else:
--> 363         applied = getattr(b, f)(**kwargs)
    364     result_blocks = extend_blocks(applied, result_blocks)
    366 out = type(self).from_blocks(result_blocks, self.axes)

File ~/work/pandas/pandas/pandas/core/internals/blocks.py:784, in Block.astype(self, dtype, copy, errors, using_cow, squeeze)
    781         raise ValueError("Can not squeeze with more than one column.")
    782     values = values[0, :]  # type: ignore[call-overload]
--> 784 new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
    786 new_values = maybe_coerce_values(new_values)
    788 refs = None

File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:237, in astype_array_safe(values, dtype, copy, errors)
    234     dtype = dtype.numpy_dtype
    236 try:
--> 237     new_values = astype_array(values, dtype, copy=copy)
    238 except (ValueError, TypeError):
    239     # e.g. _astype_nansafe can fail on object-dtype of strings
    240     #  trying to convert to float
    241     if errors == "ignore":

File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:179, in astype_array(values, dtype, copy)
    175     return values
    177 if not isinstance(values, np.ndarray):
    178     # i.e. ExtensionArray
--> 179     values = values.astype(dtype, copy=copy)
    181 else:
    182     values = _astype_nansafe(values, dtype, copy=copy)

File ~/work/pandas/pandas/pandas/core/arrays/timedeltas.py:358, in TimedeltaArray.astype(self, dtype, copy)
    354         return type(self)._simple_new(
    355             res_values, dtype=res_values.dtype, freq=self.freq
    356         )
    357     else:
--> 358         raise ValueError(
    359             f"Cannot convert from {self.dtype} to {dtype}. "
    360             "Supported resolutions are 's', 'ms', 'us', 'ns'"
    361         )
    363 return dtl.DatetimeLikeArrayMixin.astype(self, dtype, copy=copy)

ValueError: Cannot convert from timedelta64[ns] to timedelta64[D]. Supported resolutions are 's', 'ms', 'us', 'ns'

UTC と固定オフセットタイムゾーンのデフォルトが標準ライブラリの tzinfo オブジェクトに変更#

以前のバージョンでは、UTC を表すために使用されるデフォルトの tzinfo オブジェクトは pytz.UTC でした。pandas 2.0 では、代わりに datetime.timezone.utc がデフォルトになりました。同様に、固定 UTC オフセットを表すタイムゾーンの場合、pytz.FixedOffset オブジェクトの代わりに datetime.timezone オブジェクトを使用します。(GH 34916) を参照してください。

以前の動作:

In [2]: ts = pd.Timestamp("2016-01-01", tz="UTC")
In [3]: type(ts.tzinfo)
Out[3]: pytz.UTC

In [4]: ts2 = pd.Timestamp("2016-01-01 04:05:06-07:00")
In [3]: type(ts2.tzinfo)
Out[5]: pytz._FixedOffset

新しい動作:

In [36]: ts = pd.Timestamp("2016-01-01", tz="UTC")

In [37]: type(ts.tzinfo)
Out[37]: datetime.timezone

In [38]: ts2 = pd.Timestamp("2016-01-01 04:05:06-07:00")

In [39]: type(ts2.tzinfo)
Out[39]: datetime.timezone

UTC でも固定オフセットでもないタイムゾーン (例: "US/Pacific") の場合、引き続き pytz オブジェクトがデフォルトとなります。

空の DataFrame/Series はデフォルトで RangeIndex を持つようになりました#

以前は、軸 (index=Nonecolumns=None) を指定せずに空の (where data is None or an empty list-like argument) Series または DataFrame を構築すると、軸はオブジェクト dtype の空の Index を返していました。

現在、軸は空の RangeIndex を返します (GH 49572)。

以前の動作:

In [8]: pd.Series().index
Out[8]:
Index([], dtype='object')

In [9] pd.DataFrame().axes
Out[9]:
[Index([], dtype='object'), Index([], dtype='object')]

新しい動作:

In [40]: pd.Series().index
Out[40]: RangeIndex(start=0, stop=0, step=1)

In [41]: pd.DataFrame().axes
Out[41]: [RangeIndex(start=0, stop=0, step=1), RangeIndex(start=0, stop=0, step=1)]

DataFrame から LaTeX への新しいレンダーエンジン#

既存の DataFrame.to_latex() は、以前 Styler.to_latex() で利用可能だった拡張実装を利用するように再構築されました。col_space は LaTeX エンジンによって無視されるため削除されましたが、引数シグネチャは類似しています。このレンダーエンジンは、レンダリングが jinja2 テンプレートに基づいているため、依存関係として jinja2 のインストールも必要です。

以下の pandas LaTeX オプションは使用されなくなり、削除されました。一般的な最大行数と列数の引数は残っていますが、この機能については Styler の同等なものに置き換える必要があります。類似の機能を提供する代替オプションは以下に示されています。

  • display.latex.escape: styler.format.escape に置き換えられました。

  • display.latex.longtable: styler.latex.environment に置き換えられました。

  • display.latex.multicolumndisplay.latex.multicolumn_format および display.latex.multirow: styler.sparse.rowsstyler.sparse.columnsstyler.latex.multirow_align および styler.latex.multicol_align に置き換えられました。

  • display.latex.repr: styler.render.repr に置き換えられました。

  • display.max_rowsdisplay.max_columns: styler.render.max_rowsstyler.render.max_columns および styler.render.max_elements に置き換えられました。

この変更により、一部のデフォルトも変更されましたのでご注意ください。

  • multirow のデフォルトは *True* になりました。

  • multirow_align のデフォルトは *“l”* ではなく *“r”* になりました。

  • multicol_align のデフォルトは *“l”* ではなく *“r”* になりました。

  • escape のデフォルトは *False* になりました。

_repr_latex_ の動作も変更されましたのでご注意ください。以前は display.latex.repr を設定すると、Jupyter Notebook で nbconvert を使用した場合にのみ LaTeX が生成され、ユーザーがノートブックを実行している場合には生成されませんでした。現在、styler.render.repr オプションは、Jupyter Notebook 内での操作 (nbconvert だけでなく) における特定の出力を制御できます。(GH 39911) を参照してください。

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

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

パッケージ

最小バージョン

必須

変更済み

mypy (開発)

1.0

X

pytest (開発)

7.0.0

X

pytest-xdist (開発)

2.2.0

X

hypothesis (開発)

6.34.2

X

python-dateutil

2.8.2

X

X

tzdata

2022.1

X

X

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

パッケージ

最小バージョン

変更済み

pyarrow

7.0.0

X

matplotlib

3.6.1

X

fastparquet

0.6.3

X

xarray

0.21.0

X

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

Datetime が一貫した形式で解析されるようになりました#

以前は、to_datetime() は各要素の形式を個別に推測していました。これは、要素に日付形式が混在している一部のケースでは適切でしたが、ユーザーが一貫した形式を期待しているにもかかわらず、関数が要素間で形式を切り替えるという問題が頻繁に発生していました。バージョン 2.0.0 以降、解析は最初に出現する非 NA 値によって決定される一貫した形式を使用します (ユーザーが形式を指定しない限り、その場合は指定された形式が使用されます)。

以前の動作:

In [1]: ser = pd.Series(['13-01-2000', '12-01-2000'])
In [2]: pd.to_datetime(ser)
Out[2]:
0   2000-01-13
1   2000-12-01
dtype: datetime64[ns]

新しい動作:

In [42]: ser = pd.Series(['13-01-2000', '12-01-2000'])

In [43]: pd.to_datetime(ser)
Out[43]: 
0   2000-01-13
1   2000-01-12
dtype: datetime64[ns]

これは read_csv() にも影響することに注意してください。

一貫性のない形式で日付を解析する必要がある場合は、format='mixed' (場合によっては dayfirst と併用) を使用できます。

ser = pd.Series(['13-01-2000', '12 January 2000'])
pd.to_datetime(ser, format='mixed', dayfirst=True)

または、すべての形式が ISO8601 である場合 (ただし、形式が完全に一致するとは限りません)。

ser = pd.Series(['2020-01-01', '2020-01-01 03:00'])
pd.to_datetime(ser, format='ISO8601')

その他の API の変更#

  • Timestamp コンストラクタの freqtznanosecond、および unit キーワードがキーワードオンリーになりました (GH 45307GH 32526)。

  • Timestamp で 999 より大きいまたは 0 未満の nanoseconds を渡すと、ValueError が発生するようになりました (GH 48538GH 48255)。

  • read_csv(): c パーサーを使用している場合、index_col で誤った列数を指定すると、IndexError ではなく ParserError が発生するようになりました。

  • get_dummies()dtype のデフォルト値が uint8 から bool に変更されました (GH 45848)。

  • DataFrame.astype()Series.astype()、および DatetimeIndex.astype() で datetime64 データを "datetime64[s]"、"datetime64[ms]"、"datetime64[us]" のいずれかにキャストすると、"datetime64[ns]" に強制変換されるのではなく、指定された解像度を持つオブジェクトが返されるようになりました (GH 48928)。

  • DataFrame.astype()Series.astype()、および DatetimeIndex.astype() で timedelta64 データを "timedelta64[s]"、"timedelta64[ms]"、"timedelta64[us]" のいずれかにキャストすると、"float64" dtype に強制変換されるのではなく、指定された解像度を持つオブジェクトが返されるようになりました (GH 48963)。

  • DatetimeIndex.astype()TimedeltaIndex.astype()PeriodIndex.astype()Series.astype()DataFrame.astype()datetime64timedelta64、または PeriodDtype dtype で使用する場合、"int64" 以外の整数 dtype への変換が許可されなくなりました。代わりに obj.astype('int64', copy=False).astype(dtype) を使用してください (GH 49715)。

  • Index.astype() が、Series の動作に合わせて、float64 dtype から datetime-like dtypes へのキャストを許可するようになりました (GH 49660)。

  • "timedelta64[s]"、"timedelta64[ms]"、または "timedelta64[us]" の dtype を持つデータを TimedeltaIndexSeries、または DataFrame コンストラクタに渡すと、"timedelta64[ns]" にキャストされるのではなく、その dtype が保持されるようになりました。より低い解像度の timedelta64 データは、サポートされている最低解像度である "timedelta64[s]" にキャストされます (GH 49014)。

  • TimedeltaIndexSeries、または DataFrame コンストラクタに "timedelta64[s]"、"timedelta64[ms]"、または "timedelta64[us]" の dtype を渡すと、"timedelta64[ns]" にキャストされるのではなく、その dtype が保持されるようになりました。Series または DataFrame のより低い解像度の dtype を渡すと、サポートされている最低解像度である "timedelta64[s]" にキャストされます (GH 49014)。

  • 非ナノ秒解像度の np.datetime64 オブジェクトを Timestamp に渡すと、解像度が "s"、"ms"、"us"、または "ns" の場合は入力解像度が保持されます。それ以外の場合は、最も近いサポートされている解像度にキャストされます (GH 49008)。

  • ナノ秒以外の解像度を持つ datetime64 値を to_datetime() に渡すと、解像度が "s"、"ms"、"us"、または "ns" の場合は入力解像度が保持されます。それ以外の場合は、最も近いサポートされている解像度にキャストされます (GH 50369)。

  • 整数値と非ナノ秒 datetime64 dtype (例: "datetime64[s]") を DataFrameSeries、または Index に渡すと、値は dtype の単位の倍数として扱われ、例えば Series(np.array(values, dtype="M8[s]")) の動作と一致するようになりました (GH 51092)。

  • ISO-8601 形式の文字列を Timestamp に渡すと、解析された入力の解像度が "s"、"ms"、"us"、または "ns" の場合は入力解像度が保持されます。それ以外の場合は、最も近いサポートされている解像度にキャストされます (GH 49737)。

  • DataFrame.mask() および Series.mask()other 引数が、DataFrame.where() および Series.where() と一貫して np.nan ではなく no_default をデフォルトにするようになりました。エントリは対応する NULL 値 (NumPy dtype の場合は np.nan、拡張 dtype の場合は pd.NA) で埋められます (GH 49111)。

  • Series.quantile() および DataFrame.quantile()SparseDtype を使用した場合の動作が変更され、スパース dtype が保持されるようになりました (GH 49583)。

  • datetime オブジェクトのオブジェクト dtype Index を持つ Series を作成する場合、pandas はインデックスを DatetimeIndex に silently に変換しなくなりました (GH 39307GH 23598)。

  • パラメータ exact="equiv" を持つ pandas.testing.assert_index_equal() は、両方のインデックスが RangeIndex または int64 dtype を持つ Index のいずれかである場合に、2つのインデックスが等しいとみなすようになりました。以前は、RangeIndex または Int64Index のいずれかを意味していました (GH 51098)。

  • dtypeが「timedelta64[ns]」または「datetime64[ns]」であるSeries.unique()は、numpy.ndarrayの代わりにTimedeltaArrayまたはDatetimeArrayを返すようになりました (GH 49176)

  • to_datetime()およびDatetimeIndexは、Seriesの動作に合わせて、datetimeオブジェクトと数値エントリの両方を含むシーケンスを許可するようになりました (GH 49037, GH 50453)

  • pandas.api.types.is_string_dtype()は、要素が文字列であると推測される場合にのみ、dtype=objectの配列ライクに対してTrueを返すようになりました (GH 15585)

  • datetimeオブジェクトとdateオブジェクトを含むシーケンスをSeriesコンストラクタに渡すと、Indexの動作と一貫して、datetime64[ns] dtypeの代わりにobject dtypeが返されます (GH 49341)

  • 日付時刻として解析できない文字列をSeriesまたはDataFramedtype="datetime64[ns]"で渡すと、キーワードを黙って無視してobject dtypeを返す代わりに、エラーが発生するようになりました (GH 24435)

  • Timedeltaに変換できない型のシーケンスをto_timedelta()、またはdtype="timedelta64[ns]"を指定してSeriesまたはDataFrameコンストラクタ、またはTimedeltaIndexに渡すと、ValueErrorの代わりにTypeErrorが発生するようになりました (GH 49525)

  • Indexコンストラクタの動作が変更され、少なくとも1つのNaTと、その他すべてがNoneまたはNaNであるシーケンスの場合、Seriesの動作に合わせて、object dtypeの代わりにdatetime64[ns] dtypeを推論するようになりました (GH 49340)

  • パラメータindex_colNone (デフォルト) に設定されているread_stata()は、返されるDataFrameのインデックスをInt64IndexではなくRangeIndexに設定するようになりました (GH 49745)

  • オブジェクトdtypeで動作する場合のIndexSeries、およびDataFrameの算術メソッドの動作が変更され、結果は配列操作の結果に対する型推論を行わなくなりました。結果に対する型推論を行うにはresult.infer_objects(copy=False)を使用してください (GH 49999, GH 49714)

  • オブジェクトdtypeのnumpy.ndarrayにすべてのbool値またはすべての複素数値が含まれている場合のIndexコンストラクタの動作が変更され、Seriesの動作と一貫して、オブジェクトdtypeが保持されるようになりました (GH 49594)

  • オブジェクトdtypeから文字列dtypeへのSeries.astype()の動作が変更され、バイトオブジェクトに対してstr(val)の代わりにval.decode()を実行するようになりました (Index.astype()の動作に一致) (GH 45326)

  • read_csv()のデフォルトのna_values"None"が追加されました (GH 50286)

  • 整数dtypeと丸められない浮動小数点データが与えられた場合のSeriesおよびDataFrameコンストラクタの動作が変更され、浮動小数点dtypeを黙って保持する代わりにValueErrorを発生させるようになりました。古い動作を得るにはSeries(data)またはDataFrame(data)を、指定されたdtypeを得るにはSeries(data).astype(dtype)またはDataFrame(data).astype(dtype)を使用してください (GH 49599)

  • axis=1、整数fill_value、および均質な日付時刻ライクなdtypeを持つDataFrame.shift()の動作が変更され、日付時刻ライクな型にキャストする代わりに、新しい列を整数dtypeで埋めるようになりました (GH 49842)

  • read_json()で例外が発生した場合にファイルが閉じるようになりました (GH 49921)

  • read_csv()read_json()、およびread_fwf()の動作が変更され、インデックスが指定されていない場合、常にRangeIndexになります。以前は、新しいDataFrame/Seriesの長さが0の場合、インデックスはdtype objectIndexでした (GH 49572)

  • DataFrame.values()DataFrame.to_numpy()DataFrame.xs()DataFrame.reindex()DataFrame.fillna()、およびDataFrame.replace()は、基になる配列を黙って統合しなくなりました。統合を確実にするにはdf = df.copy()を実行してください (GH 49356)

  • locまたはilocで両軸に完全なスライスを使用して新しいDataFrameを作成する(つまり、df.loc[:, :]またはdf.iloc[:, :])と、完全なスライスを取得する他のメソッド(たとえばdf.loc[:]またはdf[:])と一貫して、元のDataFrameの代わりに新しいDataFrame(シャローコピー)が返されるようになりました (GH 49469)

  • SeriesおよびDataFrameコンストラクタは、それぞれSeriesおよびDataFrameが渡され、copy=Falseがデフォルト(かつ、他のキーワードがコピーをトリガーしない場合)の場合、シャローコピー(つまり、データを共有するが属性は共有しない)を返すようになりました。以前は、新しいSeriesまたはDataFrameはインデックス属性を共有していました(例:df.index = ...は親または子のインデックスも更新しました) (GH 49523)

  • Timedeltaオブジェクトのcumprodの計算が禁止されました。以前は誤った値が返されていました (GH 50246)

  • インデックスなしでHDFStoreファイルから読み込まれたDataFrameオブジェクトは、int64インデックスの代わりにRangeIndexを持つようになりました (GH 51076)

  • NANaTを含むデータを持つ数値numpy dtypeでIndexをインスタンス化すると、ValueErrorが発生するようになりました。以前はTypeErrorが発生していました (GH 51050)

  • read_json(orient='split')を使用して重複する列を持つJSONファイルをロードすると、read_csv()やその他のリーダーと同様に、重複を避けるために列の名前が変更されるようになりました (GH 50370)

  • Series.sparse.from_cooから返されるSeriesのインデックスのレベルは、常にdtype int32を持つようになりました。以前はdtype int64を持っていました (GH 50926)

  • unitが「Y」または「M」のto_datetime()は、シーケンスに丸められないfloat値が含まれている場合、Timestampの動作に合わせて、エラーを発生させるようになりました (GH 50301)

  • メソッドSeries.round()DataFrame.__invert__()Series.__invert__()DataFrame.swapaxes()DataFrame.first()DataFrame.last()Series.first()Series.last()、およびDataFrame.align()は、常に新しいオブジェクトを返すようになりました (GH 51032)

  • DataFrameおよびDataFrameGroupByの集計 (例: "sum") でオブジェクトdtypeの列を使用する場合、結果に対して非オブジェクトdtypeを推論しなくなりました。以前の動作を得るには、結果に対して明示的にresult.infer_objects(copy=False)を呼び出してください (GH 51205, GH 49603)

  • ArrowDtype dtypeでのゼロ除算は、エラーを発生させる代わりに、分子に応じて-infnan、またはinfを返すようになりました (GH 51541)

  • 実数数値dtypeをチェックするためのpandas.api.types.is_any_real_numeric_dtype()が追加されました (GH 51152)

  • value_counts()は、"Int64"型の代わりにArrowDtypepyarrow.int64型のデータを返すようになりました (GH 51462)

  • factorize()およびunique()は、ナノ秒以外の解像度を持つnumpy timedelta64またはdatetime64が渡された場合、元のdtypeを保持するようになりました (GH 48670)

現在のPDEPは、pandas APIのメソッドの小さなサブセットを除いて、すべてのメソッドのinplaceおよびcopyキーワードの非推奨化と削除を提案しています。現在の議論はこちらで行われています。コピーオンライトの文脈では、キーワードはもはや必要ありません。この提案が受け入れられた場合、両方のキーワードは次期pandasリリースで非推奨となり、pandas 3.0で削除されます。

非推奨#

以前のバージョンの非推奨/変更の削除#

  • Int64IndexUInt64Index、およびFloat64Indexは削除されました。詳細についてはこちらを参照してください (GH 42717)

  • 非推奨のTimestamp.freqTimestamp.freqstr、およびTimestampコンストラクタおよびTimestamp.fromordinal()の引数freqは削除されました (GH 14146)

  • 非推奨のCategoricalBlockBlock.is_categorical()は削除され、datetime64およびtimedelta64の値はBlock.make_block_same_class()に渡す前にDatetimeArrayまたはTimedeltaArrayでラップする必要があり、BlockManagerコンストラクタに渡す場合、DatetimeTZBlock.valuesは正しいndimを持つ必要があり、SingleBlockManagerコンストラクタから「fastpath」キーワードが削除されました (GH 40226, GH 40571)

  • 非推奨のグローバルオプションuse_inf_as_nulluse_inf_as_naに置き換えられました (GH 17126)

  • 非推奨のモジュールpandas.core.indexは削除されました (GH 30193)

  • 非推奨のエイリアスpandas.core.tools.datetimes.to_timeは削除されました。代わりにpandas.core.tools.timesから関数を直接インポートしてください (GH 34145)

  • 非推奨のエイリアスpandas.io.json.json_normalizeは削除されました。代わりにpandas.json_normalizeから関数を直接インポートしてください (GH 27615)

  • 非推奨のCategorical.to_dense()は削除されました。代わりにnp.asarray(cat)を使用してください (GH 32639)

  • 非推奨のCategorical.take_nd()は削除されました (GH 27745)

  • 非推奨のCategorical.mode()は削除されました。代わりにSeries(cat).mode()を使用してください (GH 45033)

  • 非推奨のCategorical.is_dtype_equal()およびCategoricalIndex.is_dtype_equal()は削除されました (GH 37545)

  • 非推奨のCategoricalIndex.take_nd()は削除されました (GH 30702)

  • 非推奨のIndex.is_type_compatible()は削除されました (GH 42113)

  • 非推奨のIndex.is_mixed()は削除されました。代わりにindex.inferred_typeを直接チェックしてください (GH 32922)

  • 非推奨のpandas.api.types.is_categorical()は削除されました。代わりにpandas.api.types.is_categorical_dtype()を使用してください (GH 33385)

  • 非推奨のIndex.asi8()は削除されました (GH 37877)

  • Seriesdatetime64[ns] dtypeデータとタイムゾーン対応dtypeを渡す際の動作変更は非推奨となり、値はUTC時間ではなくローカル時間として解釈され、DatetimeIndexの動作と一致するようになりました (GH 41662)

  • インデックスまたは列で位置合わせされていない複数のDataFrameにnumpy ufuncを適用する際の動作変更は非推奨となり、最初にインプットが位置合わせされるようになりました (GH 39239)

  • 非推奨のDataFrame._AXIS_NUMBERS()DataFrame._AXIS_NAMES()Series._AXIS_NUMBERS()Series._AXIS_NAMES()は削除されました (GH 33637)

  • 非推奨のIndex.to_native_types()は削除されました。代わりにobj.astype(str)を使用してください (GH 36418)

  • 非推奨のSeries.iteritems()DataFrame.iteritems()は削除されました。代わりにobj.itemsを使用してください (GH 45321)

  • 非推奨のDataFrame.lookup()は削除されました (GH 35224)

  • 非推奨のSeries.append()DataFrame.append()は削除されました。代わりにconcat()を使用してください (GH 35407)

  • 非推奨のSeries.iteritems()DataFrame.iteritems()、およびHDFStore.iteritems()は削除されました。代わりにobj.itemsを使用してください (GH 45321)

  • 非推奨のDatetimeIndex.union_many()は削除されました (GH 45018)

  • DatetimeArrayDatetimeIndex、およびdtアクセサの非推奨のweekofyearおよびweek属性は削除され、代わりにisocalendar().weekが推奨されます (GH 33595)

  • 非推奨のRangeIndex._start()RangeIndex._stop()RangeIndex._step()は削除されました。代わりにstartstopstepを使用してください (GH 30482)

  • 非推奨のDatetimeIndex.to_perioddelta()は削除されました。代わりにdtindex - dtindex.to_period(freq).to_timestamp()を使用してください (GH 34853)

  • 非推奨のStyler.hide_index()およびStyler.hide_columns()は削除されました (GH 49397)

  • 非推奨のStyler.set_na_rep()およびStyler.set_precision()は削除されました (GH 49397)

  • 非推奨のStyler.where()は削除されました (GH 49397)

  • 非推奨のStyler.render()は削除されました (GH 49397)

  • DataFrame.to_latex()の非推奨引数col_spaceは削除されました (GH 47970)

  • Styler.highlight_null()の非推奨引数null_colorは削除されました (GH 49397)

  • testing.assert_frame_equal()testing.assert_extension_array_equal()testing.assert_series_equal()testing.assert_index_equal()の非推奨引数check_less_preciseは削除されました (GH 30562)

  • DataFrame.info()の非推奨引数null_countsは削除されました。代わりにshow_countsを使用してください (GH 37999)

  • 非推奨のIndex.is_monotonic()およびSeries.is_monotonic()は削除されました。代わりにobj.is_monotonic_increasingを使用してください (GH 45422)

  • 非推奨のIndex.is_all_dates()は削除されました (GH 36697)

  • タイムゾーン対応のTimestampdtype="datetime64[ns]"SeriesまたはDataFrameコンストラクタに渡すことが非推奨となりました (GH 41555)

  • タイムゾーン対応の値のシーケンスとdtype="datetime64[ns]"SeriesまたはDataFrameコンストラクタに渡すことが非推奨となりました (GH 41555)

  • DataFrameコンストラクタでのnumpy.ma.mrecords.MaskedRecordsの使用は非推奨となりました。代わりに"{name: data[name] for name in data.dtype.names}を渡してください (GH 40363)

  • Series.astype()およびDataFrame.astype()で単位なしの「datetime64」dtypeを使用することは非推奨となりました (GH 47844)

  • .astypeを使用してdatetime64[ns]SeriesDataFrame、またはDatetimeIndexをタイムゾーン対応のdtypeに変換することは非推奨となりました。代わりにobj.tz_localizeまたはser.dt.tz_localizeを使用してください (GH 39258)

  • .astypeを使用してタイムゾーン対応のSeriesDataFrame、またはDatetimeIndexをタイムゾーン非対応のdatetime64[ns] dtypeに変換することは非推奨となりました。代わりにobj.tz_localize(None)またはobj.tz_convert("UTC").tz_localize(None)を使用してください (GH 39258)

  • concat()でsortに非ブール引数を渡すことは非推奨となりました (GH 44629)

  • 日付パーサ関数parse_date_time()parse_date_fields()parse_all_fields()、およびgeneric_parser()は削除されました (GH 24518)

  • core.arrays.SparseArrayコンストラクタから引数indexは削除されました (GH 43523)

  • DataFrame.groupby()およびSeries.groupby()から引数squeezeは削除されました (GH 32380)

  • DateOffsetから非推奨のapplyapply_index__call__onOffset、およびisAnchored属性は削除されました (GH 34171)

  • DatetimeIndex.to_series()keep_tz引数は削除されました (GH 29731)

  • Index.copy()からnamesdtype引数は削除され、MultiIndex.copy()からlevelscodes引数は削除されました (GH 35853, GH 36685)

  • MultiIndex.set_levels()およびMultiIndex.set_codes()から引数inplaceは削除されました (GH 35626)

  • DataFrame.to_excel()およびSeries.to_excel()から引数verboseおよびencodingは削除されました (GH 47912)

  • DataFrame.to_csv()およびSeries.to_csv()から引数line_terminatorは削除されました。代わりにlineterminatorを使用してください (GH 45302)

  • DataFrame.set_axis()およびSeries.set_axis()から引数inplaceは削除されました。代わりにobj = obj.set_axis(..., copy=False)を使用してください (GH 48130)

  • MultiIndex.set_levels()およびMultiIndex.set_codes()に位置引数を渡すことは禁止されました (GH 41485)

  • 単位「Y」、「y」、「M」を持つ文字列をTimedeltaに解析することは、曖昧な期間を表さないため、禁止されました (GH 36838)

  • MultiIndex.is_lexsorted()およびMultiIndex.lexsort_depth()は削除されました (GH 38701)

  • PeriodIndex.astype()から引数howは削除されました。代わりにPeriodIndex.to_timestamp()を使用してください (GH 37982)

  • DataFrame.mask()DataFrame.where()Series.mask()およびSeries.where()から引数try_castは削除されました (GH 38836)

  • Period.to_timestamp()から引数tzは削除されました。代わりにobj.to_timestamp(...).tz_localize(tz)を使用してください (GH 34522)

  • DataFrame.plot()およびSeries.plot()から引数sort_columnsは削除されました (GH 47563)

  • DataFrame.take()およびSeries.take()から引数is_copyは削除されました (GH 30615)

  • Index.get_slice_bound()Index.slice_indexer()およびIndex.slice_locs()から引数kindは削除されました (GH 41378)

  • read_csv()から引数prefixsqueezeerror_bad_linesおよびwarn_bad_linesは削除されました (GH 40413, GH 43427)

  • read_excel()から引数squeezeは削除されました (GH 43427)

  • DataFrame.describe()およびSeries.describe()から引数datetime_is_numericは削除されました。datetimeデータは常に数値データとして要約されます (GH 34798)

  • Series.xs()およびDataFrame.xs()にリストkeyを渡すことは禁止されました。代わりにタプルを渡してください (GH 41789)

  • Indexコンストラクタで、サブクラス固有のキーワード(例:「freq」、「tz」、「names」、「closed」)を渡すことは禁止されました (GH 38597)

  • Categorical.remove_unused_categories()から引数inplaceは削除されました (GH 37918)

  • unit="M"またはunit="Y"を指定してTimestampに非整数浮動小数点数を渡すことは禁止されました (GH 47266)

  • read_excel()からキーワードconvert_floatおよびmangle_dupe_colsは削除されました (GH 41176)

  • read_csv()およびread_table()からキーワードmangle_dupe_colsは削除されました (GH 48137)

  • DataFrame.where()Series.where()DataFrame.mask()、およびSeries.mask()からerrorsキーワードは削除されました (GH 47728)

  • read_excel()iosheet_name以外の非キーワード引数を渡すことは禁止されました (GH 34418)

  • DataFrame.drop()およびSeries.drop()labels以外の非キーワード引数を渡すことは禁止されました (GH 41486)

  • DataFrame.fillna()およびSeries.fillna()value以外の非キーワード引数を渡すことは禁止されました (GH 41485)

  • StringMethods.split()およびStringMethods.rsplit()pat以外の非キーワード引数を渡すことは禁止されました (GH 47448)

  • DataFrame.set_index()keys以外の非キーワード引数を渡すことは禁止されました (GH 41495)

  • Resampler.interpolate()method以外の非キーワード引数を渡すことは禁止されました (GH 41699)

  • level を除く DataFrame.reset_index()Series.reset_index() へのキーワードではない引数の受け渡しを禁止 (GH 41496)

  • DataFrame.dropna()Series.dropna() へのキーワードではない引数の受け渡しを禁止 (GH 41504)

  • ExtensionArray.argsort() へのキーワードではない引数の受け渡しを禁止 (GH 46134)

  • Categorical.sort_values() へのキーワードではない引数の受け渡しを禁止 (GH 47618)

  • Index.drop_duplicates()Series.drop_duplicates() へのキーワードではない引数の受け渡しを禁止 (GH 41485)

  • subset を除く DataFrame.drop_duplicates() へのキーワードではない引数の受け渡しを禁止 (GH 41485)

  • DataFrame.sort_index()Series.sort_index() へのキーワードではない引数の受け渡しを禁止 (GH 41506)

  • method を除く DataFrame.interpolate()Series.interpolate() へのキーワードではない引数の受け渡しを禁止 (GH 41510)

  • DataFrame.any()Series.any() へのキーワードではない引数の受け渡しを禁止 (GH 44896)

  • names を除く Index.set_names() へのキーワードではない引数の受け渡しを禁止 (GH 41551)

  • other を除く Index.join() へのキーワードではない引数の受け渡しを禁止 (GH 46518)

  • objs を除く concat() へのキーワードではない引数の受け渡しを禁止 (GH 41485)

  • data を除く pivot() へのキーワードではない引数の受け渡しを禁止 (GH 48301)

  • DataFrame.pivot() へのキーワードではない引数の受け渡しを禁止 (GH 48301)

  • io を除く read_html() へのキーワードではない引数の受け渡しを禁止 (GH 27573)

  • path_or_buf を除く read_json() へのキーワードではない引数の受け渡しを禁止 (GH 27573)

  • filepath_or_buffer を除く read_sas() へのキーワードではない引数の受け渡しを禁止 (GH 47154)

  • filepath_or_buffer を除く read_stata() へのキーワードではない引数の受け渡しを禁止 (GH 48128)

  • filepath_or_buffer を除く read_csv() へのキーワードではない引数の受け渡しを禁止 (GH 41485)

  • filepath_or_buffer を除く read_table() へのキーワードではない引数の受け渡しを禁止 (GH 41485)

  • filepath_or_buffer を除く read_fwf() へのキーワードではない引数の受け渡しを禁止 (GH 44710)

  • path_or_buffer を除く read_xml() へのキーワードではない引数の受け渡しを禁止 (GH 45133)

  • condother を除く Series.mask()DataFrame.mask() へのキーワードではない引数の受け渡しを禁止 (GH 41580)

  • path を除く DataFrame.to_stata() へのキーワードではない引数の受け渡しを禁止 (GH 48128)

  • condother を除く DataFrame.where()Series.where() へのキーワードではない引数の受け渡しを禁止 (GH 41523)

  • labels を除く Series.set_axis()DataFrame.set_axis() へのキーワードではない引数の受け渡しを禁止 (GH 41491)

  • mapper を除く Series.rename_axis()DataFrame.rename_axis() へのキーワードではない引数の受け渡しを禁止 (GH 47587)

  • lowerupper を除く Series.clip()DataFrame.clip() へのキーワードではない引数の受け渡しを禁止 (GH 41511)

  • Series.bfill()Series.ffill()DataFrame.bfill()、および DataFrame.ffill() へのキーワードではない引数の受け渡しを禁止 (GH 41508)

  • to_replacevalue を除く DataFrame.replace()Series.replace() へのキーワードではない引数の受け渡しを禁止 (GH 47587)

  • by を除く DataFrame.sort_values() へのキーワードではない引数の受け渡しを禁止 (GH 41505)

  • Series.sort_values() へのキーワードではない引数の受け渡しを禁止 (GH 41505)

  • labels を除く DataFrame.reindex() へのキーワードではない引数の受け渡しを禁止 (GH 17966)

  • 一意ではない Index オブジェクトでの Index.reindex() を禁止 (GH 42568)

  • スカラーの data での Categorical の構築を禁止 (GH 38433)

  • data を渡さない CategoricalIndex の構築を禁止 (GH 38944)

  • Rolling.validate()Expanding.validate()、および ExponentialMovingWindow.validate() を削除 (GH 43665)

  • "freq" を返す Rolling.win_type を削除 (GH 38963)

  • Rolling.is_datetimelike を削除 (GH 38963)

  • DataFrame および Series 集計での level キーワードを削除。代わりに groupby を使用 (GH 39983)

  • 非推奨の Timedelta.delta()Timedelta.is_populated()、および Timedelta.freq を削除 (GH 46430, GH 46476)

  • 非推奨の NaT.freq を削除 (GH 45071)

  • 非推奨の Categorical.replace() を削除し、代わりに Series.replace() を使用 (GH 44929)

  • Categorical.min() および Categorical.max() から numeric_only キーワードを削除し、代わりに skipna を使用 (GH 48821)

  • numeric_only=None を指定した DataFrame.median()DataFrame.mean() の動作を変更し、日付時刻に似た列を除外しないようにしました (numeric_only=None の非推奨が強制されるとこの注記は無関係になります) (GH 29941)

  • is_extension_type() を削除し、代わりに is_extension_array_dtype() を使用 (GH 29457)

  • .ExponentialMovingWindow.vol を削除 (GH 39220)

  • Index.get_value() および Index.set_value() を削除 (GH 33907, GH 28621)

  • Series.slice_shift() および DataFrame.slice_shift() を削除 (GH 37601)

  • DataFrameGroupBy.pad() および DataFrameGroupBy.backfill() を削除 (GH 45076)

  • read_json() から numpy 引数を削除 (GH 30636)

  • DataFrame.to_dict() での orient の省略形の使用を禁止 (GH 32516)

  • 非単調な DatetimeIndex で、Index にないキーによる部分スライスを禁止。これにより KeyError が発生するようになりました (GH 18531)

  • get_offset を削除し、代わりに to_offset() を使用 (GH 30340)

  • infer_freq()warn キーワードを削除 (GH 45947)

  • DataFrame.between_time()include_start および include_end 引数を削除し、代わりに inclusive を使用 (GH 43248)

  • date_range() および bdate_range()closed 引数を削除し、代わりに inclusive 引数を使用 (GH 40245)

  • DataFrame.expanding()center キーワードを削除 (GH 20647)

  • eval() から truediv キーワードを削除 (GH 29812)

  • Index.get_loc()method および tolerance 引数を削除。代わりに index.get_indexer([label], method=..., tolerance=...) を使用してください (GH 42269)

  • pandas.datetime サブモジュールを削除 (GH 30489)

  • pandas.np サブモジュールを削除 (GH 30296)

  • pandas.util.testing を削除し、代わりに pandas.testing を使用 (GH 30745)

  • Series.str.__iter__() を削除 (GH 28277)

  • pandas.SparseArray を削除し、代わりに arrays.SparseArray を使用 (GH 30642)

  • pandas.SparseSeries および pandas.SparseDataFrame を削除 (pickle サポートを含む) (GH 30642)

  • datetime64、timedelta64、または period dtypes の DataFrame.shift() および Series.shift`() に整数 fill_value を渡すことを強制的に禁止 (GH 32591)

  • DataFrame.ewm()times に文字列の列ラベルを渡すことを強制的に禁止 (GH 43265)

  • Series.between()inclusiveTrueFalse を渡すことを強制的に禁止し、代わりにそれぞれ "both""neither" を使用するように変更 (GH 40628)

  • engine="c" を指定した read_csv で、範囲外のインデックスを持つ usecols を使用することを強制的に禁止 (GH 25623)

  • ExcelWriter**kwargs を使用することを強制的に禁止し、代わりにキーワード引数 engine_kwargs を使用するように変更 (GH 40430)

  • DataFrameGroupBy.__getitem__() に列ラベルのタプルを渡すことを強制的に禁止 (GH 30546)

  • MultiIndex のレベルでラベルのシーケンスを使用してインデックス付けする際に、欠落しているラベルを強制的に禁止。これにより KeyError が発生するようになりました (GH 42351)

  • 位置スライスを使用した .loc で値を設定することを強制的に禁止。代わりにラベルを使用した .loc または位置を使用した .iloc を使用するように変更 (GH 31840)

  • 小数点以下のない float キーによる位置インデックス付けを強制的に禁止し、代わりに手動で整数にキャストするように変更 (GH 34193)

  • .ilocDataFrame インデクサーを使用することを強制的に禁止し、自動アライメントのために代わりに .loc を使用するように変更 (GH 39022)

  • __getitem__ および __setitem__ メソッドでの set または dict インデクサーの使用を強制的に禁止 (GH 42825)

  • Index でのインデックス付け、または多次元オブジェクト (例: obj[:, None]) を生成する Series での位置インデックス付けを強制的に禁止し、代わりにインデックス付けの前に numpy に変換するように変更 (GH 35141)

  • merge()suffixesdict または set オブジェクトを強制的に禁止 (GH 34810)

  • merge()suffixes キーワードと既存の列によって重複する列を生成することを強制的に禁止 (GH 22818)

  • 異なる数のレベルで merge() または join() を使用することを強制的に禁止 (GH 34862)

  • DataFrame.melt()value_name 引数が DataFrame の列の要素と一致することを強制的に禁止 (GH 35003)

  • DataFrame.to_markdown() および Series.to_markdown()**kwargsshowindex を渡すことを強制的に禁止し、代わりに index を使用するように変更 (GH 33091)

  • Categorical._codes を直接設定する機能を削除 (GH 41429)

  • Categorical.categories を直接設定する機能を削除 (GH 47834)

  • Categorical.add_categories(), Categorical.remove_categories(), Categorical.set_categories(), Categorical.rename_categories(), Categorical.reorder_categories(), Categorical.set_ordered(), Categorical.as_ordered(), Categorical.as_unordered() から引数 inplace を削除 (GH 37981, GH 41118, GH 41133, GH 47834)

  • min_periods=None を指定した Rolling.count() がウィンドウのサイズをデフォルトとすることを強制的に適用 (GH 31302)

  • DataFrame.to_parquet()DataFrame.to_stata()、および DataFrame.to_feather()fnamepath に変更 (GH 30338)

  • スライスを含む単一項目リスト (例: ser[[slice(0, 2)]]) を使用して Series をインデックス付けすることを強制的に禁止。代わりにリストをタプルに変換するか、スライスを直接渡すように変更 (GH 31333)

  • DatetimeIndex インデックスを持つ DataFrame で文字列インデクサーを使用してインデックス付けする際の動作を変更。以前は行のスライスとして動作していましたが、現在は他の列キーと同様に動作します。以前の動作を得るには frame.loc[key] を使用してください (GH 36179)

  • display.max_colwidth オプションが負の整数を受け入れないことを強制的に適用 (GH 31569)

  • 非推奨の display.column_space オプションを削除し、代わりに df.to_string(col_space=...) を使用するように変更 (GH 47280)

  • pandas クラスから非推奨のメソッド mad を削除 (GH 11787)

  • pandas クラスから非推奨のメソッド tshift を削除 (GH 11631)

  • Series に渡される空のデータの動作を変更。デフォルトの dtype が float64 ではなく object になります (GH 29405)

  • タイムゾーンが異なる場合の DatetimeIndex.union()DatetimeIndex.intersection()、および DatetimeIndex.symmetric_difference() の動作を変更し、object dtype にキャストする代わりに UTC に変換するように変更 (GH 39328)

  • utc=False を指定した to_datetime() の引数 "now" の動作を Timestamp("now") と一致するように変更 (GH 18705)

  • タイムゾーンを意識した DatetimeIndex で、タイムゾーンを意識しない datetime オブジェクトまたはその逆でインデックス付けする際の動作を変更。これらは、他の比較不能な型と同様に KeyError を発生させるように動作するようになりました (GH 36148)

  • Index.reindex()Series.reindex()、および DataFrame.reindex() の動作を変更。datetime64 dtype と fill_valuedatetime.date オブジェクトを指定した場合、これらはもはや datetime.datetime オブジェクトと同等と見なされなくなり、再インデックスはオブジェクト dtype にキャストされるようになりました (GH 39767)

  • 明示的に SparseDtype ではない dtype を与えられた場合の SparseArray.astype() の動作を変更。暗黙的に SparseDtype を使用する代わりに、明示的に要求された dtype にキャストするように変更 (GH 34457)

  • Index.ravel() の動作を変更し、np.ndarray ではなく元の Index のビューを返すように変更 (GH 36900)

  • 明示的な name=None を指定した Series.to_frame() および Index.to_frame() の動作を変更し、列名にインデックス名またはデフォルトの 0 を使用する代わりに None を使用するように変更 (GH 45523)

  • bool-dtype の配列と整数 dtype の配列を結合した場合の concat() の動作を変更。整数 dtype ではなく object dtype を返すようになりました。以前の動作を得るには、連結する前に bool オブジェクトを明示的に整数にキャストしてください (GH 45101)

  • 浮動小数点 data と整数 dtype を指定して DataFrame コンストラクターを呼び出した場合の動作を変更。データが損失なくキャストできない場合、Series の動作に合わせて浮動小数点 dtype が保持されるようになりました (GH 41170)

  • 数値エントリを含むオブジェクト dtype の np.ndarray を指定して Index コンストラクターを呼び出した場合の動作を変更。これにより、Series の動作と整合性を持たせるため、数値 dtype を推論する代わりにオブジェクト dtype が保持されるようになりました (GH 42870)

  • Index.__and__()Index.__or__()、および Index.__xor__() の動作を変更し、集合演算のエイリアスではなく論理演算 ( Series の動作と一致) として動作するように変更 (GH 37374)

  • 最初の要素が Categorical であるリストを渡して DataFrame コンストラクターを呼び出した場合の動作を変更。これにより、他の型の場合の動作と整合性を持たせるため、要素を行として扱い object dtype にキャストするように変更 (GH 38845)

  • データがキャストできない dtype (int 以外) を渡して DataFrame コンストラクターを呼び出した場合の動作を変更。dtype を暗黙的に無視する代わりにエラーを発生させるようになりました (GH 41733)

  • Series コンストラクターの動作を変更し、文字列エントリから datetime64 または timedelta64 dtype を推論しないように変更 (GH 41731)

  • np.datetime64 オブジェクトと tz を渡して Timestamp コンストラクターを呼び出した場合の動作を変更し、入力を UTC 時刻ではなくウォールタイムとして解釈するように変更 (GH 42288)

  • Timestamp.utcfromtimestamp() の動作を変更し、Timestamp.utcfromtimestamp(val).timestamp() == val を満たすタイムゾーンを意識したオブジェクトを返すように変更 (GH 45083)

  • SparseArray または SparseDtype を渡して Index コンストラクターを呼び出した場合の動作を変更し、numpy.ndarray にキャストする代わりにその dtype を保持するように変更 (GH 43930)

  • DatetimeTZDtype を持つオブジェクトでの setitem-like 操作 (__setitem__, fillna, where, mask, replace, insert, shift の fill_value) で、タイムゾーンが一致しない値を使用した場合の動作を変更。両方をオブジェクト dtype にキャストする代わりに、値をオブジェクトのタイムゾーンにキャストするように変更 (GH 44243)

  • 浮動小数点 dtype データと DatetimeTZDtype を指定した IndexSeriesDataFrame コンストラクターの動作を変更。整数 dtype データが処理される方法と整合性を持たせるため、データはウォールタイムではなく UTC 時刻として解釈されるようになりました (GH 45573)

  • 整数 dtype と NaN を含む浮動小数点データを指定した Series および DataFrame コンストラクターの動作を変更。これにより IntCastingNaNError が発生するようになりました (GH 40110)

  • 整数 dtype と、この dtype に損失なくキャストするには大きすぎる値を指定した Series および DataFrame コンストラクターの動作を変更。これにより ValueError が発生するようになりました (GH 41734)

  • 整数 dtype と、datetime64 または timedelta64 dtypes のいずれかの値を持つ Series および DataFrame コンストラクターの動作を変更。これにより TypeError が発生するようになりました。代わりに values.view("int64") を使用してください (GH 41770)

  • pandas.DataFrame.resample()pandas.Series.resample() および pandas.Grouper から非推奨の base および loffset 引数を削除。代わりに offset または origin を使用してください (GH 31809)

  • timedelta64[ns] dtype と互換性のない fill_value を指定した Series.fillna() および DataFrame.fillna() の動作を変更。これにより、エラーを発生させる代わりにオブジェクト dtype にキャストされるようになりました (他の dtype の動作と整合) (GH 45746)

  • Series.str.replace()regex のデフォルト引数を True から False に変更。さらに、regex=True を指定した単一文字の pat は、文字列リテラルではなく正規表現として扱われるようになりました。 (GH 36695, GH 24804)

  • bool_only=True を指定した DataFrame.any() および DataFrame.all() の動作を変更。すべての bool 値を持つオブジェクト dtype の列は含まれなくなります。最初に手動で bool dtype にキャストしてください (GH 46188)

  • axis=None を指定した DataFrame.max()DataFrame.minDataFrame.meanDataFrame.medianDataFrame.skewDataFrame.kurt の動作を変更し、両方の軸にわたる集計を適用するスカラーを返すように変更 (GH 45072)

  • Timestampdatetime.date オブジェクトの比較の動作を変更。これらは不平等として比較され、不平等比較ではエラーを発生させるようになりました (datetime.datetime の動作と一致) (GH 36131)

  • NaTdatetime.date オブジェクトの比較の動作を変更。不平等比較ではエラーを発生させるようになりました (GH 39196)

  • リストまたは辞書で使用された場合に Series.transform および DataFrame.transformTypeError を発生させた列を暗黙的に削除する非推奨を強制的に適用 (GH 43740)

  • リストのようなオブジェクトを渡して DataFrame.apply() を呼び出した場合の動作を変更し、部分的な失敗があった場合でもエラーを発生させるように変更 (GH 43740)

  • DataFrame.to_latex() の動作を変更し、Styler.to_latex() を介して Styler 実装を使用するように変更 (GH 47970)

  • 整数キーと Float64Index を持つ Series.__setitem__() の動作を変更。キーがインデックスに存在しない場合、以前はキーを位置として扱っていましたが (series.iloc[key] = val のように動作)、現在はラベルとして扱います (series.loc[key] = val のように動作)。これは Series.__getitem__`() の動作と整合しています (GH 33469)

  • factorize()Index.factorize()、および ExtensionArray.factorize() から na_sentinel 引数を削除 (GH 47157)

  • diff を実装していない ExtensionDtype dtypes を持つ Series.diff() および DataFrame.diff() の動作を変更。これにより、numpy にキャストする代わりに TypeError が発生するようになりました (GH 31025)

  • method="outer" を指定して DataFrame で numpy の "ufunc" を呼び出す非推奨を強制的に適用。これにより NotImplementedError が発生するようになりました (GH 36955)

  • 非数値 dtype を持つ Series 縮約 (rank, any, all, ...) に numeric_only=True を渡すことを強制的に禁止する非推奨を適用 (GH 47500)

  • DataFrameGroupBy.apply() および SeriesGroupBy.apply() の動作を変更し、トランスフォーマーが検出された場合でも group_keys が尊重されるように変更 (GH 34998)

  • DataFrameSeries の比較で、フレームの列がシリーズのインデックスと一致しない場合、自動的にアライメントする代わりに ValueError を発生させるように変更。比較する前に left, right = left.align(right, axis=1, copy=False) を実行してください (GH 36795)

  • DataFrame 縮約で暗黙的にエラーを発生させた列を削除する numeric_only=None (デフォルト) の非推奨を強制的に適用。numeric_only はデフォルトで False になりました (GH 41480)

  • すべてのDataFrameメソッドにおいて、引数 numeric_only のデフォルトを False に変更しました (GH 46096, GH 46906)

  • Series.rank()numeric_only のデフォルトを False に変更しました (GH 47561)

  • numeric_only=False の場合、groupby および resample 操作で不要な列が暗黙的に削除されるという非推奨の動作を強制しました (GH 41475)

  • Rolling, Expanding, および ExponentialMovingWindow 操作で、不要な列が暗黙的に削除されるという非推奨の動作を強制しました。これにより、errors.DataError が発生するようになりました (GH 42834)

  • df.loc[:, foo] = bar または df.iloc[:, foo] = bar で値を設定する動作を変更しました。これらの操作は、キャストにフォールバックする前に、常にその場で値を設定しようと試みるようになりました (GH 45333)

  • 様々な DataFrameGroupBy メソッドで numeric_only のデフォルトを変更しました。すべてのメソッドは、デフォルトで numeric_only=False になりました (GH 46072)

  • Resampler メソッドの numeric_only のデフォルトを False に変更しました (GH 47177)

  • 呼び出し可能オブジェクトが DataFrame を返す DataFrameGroupBy.transform() メソッドを使用すると、入力のインデックスにアラインされるようになりました (GH 47244)

  • DataFrame.groupby() に長さ1の列リストを提供した場合、結果として得られる DataFrameGroupBy オブジェクトを反復処理して返されるキーは、長さ1のタプルになりました (GH 47761)

  • 非推奨のメソッド ExcelWriter.write_cells(), ExcelWriter.save(), ExcelWriter.cur_sheet(), ExcelWriter.handles(), ExcelWriter.path() を削除しました (GH 45795)

  • ExcelWriter の属性 book は、設定できなくなりました。アクセスおよび変更は引き続き可能です (GH 48943)

  • Rolling, Expanding, および ExponentialMovingWindow 操作の未使用の *args および **kwargs を削除しました (GH 47851)

  • DataFrame.to_csv() から非推奨の引数 line_terminator を削除しました (GH 45302)

  • lreshape() から非推奨の引数 label を削除しました (GH 30219)

  • DataFrame.eval() および DataFrame.query()expr 以降の引数はキーワード専用になりました (GH 47587)

  • Index._get_attributes_dict() を削除しました (GH 50648)

  • Series.__array_wrap__() を削除しました (GH 50648)

  • DataFrame.value_counts() の動作を変更しました。リストライク(要素が1つでも複数でも)の場合には MultiIndex を持つ Series を返し、単一のラベルの場合には Index を返すようになりました (GH 50829)

パフォーマンス改善#

バグ修正#

カテゴリカル#

日付時刻ライク#

  • RangeIndex で推論された場合に TypeError を発生させる pandas.infer_freq() のバグ (GH 47084)

  • 大きな整数に対応する文字列引数で OverflowError を誤って発生させる to_datetime() のバグ (GH 50533)

  • errors='coerce' および infer_datetime_format=True の場合に無効なオフセットで発生していた to_datetime() のバグ (GH 48633)

  • tz=None がタイムゾーン対応の dtype またはデータと組み合わせて明示的に指定された場合に発生しない DatetimeIndex コンストラクタのバグ (GH 48659)

  • DatetimeIndex から datetime スカラを減算した場合に元の freq 属性が保持されないバグ (GH 48818)

  • pandas.tseries.holiday.Holiday で、半開の日付間隔が USFederalHolidayCalendar.holidays() からの一貫性のない戻り型を引き起こすバグ (GH 49075)

  • 夏時間移行付近で dateutil または zoneinfo タイムゾーンを使用するタイムゾーン対応dtypeの DatetimeIndex, Series, および DataFrame のレンダリングのバグ (GH 49684)

  • 非ISO8601 format が渡された場合に、Timestamp, datetime.datetime, datetime.date, または np.datetime64 オブジェクトを解析すると ValueError を発生させていた to_datetime() のバグ (GH 49298, GH 50036)

  • 空の文字列と非ISO8601形式が渡された場合に ValueError を発生させていた to_datetime() のバグを修正しました。現在、ISO8601形式との互換性のために、空の文字列は NaT として解析されます (GH 50251)

  • 非ISO8601区切り日付文字列を解析する際に、ユーザーにとって実行可能なものではない UserWarning を表示していた Timestamp のバグ (GH 50232)

  • ISO週ディレクティブとISO曜日ディレクティブを含む形式で日付を解析する際に、誤解を招く ValueError を表示していた to_datetime() のバグ (GH 50308)

  • freq 引数がゼロ期間(例:「0ns」)の場合に、例外を発生させる代わりに誤った結果を返していた Timestamp.round() のバグ (GH 49737)

  • 無効な形式が渡され、errors'ignore' または 'coerce' であった場合に ValueError を発生させていなかった to_datetime() のバグ (GH 50266)

  • DateOffset がミリ秒と別の超日引数で構築すると TypeError をスローしていたバグ (GH 49897)

  • '%Y%m%d' 形式の小数日付文字列を解析する際に ValueError を発生させていなかった to_datetime() のバグ (GH 50051)

  • ISO8601形式で混合オフセットの日付文字列を解析する際に、NoneNaT に変換していなかった to_datetime() のバグ (GH 50071)

  • errors='ignore' および format='%Y%m%d' の場合に、範囲外の日付文字列を解析すると入力が返されなかった to_datetime() のバグ (GH 14487)

  • タイムゾーン対応文字列、ISO8601形式、および utc=False で解析する場合に、タイムゾーンに依存しない datetime.datetime をタイムゾーン対応に変換していた to_datetime() のバグ (GH 50254)

  • ISO8601形式で一部の値がゼロ埋めされていなかった日付を解析する際に ValueError をスローしていた to_datetime() のバグ (GH 21422)

  • format='%Y%m%d' および errors='ignore' を使用する際に、誤った結果を返していた to_datetime() のバグ (GH 26493)

  • format がISO8601ではなかった場合に、日付文字列 'today' および 'now' を解析できなかった to_datetime() のバグ (GH 50359)

  • Timestamp.utctimetuple()TypeError を発生させていたバグ (GH 32174)

  • errors='ignore' で混合オフセットの Timestamp を解析する際に ValueError を発生させていた to_datetime() のバグ (GH 50585)

  • オーバーフロー境界から1 unit 以内の浮動小数点入力が誤って処理されていた to_datetime() のバグ (GH 50183)

  • 「Y」または「M」の単位で to_datetime() を使用すると、逐次的な Timestamp の結果と一致しない誤った結果を返していたバグ (GH 50870)

  • datetimeまたはtimedelta dtypeを持つ Series.interpolate() および DataFrame.interpolate() が誤って ValueError を発生させていたバグ (GH 11312)

  • errors='ignore' の場合に、入力が範囲外であった場合に to_datetime() が入力を返さなかったバグ (GH 50587)

  • タイムゾーン対応の datetime64 列を持つ DataFrame 入力が与えられた場合に、タイムゾーン対応が誤って失われていた DataFrame.from_records() のバグ (GH 51162)

  • errors='coerce' で日付文字列を解析する際に decimal.InvalidOperation を発生させていた to_datetime() のバグ (GH 51084)

  • unitorigin の両方が指定された場合に誤った結果を返していた to_datetime() のバグ (GH 42624)

  • タイムゾーン対応の datetime を含むオブジェクトdtypeオブジェクトまたは文字列を datetime64[ns] に変換する際に、TypeError を発生させる代わりに誤ってUTCとしてローカライズしていた Series.astype() および DataFrame.astype() のバグ (GH 50140)

  • datetimeまたはtimedelta dtypeを持つ DataFrameGroupBy.quantile() および SeriesGroupBy.quantile() で、NaT を含むグループで誤った結果を与えていたバグ (GH 51373)

  • PeriodDtype または DatetimeTZDtype で誤って発生させていた DataFrameGroupBy.quantile() および SeriesGroupBy.quantile() のバグ (GH 51373)

Timedelta#

  • 入力がnull許容dtype Float64 を持つ場合にエラーを発生させていた to_timedelta() のバグ (GH 48796)

  • np.timedelta64("nat") が与えられた場合に、NaT を返す代わりに誤って例外を発生させていた Timedelta コンストラクタのバグ (GH 48898)

  • Timedelta オブジェクトとキーワード (例: days, seconds) の両方が渡された場合に発生しなかった Timedelta コンストラクタのバグ (GH 48898)

  • 非常に大きな datetime.timedelta オブジェクトとの Timedelta 比較で、誤って OutOfBoundsTimedelta を発生させていたバグ (GH 49021)

タイムゾーン#

  • 異種タイムゾーンを持つ複数のタイムゾーン対応 datetime オブジェクトを含むオブジェクトdtypeを DatetimeTZDtype に変換する際に、誤って例外を発生させていた Series.astype() および DataFrame.astype() のバグ (GH 32581)

  • format%Z で指定された場合に、タイムゾーン名を持つ日付文字列を解析できなかった to_datetime() のバグ (GH 49748)

  • Timestamp.tz_localize()ambiguous パラメータに無効な値を渡した場合のより良いエラーメッセージ (GH 49565)

  • 文字列解析のバグで、Timestamp が無効なタイムゾーンで構築されることを誤って許可し、印刷しようとすると例外が発生するバグを修正しました (GH 50668)

  • objects_to_datetime64ns() の TypeError メッセージを修正し、DatetimeIndex が混合タイムゾーンを持っていることを通知するようにしました (GH 50974)

数値#

  • 入力に混合DataFrame型とSeries型が含まれる場合に、ufunc を適用できない DataFrame.add() のバグ (GH 39853)

  • マスクされたdtypeとnumpy dtypeを組み合わせたときにマスクが伝播しない Series の算術演算のバグ (GH 45810, GH 42630)

  • ArrowDtype でサポートされたデータを使用する際に、誤った TypeError が常に発生していた DataFrame.sem() および Series.sem() のバグ (GH 49759)

  • リストとマスクされた Series の場合、Series.__add__() がオブジェクトにキャストされていたバグ (GH 22962)

  • NA 値がある場合に dropna=False が尊重されなかった mode() のバグ (GH 50982)

  • engine="numexpr" で、列名が min または max の場合に TypeError を発生させていた DataFrame.query() のバグ (GH 50937)

  • pd.NaT を含むtz対応データで axis=1 の場合に、誤った結果を返していた DataFrame.min() および DataFrame.max() のバグ (GH 51242)

変換#

  • 文字列リストから int64 dtypeを持つ Series を構築すると、キャストする代わりに例外を発生させていたバグ (GH 44923)

  • マスクされたdtypeと NA 値を持つブール値で Series を構築すると例外が発生していたバグ (GH 42137)

  • 関数呼び出しに負の値がある場合に AttributeError を誤って発生させていた DataFrame.eval() のバグ (GH 46471)

  • SeriesNA を含み、dtype が object である場合に、dtype を null許容dtypeに変換しなかった Series.convert_dtypes() のバグ (GH 48791)

  • ExtensionDtype サブクラスで kind="M" を持つものがタイムゾーン型として解釈されていたバグ (GH 34986)

  • 文字列またはバイナリのシーケンスが渡された場合に NotImplementedError を発生させていた arrays.ArrowExtensionArray のバグ (GH 49172)

  • 非pyarrow文字列dtypeからpyarrow数値型に変換する際に pyarrow.ArrowInvalid を発生させていた Series.astype() のバグ (GH 50430)

  • string に変換し、copy=False の場合に、入力配列をその場で変更していた DataFrame.astype() のバグ (GH 51073)

  • na_value を適用する前に NumPy 配列に変換していた Series.to_numpy() のバグ (GH 48951)

  • pyarrow dtypeに変換する際にデータをコピーしなかった DataFrame.astype() のバグ (GH 50984)

  • format が ISO8601 形式であった場合に、exact 引数が尊重されなかった to_datetime() のバグ (GH 12649)

  • pyarrow期間型に変換する際に TypeError を発生させていた TimedeltaArray.astype() のバグ (GH 49795)

  • DataFrame.eval()DataFrame.query() におけるバグで、拡張配列のdtypeに対して例外が発生していました (GH 29618, GH 50261, GH 31913)。

  • Series()Index から作成し、dtypeIndexdtype と同じ場合にデータがコピーされないバグがありました (GH 52008)。

文字列#

  • pandas.api.types.is_string_dtype()StringDtype または pyarrow.string() を持つ ArrowDtype に対して True を返さないバグがありました (GH 15585)。

  • 文字列のdtypeを「datetime64[ns]」または「timedelta64[ns]」に変換する際に、誤って TypeError を発生させるバグがありました (GH 36153)。

  • 文字列dtypeの列に配列の値を設定する際に、欠損値が含まれる場合に副作用として配列が変更されるバグがありました (GH 51299)。

Interval#

インデックス付け#

  • DataFrame.__setitem__() で、インデクサーが boolean dtype の DataFrame の場合に例外が発生するバグがありました (GH 47125)。

  • DataFrame.reindex() で、uint dtype の列とインデックスをインデックス指定する場合に誤った値で埋められるバグがありました (GH 48184)。

  • DataFrame.loc() で、異なるdtypeを持つ DataFrame を設定すると、値が単一のdtypeに強制されるバグがありました (GH 50467)。

  • DataFrame.sort_values() で、by が空のリストで inplace=True の場合に None が返されないバグがありました (GH 50643)。

  • DataFrame.loc() で、リストインデクサーを使用して値を設定する際にdtypeが強制されるバグがありました (GH 49159)。

  • Series.loc() で、スライスインデクサーの範囲外の終わりに対してエラーが発生するバグがありました (GH 50161)。

  • DataFrame.loc() で、すべての Falsebool インデクサーと空のオブジェクトを使用した場合に ValueError が発生するバグがありました (GH 51450)。

  • DataFrame.loc() で、bool インデクサーと MultiIndex を使用した場合に ValueError が発生するバグがありました (GH 47687)。

  • DataFrame.loc() で、非スカラーインデクサーを使用して pyarrow バックアップ列の値を設定する際に IndexError が発生するバグがありました (GH 50085)。

  • DataFrame.__getitem__(), Series.__getitem__(), DataFrame.__setitem__(), および Series.__setitem__() で、拡張浮動小数点dtype (Float64 & Float64) または整数を使用した複素数dtypeのインデックス指定時にバグがありました (GH 51053)。

  • DataFrame.loc() で、空のインデクサーと互換性のない値を設定する際にオブジェクトが変更されるバグがありました (GH 45981)。

  • DataFrame.__setitem__() で、右辺が MultiIndex 列を持つ DataFrame の場合に ValueError が発生するバグがありました (GH 49121)。

  • DataFrame.reindex() で、DataFrame が単一の拡張配列列を持つ場合に、columnsindex を再インデックスする際にdtypeを object にキャストするバグがありました (GH 48190)。

  • DataFrame.iloc() で、インデクサーが数値拡張配列dtypeを持つ Series の場合に IndexError が発生するバグがありました (GH 49521)。

  • describe() で、結果のインデックスにパーセンタイルをフォーマットする際に、必要以上の小数点が表示されるバグがありました (GH 46362)。

  • DataFrame.compare() で、null許容dtypeで NA と値を比較する際に差異を認識しないバグがありました (GH 48939)。

  • Series.rename() で、MultiIndex を使用した場合に拡張配列dtypeが失われるバグがありました (GH 21055)。

  • DataFrame.isetitem() で、DataFrame の拡張配列dtypeがオブジェクトに強制されるバグがありました (GH 49922)。

  • Series.__getitem__() で、空のpyarrowバックアップオブジェクトから選択する際に破損したオブジェクトが返されるバグがありました (GH 51734)。

  • BusinessHour で、インデックスに開始時間が含まれていない場合に DatetimeIndex の作成が失敗するバグがありました (GH 49835)。

欠損値#

  • Index.equals() で、IndexNA を含むタプルで構成されている場合に TypeError が発生するバグがありました (GH 48446)。

  • Series.map() で、データにNaNがあり、defaultdictマッピングが使用された場合に誤った結果が生じるバグがありました (GH 48813)。

  • NA で、bytes オブジェクトとの二項演算を実行する際に NA を返す代わりに TypeError が発生するバグがありました (GH 49108)。

  • DataFrame.update() で、overwrite=False を使用した場合に、selfNaT 値を持つ列があり、その列が other に存在しない場合に TypeError が発生するバグがありました (GH 16713)。

  • Series.replace() で、オブジェクトdtypeの NA を含む Series の値を置換する際に RecursionError が発生するバグがありました (GH 47480)。

  • Series.replace() で、NA を含む数値 Series の値を置換する際に RecursionError が発生するバグがありました (GH 50758)。

MultiIndex#

  • MultiIndex.get_indexer() で、NaN 値が一致しないバグがありました (GH 29252, GH 37222, GH 38623, GH 42883, GH 43222, GH 46173, GH 48905)。

  • MultiIndex.argsort() で、インデックスに NA が含まれている場合に TypeError が発生するバグがありました (GH 48495)。

  • MultiIndex.difference() で、拡張配列dtypeが失われるバグがありました (GH 48606)。

  • MultiIndex.set_levels で、空のレベルを設定する際に IndexError が発生するバグがありました (GH 48636)。

  • MultiIndex.unique() で、拡張配列dtypeが失われるバグがありました (GH 48335)。

  • MultiIndex.intersection() で、拡張配列が失われるバグがありました (GH 48604)。

  • MultiIndex.union() で、拡張配列が失われるバグがありました (GH 48498, GH 48505, GH 48900)。

  • MultiIndex.union() で、sort=None かつインデックスに欠損値が含まれる場合にソートされないバグがありました (GH 49010)。

  • MultiIndex.append() で、名前の等価性がチェックされないバグがありました (GH 48288)。

  • MultiIndex.symmetric_difference() で、拡張配列が失われるバグがありました (GH 48607)。

  • MultiIndex.join() で、MultiIndex に重複がある場合にdtypeが失われるバグがありました (GH 49830)。

  • MultiIndex.putmask() で、拡張配列が失われるバグがありました (GH 49830)。

  • MultiIndex.value_counts() で、MultiIndex ではなく、タプルのフラットインデックスでインデックス付けされた Series が返されるバグがありました (GH 49558)。

I/O#

  • read_sas() で、DataFrame の断片化が発生し、errors.PerformanceWarning が発生するバグがありました (GH 48595)。

  • read_excel() で、ファイルの読み込み中に例外が発生した場合に、問題のあるシート名を含めることでエラーメッセージが改善されました (GH 48706)。

  • PyArrowバックアップされたデータの一部をピクルス化する際に、サブセットではなくデータ全体がシリアライズされるバグがありました (GH 42600)。

  • read_sql_query() で、chunksize が指定され、結果が空の場合に dtype 引数が無視されるバグがありました (GH 50245)。

  • read_csv() で、1行のcsvファイルで names よりも列数が少ない場合に engine="c"errors.ParserError が発生するバグがありました (GH 47566)。

  • read_json() で、orient="table"NA 値を使用した場合に例外が発生するバグがありました (GH 40255)。

  • string dtypeの表示で、ストレージオプションが表示されないバグがありました (GH 50099)。

  • DataFrame.to_string() で、header=False を使用した場合に、データの最初の行と同じ行にインデックス名が印刷されるバグがありました (GH 49230)。

  • DataFrame.to_string() で、拡張配列のfloatフォーマッタが無視されるバグがありました (GH 39336)。

  • 内部JSONモジュールの初期化に起因するメモリリークが修正されました (GH 49222)。

  • json_normalize() で、sep 引数と一致する列名の先頭文字が誤って削除される問題が修正されました (GH 49861)。

  • read_csv() で、NA を含む場合に拡張配列dtypeで不必要にオーバーフローするバグがありました (GH 32134)。

  • DataFrame.to_dict() で、NANone に変換されないバグがありました (GH 50795)。

  • DataFrame.to_json() で、文字列のエンコードに失敗した際にセグメンテーション違反が発生するバグがありました (GH 50307)。

  • DataFrame.to_html() で、DataFrame が非スカラーデータを含む場合に na_rep が設定されていても機能しないバグがありました (GH 47103)。

  • read_xml() で、iterparseが使用された場合にファイルライクオブジェクトが失敗するバグがありました (GH 50641)。

  • read_csv() で、engine="pyarrow" の場合に encoding パラメータが正しく処理されないバグがありました (GH 51302)。

  • read_xml() で、iterparseが使用された場合に繰り返し要素が無視されるバグがありました (GH 51183)。

  • ExcelWriter で、インスタンス化中に例外が発生した場合にファイルハンドルが開かれたままになるバグがありました (GH 51443)。

  • DataFrame.to_parquet() で、engine="pyarrow" の場合に、非文字列のインデックスまたは列が ValueError を発生させるバグがありました (GH 52036)。

期間#

  • Period.strftime() および PeriodIndex.strftime() で、ロケール固有のディレクティブが渡された場合に UnicodeDecodeError が発生するバグがありました (GH 46319)。

  • Period オブジェクトを DateOffset オブジェクトの配列に追加する際に、誤って TypeError が発生するバグがありました (GH 50162)。

  • Period で、ナノ秒よりも細かい解像度の文字列を渡した場合に、余分な精度を削除する代わりに KeyError が発生するバグがありました (GH 50417)。

  • 「2017-01-23/2017-01-29」のような週期間を表す文字列が、週頻度ではなく分頻度として誤って解析されるバグがありました (GH 50803)。

  • DataFrameGroupBy.sum(), DataFrameGroupByGroupBy.cumsum(), DataFrameGroupByGroupBy.prod(), DataFrameGroupByGroupBy.cumprod() で、PeriodDtype を使用した場合に TypeError が発生しないバグがありました (GH 51040)。

  • Period で空の文字列を解析する際に、NaT を返す代わりに誤って ValueError が発生するバグがありました (GH 51349)。

プロット#

  • DataFrame.plot.hist() で、dataNaN 値に対応する weights の要素が削除されないバグがありました (GH 48884)。

  • ax.set_xlim が時折 UserWarning を発生させ、set_xlim が解析引数を受け入れないためユーザーが対処できない問題がありました。コンバータは代わりに Timestamp() を使用するようになりました (GH 49148)。

Groupby/resample/rolling#

  • ExponentialMovingWindow で、online がサポートされていない操作に対して NotImplementedError を発生させないバグがありました (GH 48834)。

  • DataFrameGroupBy.sample() で、オブジェクトが空の場合に ValueError が発生するバグがありました (GH 48459)。

  • Series.groupby() で、インデックスのエントリがインデックス名と等しい場合に ValueError が発生するバグがありました (GH 48567)。

  • DataFrameGroupBy.resample() で、空のDataFrameを渡した場合に一貫性のない結果が生成されるバグがありました (GH 47705)。

  • DataFrameGroupBy および SeriesGroupBy で、カテゴリカルインデックスでグループ化する際に、結果に未観測のカテゴリが含まれないバグがありました (GH 49354)。

  • DataFrameGroupBy および SeriesGroupBy で、カテゴリでグループ化する際に、入力インデックスに応じて結果の順序が変更されるバグがありました (GH 49223)。

  • DataFrameGroupBy および SeriesGroupBy で、カテゴリデータでグループ化する際に、sort=False と一緒に使用した場合でも結果値がソートされるバグがありました (GH 42482)。

  • DataFrameGroupBy.apply() および SeriesGroupBy.apply で、as_index=False を使用した場合に、グループ化キーを使用すると TypeError が発生する際に、グループ化キーを使用せずに計算を試みないバグがありました (GH 49256)。

  • DataFrameGroupBy.describe() で、グループキーが記述されるバグがありました (GH 49256)。

  • SeriesGroupBy.describe() で、as_index=False を使用した場合に誤った形状を持つバグがありました (GH 49256)。

  • DataFrameGroupBy および SeriesGroupBy で、dropna=False を使用した場合に、グルーパがカテゴリカルである場合にNA値が削除されるバグがありました (GH 36327)。

  • SeriesGroupBy.nunique() で、グルーパが空のカテゴリカルで observed=True の場合に誤って例外が発生するバグがありました (GH 21334)。

  • SeriesGroupBy.nth() で、DataFrameGroupBy からサブセット化した後にグルーパにNA値が含まれる場合に例外が発生するバグがありました (GH 26454)。

  • DataFrame.groupby() で、as_index=False の場合に key で指定された Grouper が結果に含まれないバグがありました (GH 50413)。

  • DataFrameGroupBy.value_counts() で、TimeGrouper と一緒に使用した場合に例外が発生するバグがありました (GH 50486)。

  • Resampler.size() で、MultiIndex を持つ Series ではなく、ワイドな DataFrame が返されるバグがありました (GH 46826)。

  • DataFrameGroupBy.transform() および SeriesGroupBy.transform() で、グルーパが "idxmin" および "idxmax" 引数に対して axis=1 を持つ場合に誤って例外が発生するバグがありました (GH 45986)。

  • DataFrameGroupBy で、空のDataFrame、カテゴリカルグルーパ、および dropna=False と一緒に使用した場合に例外が発生するバグがありました (GH 50634)。

  • SeriesGroupBy.value_counts() で、sort=False が尊重されないバグがありました (GH 50482)。

  • DataFrameGroupBy.resample() で、時間インデックスでリサンプリングする際に、キーリストから結果を取得する際に KeyError が発生するバグがありました (GH 50840)。

  • DataFrameGroupBy.transform() および SeriesGroupBy.transform() で、グルーパが "ngroup" 引数に対して axis=1 を持つ場合に誤って例外が発生するバグがありました (GH 45986)。

  • DataFrameGroupBy.describe() で、データに重複する列がある場合に誤った結果が生成されるバグがありました (GH 50806)。

  • DataFrameGroupBy.agg() で、engine="numba"as_index=False を尊重しないバグがありました (GH 51228)。

  • DataFrameGroupBy.agg(), SeriesGroupBy.agg(), および Resampler.agg() で、関数のリストが渡された場合に引数が無視されるバグがありました (GH 50863)。

  • DataFrameGroupBy.ohlc() で、as_index=False が無視されるバグがありました (GH 51413)。

  • DataFrameGroupBy.agg() で、列をサブセット化 (.groupby(...)[["a", "b"]] など) した後に、結果にグループ化が含まれないバグがありました (GH 51186)。

再整形#

スパース#

  • Series.astype() で、datetime64[ns] サブタイプを持つ SparseDtypeint64 dtypeに変換する際に、非スパースな動作と一貫性なく例外が発生するバグがありました (GH 49631,:issue:50087)。

  • Series.astype() で、datetime64[ns] から Sparse[datetime64[ns]] に変換する際に誤って例外が発生するバグがありました (GH 50082)。

  • Series.sparse.to_coo() で、MultiIndexExtensionArray が含まれている場合に SystemError が発生するバグがありました (GH 50996)。

ExtensionArray#

  • Series.mean() で、null許容整数で不必要にオーバーフローするバグがありました (GH 48378)。

  • Series.tolist() で、null許容dtypeがPythonスカラーではなくnumpyスカラーを返すバグがありました (GH 49890)。

  • Series.round() で、pyarrowバックアップdtypeに対して AttributeError が発生するバグがありました (GH 50437)。

  • 空のDataFrameをExtensionDtypeで別の同じExtensionDtypeを持つDataFrameと結合すると、結果のdtypeがオブジェクトに変わるバグがありました (GH 48510)。

  • array.PandasArray.to_numpy() で、na_value が指定された場合に NA 値で例外が発生するバグがありました (GH 40638)。

  • api.types.is_numeric_dtype() で、カスタム ExtensionDtype_is_numericTrue を返した場合に True を返さないバグがありました (GH 50563)。

  • api.types.is_integer_dtype(), api.types.is_unsigned_integer_dtype(), api.types.is_signed_integer_dtype(), api.types.is_float_dtype() で、カスタム ExtensionDtypekind が対応するNumPy型を返した場合に True を返さないバグがありました (GH 50667)。

  • Series コンストラクタで、null許容符号なし整数dtypeに対して不必要にオーバーフローするバグがありました (GH 38798, GH 25880)。

  • StringArray に非文字列値を設定する際に、TypeError ではなく ValueError が発生するバグがありました (GH 49632)。

  • DataFrame.reindex() で、ExtensionDtypeを持つ列の場合にデフォルトの copy=True キーワードが尊重されないバグがありました (結果として、getitem ([]) で複数の列を選択した場合も正しくコピーされませんでした) (GH 51197)。

  • ArrowExtensionArray の論理演算子 & および |KeyError が発生するバグがありました (GH 51688)。

Styler#

メタデータ#

その他#

  • dtype文字列に「[pyarrow]」が複数回含まれる場合に誤って受け入れられるバグがありました (GH 51548)。

  • Series.searchsorted() で、DataFrame をパラメータ value として受け入れる際の動作が一貫しないバグがありました (GH 49620)。

  • array() で、DataFrame 入力に対して例外が発生しないバグがありました (GH 51167)。

貢献者#

今回のリリースには合計260名の方々がパッチに貢献しました。名前の横に「+」が付いている方は、今回初めてパッチに貢献しました。

  • 5j9 +

  • ABCPAN-rank +

  • Aarni Koskela +

  • Aashish KC +

  • Abubeker Mohammed +

  • Adam Mróz +

  • Adam Ormondroyd +

  • Aditya Anulekh +

  • Ahmed Ibrahim

  • Akshay Babbar +

  • Aleksa Radojicic +

  • Alex +

  • Alex Buzenet +

  • Alex Kirko

  • Allison Kwan +

  • Amay Patel +

  • Ambuj Pawar +

  • Amotz +

  • Andreas Schwab +

  • Andrew Chen +

  • Anton Shevtsov

  • Antonio Ossa Guerra +

  • Antonio Ossa-Guerra +

  • Anushka Bishnoi +

  • Arda Kosar

  • Armin Berres

  • Asadullah Naeem +

  • Asish Mahapatra

  • Bailey Lissington +

  • BarkotBeyene

  • Ben Beasley

  • Bhavesh Rajendra Patil +

  • Bibek Jha +

  • Bill +

  • Bishwas +

  • CarlosGDCJ +

  • カルロッタ・ファビアン +

  • クリス・ロス +

  • チャック・カドマン +

  • コラリエン +

  • DG +

  • ダン・ヘンドリー +

  • ダニエル・アイザック

  • デビッド・クラインディーンスト +

  • デビッド・ポズニック +

  • デビッド・ルーデル +

  • デビッド・クラインディーンスト +

  • デア・マリア・レオン +

  • ディーパック・シロヒワル +

  • デニス・チュクウンタ

  • ダグラス・ローマン +

  • ドリース・シャウモント

  • ダスティン K +

  • エドアルド・アバティ +

  • エドゥアルド・チャベス +

  • エゲ・オズグログル +

  • エカテリーナ・ボロビコワ +

  • イーライ・シュワルツ +

  • エルビス・リム +

  • エミリー・テイラー +

  • エマ・カルバラル・ヘア +

  • エリック・ウェルチ +

  • ファンチェン・リー

  • フローリアン・ホフシュテッター +

  • フリン・オーウェン +

  • フレドリック・アーランドソン +

  • ガウラフ・シェニ

  • ジオレス・チョウ +

  • ジョージ・ムニョロ +

  • ギルヘルム・ベルトラミーニ

  • グルヌール・バイムカンベトワ +

  • H L +

  • ハンス

  • ハティム・ザヒド +

  • ハイヨーダ +

  • ヒキ +

  • ヒマンシュ・ワーグ +

  • フーゴ・ファン・ケメナーデ +

  • イディル・イスミグゼル +

  • アーブ・ラスティッグ

  • アイザック・チュン

  • アイザック・ヴィルシュプ

  • JHM ダービーシャー

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

  • JMBurley

  • ハイメ・ディ・クリスティーナ

  • ヤン・コッホ

  • ヤンVHII +

  • ヤノシュ・リーベセル

  • ジャスマンディープカウル +

  • ジェレミー・チュループ

  • ジェシカ M +

  • ヨナス・ハーグ

  • Joris Van den Bossche

  • ジョアン・メイレーレス +

  • ジュリア・アウン +

  • ジュスタス・マギン +

  • カン・スミン +

  • ケビン・シェパード

  • コー・チェン・ウェイ

  • キアン・エリアシ

  • コスティア・ファーバー +

  • コトリンアイランド +

  • ラクマル・ピンナドゥワゲ +

  • ラクシャ A アグラワル +

  • ローレンス・ミッチェル +

  • レヴィ・オビ +

  • ロイック・ディリドゥール

  • ロレンツォ・ヴァイニグリ +

  • ルカ・ピッツィーニ +

  • ルーカス・ダモ +

  • Luke Manley

  • マドゥリ・パティル +

  • Marc Garcia

  • Marco Edward Gorelli

  • マルコ・ゴレリ

  • MarcoGorelli

  • マレン・ウェスターマン +

  • マリア・スタジェロワ +

  • マリー K +

  • マリエル +

  • マーク・ハルフーシュ +

  • マルコ・パチャク +

  • マーティン +

  • マテウス・セルケイラ +

  • マテウス・ペドロニ +

  • マッテオ・ラソ +

  • Matthew Roeschke

  • ミーシークスマシン +

  • メフディ・モハマディ +

  • マイケル・ハリス +

  • マイケル・ミオール +

  • ナタリア・モケーバ +

  • ニール・ムッピディ +

  • ニック・クルーズ

  • ニシュ・チョードリー +

  • ノア・タミール

  • 小林則忠

  • オムカル・ヤダブ +

  • P. タリー +

  • パブロ +

  • Pandas Development Team

  • パーフェイト・ガサナ

  • Patrick Hoefler

  • ペドロ・ナハト +

  • フィリップ +

  • ピエトロ・バティストン

  • プージャ・スブラマニアム +

  • プラナフ・サイブシャン・ラブリ +

  • プラナフ. P. A +

  • ラルフ・ゴンマーズ +

  • ラフスク +

  • Richard Shadrach

  • ロブスドゥデ +

  • ロジャー

  • ロジャー・トーマス

  • ロジャートーマス +

  • SFuller4 +

  • サラフディン +

  • サム・ラオ

  • ショーン・パトリック・マロイ +

  • セバスチャン・ロール +

  • シャンタヌ

  • シャシュワット +

  • シャシュワット・アグラワル +

  • シコ・ワムウェア +

  • ショーハム・デブナス

  • シュブハンカー・ロハニ +

  • シッダールタ・ガンディー +

  • Simon Hawkins

  • ソウミク・ドゥッタ +

  • ソウロフ・タルクダー +

  • ステファニー・モリン

  • ステファニー・ゼンガー +

  • ステフフェン・ショーン +

  • スティーブン・ロトンド

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

  • スダンシュ +

  • スヴェン

  • シルヴァン・マリー

  • シルヴァン・マリー

  • タベア・コッセン +

  • テイラー・パッカード

  • テルジ・ピーターセン

  • ティエリー・モワザン

  • トーマス H +

  • Thomas Li

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

  • ツヴィカ S +

  • ツヴィカ・シャピラ +

  • ヴァムシ・ヴェルマ +

  • ヴィニシウス・アキラ +

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

  • ウィリアム・エイド

  • ウィリアム・ブルム +

  • ウィルソン・シン +

  • シャオ・ユアン +

  • エックスノット +

  • ヤシン・タタール +

  • ユアンハオ・ゲン

  • イヴァン・シーワン +

  • ザカリー・ムーン +

  • ゼンボ・ワン +

  • アボンテ +

  • アドリアンパシフィコ +

  • アルム

  • アモッツォップ +

  • アンディジェッセン +

  • アノンマウス1 +

  • バン128 +

  • ビシュワス・ジャ +

  • カルホッケメイヤー +

  • カーラ-アルベス-24 +

  • カルロッタ +

  • カサディピエトラ +

  • カトマル22 +

  • cfabian +

  • コーダムース +

  • データゼリク

  • デビッドレオン123 +

  • デペンダーボット[bot] +

  • fdrocha +

  • github-actions[bot]

  • ヒマンシュ・ワーグ +

  • イオファル +

  • ジャキルカム +

  • jbrockmendel

  • jnclt +

  • ジョエルチェン +

  • ジョエルソノーダ +

  • ジョシュアベロ2550

  • ジョイスワムウェア +

  • キャスリーンハン +

  • クラスチ +

  • ルトニアッツィ +

  • ルーク396 +

  • ミロス・マルティノフ +

  • ミナット-ハブ +

  • mliu08 +

  • モノサンズ +

  • ネアルズム

  • ニキタヴェド +

  • パラドックス-ラボ +

  • パルテフ

  • ライサズ +

  • ラム・ヴィクラム・シン +

  • レベッカ-パーマー

  • サルバサンジェイ +

  • セルジャクス +

  • シルビアオボ +

  • スミージ720 +

  • ソウミルバルドータ +

  • ステラリン7 +

  • ストロベリービーチサンダル +

  • トモスホウ +

  • ウッズゼル +

  • yqyqyq-W +

  • ユン +

  • アーダーム・リッパイ

  • 김동현 (Daniel Donghyun Kim) +