1.3.0の新機能 (2021年7月2日)#

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

警告

新しいExcel 2007+ (.xlsx) ファイルを読み込む際、read_excel() のデフォルト引数 engine=None は、オプション io.excel.xlsx.reader"auto" に設定されている場合、すべての場合で openpyxl エンジンを使用するようになりました。以前は、一部のケースでは代わりに xlrd エンジンを使用していました。この変更の背景については、1.2.0の新機能を参照してください。

機能強化#

CSVまたはJSONファイルを読み込む際のカスタムHTTP(s)ヘッダー#

fsspecによって処理されないリモートURL(例:HTTPおよびHTTPS)から読み込む際、storage_options に渡される辞書は、リクエストに含まれるヘッダーを作成するために使用されます。これは、User-Agentヘッダーを制御したり、他のカスタムヘッダーを送信したりするために使用できます (GH 36688)。例:

In [1]: headers = {"User-Agent": "pandas"}
In [2]: df = pd.read_csv(
   ...:     "https://download.bls.gov/pub/time.series/cu/cu.item",
   ...:     sep="\t",
   ...:     storage_options=headers
   ...: )

XMLドキュメントの読み書き#

read_xml()DataFrame.to_xml() を使用して、XML ドキュメントの浅いバージョンの読み込みとレンダリングのためのI/Oサポートを追加しました。lxml をパーサーとして使用することで、XPath 1.0とXSLT 1.0の両方が利用可能です。 (GH 27554)

In [1]: xml = """<?xml version='1.0' encoding='utf-8'?>
   ...: <data>
   ...:  <row>
   ...:     <shape>square</shape>
   ...:     <degrees>360</degrees>
   ...:     <sides>4.0</sides>
   ...:  </row>
   ...:  <row>
   ...:     <shape>circle</shape>
   ...:     <degrees>360</degrees>
   ...:     <sides/>
   ...:  </row>
   ...:  <row>
   ...:     <shape>triangle</shape>
   ...:     <degrees>180</degrees>
   ...:     <sides>3.0</sides>
   ...:  </row>
   ...:  </data>"""

In [2]: df = pd.read_xml(xml)
In [3]: df
Out[3]:
      shape  degrees  sides
0    square      360    4.0
1    circle      360    NaN
2  triangle      180    3.0

In [4]: df.to_xml()
Out[4]:
<?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>

詳細については、I/OツールのユーザーガイドのXMLの書き込みを参照してください。

Stylerの機能強化#

Styler に焦点を当てた開発を行いました。改訂および改善されたStylerドキュメントも参照してください (GH 39720, GH 39317, GH 40493)。

DataFrameコンストラクタがdictで copy=False を尊重する#

DataFramecopy=False を指定して辞書を渡した場合、コピーは作成されなくなりました (GH 32960)。

In [1]: arr = np.array([1, 2, 3])

In [2]: df = pd.DataFrame({"A": arr, "B": arr.copy()}, copy=False)

In [3]: df
Out[3]: 
   A  B
0  1  1
1  2  2
2  3  3

df["A"]arr のビューのままです。

In [4]: arr[0] = 0

In [5]: assert df.iloc[0, 0] == 0

copy を渡さない場合のデフォルトの動作は変更されません。つまり、コピーが作成されます。

PyArrowをバックエンドとする文字列データ型#

文字列データ専用の拡張型である StringDtype を強化しました。 (GH 39908)

現在、StringDtypestorage キーワードオプションを指定することが可能になりました。pandasオプションを使用するか、dtype='string[pyarrow]' を使用してdtypeを指定することで、StringArrayをPythonオブジェクトのNumPy配列ではなくPyArrow配列でバックアップできます。

PyArrowをバックエンドとするStringArrayには、pyarrow 1.0.0以上がインストールされている必要があります。

警告

string[pyarrow] は現在実験的とみなされています。実装およびAPIの一部は警告なしに変更される可能性があります。

In [6]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype(storage="pyarrow"))
Out[6]: 
0     abc
1    <NA>
2     def
dtype: string

エイリアス "string[pyarrow]" も使用できます。

In [7]: s = pd.Series(['abc', None, 'def'], dtype="string[pyarrow]")

In [8]: s
Out[8]: 
0     abc
1    <NA>
2     def
dtype: string

pandasオプションを使用してPyArrowをバックエンドとする文字列配列を作成することもできます。

In [9]: with pd.option_context("string_storage", "pyarrow"):
   ...:     s = pd.Series(['abc', None, 'def'], dtype="string")
   ...: 

In [10]: s
Out[10]: 
0     abc
1    <NA>
2     def
dtype: string

通常の文字列アクセサメソッドが機能します。適切な場合、SeriesまたはDataFrameのカラムの戻り値の型も文字列dtypeになります。

In [11]: s.str.upper()
Out[11]: 
0     ABC
1    <NA>
2     DEF
dtype: string

In [12]: s.str.split('b', expand=True).dtypes
Out[12]: 
0    string[pyarrow]
1    string[pyarrow]
dtype: object

整数を返す文字列アクセサメソッドは Int64Dtype の値を返します。

In [13]: s.str.count("a")
Out[13]: 
0       1
1    <NA>
2       0
dtype: Int64

中央揃えされた日付時刻のようなローリングウィンドウ#

日付時刻のようなインデックスを持つDataFrameおよびSeriesオブジェクトでローリング計算を実行する際、中央揃えされた日付時刻のようなウィンドウを使用できるようになりました (GH 38780)。例:

In [14]: df = pd.DataFrame(
   ....:     {"A": [0, 1, 2, 3, 4]}, index=pd.date_range("2020", periods=5, freq="1D")
   ....: )
   ....: 

In [15]: df
Out[15]: 
            A
2020-01-01  0
2020-01-02  1
2020-01-03  2
2020-01-04  3
2020-01-05  4

In [16]: df.rolling("2D", center=True).mean()
Out[16]: 
              A
2020-01-01  0.5
2020-01-02  1.5
2020-01-03  2.5
2020-01-04  3.5
2020-01-05  4.0

その他の機能強化#

注目すべきバグ修正#

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

Categorical.unique は、常に元のdtypeを維持するようになりました#

以前は、カテゴリカルデータで Categorical.unique() を呼び出すと、新しい配列内の未使用のカテゴリが削除され、新しい配列のdtypeが元の配列とは異なるものになっていました (GH 18291)

この例として、以下を考慮すると

In [17]: dtype = pd.CategoricalDtype(['bad', 'neutral', 'good'], ordered=True)

In [18]: cat = pd.Categorical(['good', 'good', 'bad', 'bad'], dtype=dtype)

In [19]: original = pd.Series(cat)

In [20]: unique = original.unique()

以前の動作:

In [1]: unique
['good', 'bad']
Categories (2, object): ['bad' < 'good']
In [2]: original.dtype == unique.dtype
False

新しい動作:

In [21]: unique
Out[21]: 
['good', 'bad']
Categories (3, object): ['bad' < 'neutral' < 'good']

In [22]: original.dtype == unique.dtype
Out[22]: True

DataFrame.combine_first() でdtypeを保持#

DataFrame.combine_first() はdtypeを保持するようになりました (GH 7509)

In [23]: df1 = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=[0, 1, 2])

In [24]: df1
Out[24]: 
   A  B
0  1  1
1  2  2
2  3  3

In [25]: df2 = pd.DataFrame({"B": [4, 5, 6], "C": [1, 2, 3]}, index=[2, 3, 4])

In [26]: df2
Out[26]: 
   B  C
2  4  1
3  5  2
4  6  3

In [27]: combined = df1.combine_first(df2)

以前の動作:

In [1]: combined.dtypes
Out[2]:
A    float64
B    float64
C    float64
dtype: object

新しい動作:

In [28]: combined.dtypes
Out[28]: 
A    float64
B      int64
C    float64
dtype: object

groupbyメソッド aggとtransformは、呼び出し可能オブジェクトの戻り値のdtypeを変更しなくなりました#

以前は、メソッド DataFrameGroupBy.aggregate(), SeriesGroupBy.aggregate(), DataFrameGroupBy.transform(), および SeriesGroupBy.transform() は、引数 func が呼び出し可能である場合、結果のdtypeをキャストする可能性があり、望ましくない結果につながることがありました (GH 21240)。キャストは、結果が数値であり、入力dtypeへのキャストが np.allclose で測定された値に変化をもたらさない場合に発生しました。現在はそのようなキャストは発生しません。

In [29]: df = pd.DataFrame({'key': [1, 1], 'a': [True, False], 'b': [True, True]})

In [30]: df
Out[30]: 
   key      a     b
0    1   True  True
1    1  False  True

以前の動作:

In [5]: df.groupby('key').agg(lambda x: x.sum())
Out[5]:
        a  b
key
1    True  2

新しい動作:

In [31]: df.groupby('key').agg(lambda x: x.sum())
Out[31]: 
     a  b
key      
1    1  2

DataFrameGroupBy.mean(), DataFrameGroupBy.median(), および GDataFrameGroupBy.var(), SeriesGroupBy.mean(), SeriesGroupBy.median(), および SeriesGroupBy.var()float 結果#

以前は、これらのメソッドは入力値によって異なるdtypeを返す可能性がありました。現在、これらのメソッドは常にfloat dtypeを返します。 (GH 41137)

In [32]: df = pd.DataFrame({'a': [True], 'b': [1], 'c': [1.0]})

以前の動作:

In [5]: df.groupby(df.index).mean()
Out[5]:
        a  b    c
0    True  1  1.0

新しい動作:

In [33]: df.groupby(df.index).mean()
Out[33]: 
     a    b    c
0  1.0  1.0  1.0

loc および iloc で値を設定する際にインプレース操作を試行#

loc または iloc を使用してカラム全体を設定する場合、pandasは既存のデータに値を挿入しようとし、完全に新しい配列を作成することはありません。

In [34]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")

In [35]: values = df.values

In [36]: new = np.array([5, 6, 7], dtype="int64")

In [37]: df.loc[[0, 1, 2], "A"] = new

新しい動作と古い動作の両方で、values のデータは上書きされますが、古い動作では df["A"] のdtypeが int64 に変更されました。

以前の動作:

In [1]: df.dtypes
Out[1]:
A    int64
dtype: object
In [2]: np.shares_memory(df["A"].values, new)
Out[2]: False
In [3]: np.shares_memory(df["A"].values, values)
Out[3]: False

pandas 1.3.0では、df は引き続き values とデータを共有します。

新しい動作:

In [38]: df.dtypes
Out[38]: 
A    float64
dtype: object

In [39]: np.shares_memory(df["A"], new)
Out[39]: False

In [40]: np.shares_memory(df["A"], values)
Out[40]: True

frame[keys] = values を設定する際にインプレース操作をしない#

frame[keys] = values を使用して複数のカラムを設定する場合、新しい配列がこれらのキーの既存の配列を置き換えるため、既存の配列は上書きされません (GH 39510)。その結果、カラムは values のdtypeを保持し、既存の配列のdtypeにキャストされることはありません。

In [41]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")

In [42]: df[["A"]] = 5

古い動作では、5float64 にキャストされ、df をバックアップする既存の配列に挿入されました。

以前の動作:

In [1]: df.dtypes
Out[1]:
A    float64

新しい動作では、新しい配列が作成され、整数dtypeの 5 が保持されます。

新しい動作:

In [43]: df.dtypes
Out[43]: 
A    int64
dtype: object

ブール型Seriesへの設定における一貫したキャスト#

dtype=boolSeries に非ブール値を設定すると、一貫して dtype=object にキャストされるようになりました (GH 38709)

In [1]: orig = pd.Series([True, False])

In [2]: ser = orig.copy()

In [3]: ser.iloc[1] = np.nan

In [4]: ser2 = orig.copy()

In [5]: ser2.iloc[1] = 2.0

以前の動作:

In [1]: ser
Out [1]:
0    1.0
1    NaN
dtype: float64

In [2]:ser2
Out [2]:
0    True
1     2.0
dtype: object

新しい動作:

In [1]: ser
Out [1]:
0    True
1     NaN
dtype: object

In [2]:ser2
Out [2]:
0    True
1     2.0
dtype: object

DataFrameGroupBy.rollingとSeriesGroupBy.rollingは、値にグループ化されたカラムを返さなくなりました#

グループ化されたカラムは、groupby.rolling 操作の結果から削除されるようになりました (GH 32262)

In [44]: df = pd.DataFrame({"A": [1, 1, 2, 3], "B": [0, 1, 2, 3]})

In [45]: df
Out[45]: 
   A  B
0  1  0
1  1  1
2  2  2
3  3  3

以前の動作:

In [1]: df.groupby("A").rolling(2).sum()
Out[1]:
       A    B
A
1 0  NaN  NaN
1    2.0  1.0
2 2  NaN  NaN
3 3  NaN  NaN

新しい動作:

In [46]: df.groupby("A").rolling(2).sum()
Out[46]: 
       B
A       
1 0  NaN
  1  1.0
2 2  NaN
3 3  NaN

ローリング分散と標準偏差における人工的な切り捨てを削除#

Rolling.std() および Rolling.var() は、それぞれ ~1e-8 および ~1e-15 より小さい結果を人為的にゼロに切り捨てることはなくなりました (GH 37051, GH 40448, GH 39872)。

ただし、より大きな値でローリングを行う場合、結果に浮動小数点アーティファクトが存在する可能性があります。

In [47]: s = pd.Series([7, 5, 5, 5])

In [48]: s.rolling(3).var()
Out[48]: 
0         NaN
1         NaN
2    1.333333
3    0.000000
dtype: float64

MultiIndexを持つDataFrameGroupBy.rollingおよびSeriesGroupBy.rollingは、結果のレベルを削除しなくなりました#

DataFrameGroupBy.rolling() および SeriesGroupBy.rolling() は、MultiIndex を持つ DataFrame の結果内のレベルを削除しなくなりました。これにより、結果の MultiIndex でレベルの重複が認識される可能性がありますが、この変更はバージョン 1.1.3 で存在していた動作を復元します (GH 38787, GH 38523)。

In [49]: index = pd.MultiIndex.from_tuples([('idx1', 'idx2')], names=['label1', 'label2'])

In [50]: df = pd.DataFrame({'a': [1], 'b': [2]}, index=index)

In [51]: df
Out[51]: 
               a  b
label1 label2      
idx1   idx2    1  2

以前の動作:

In [1]: df.groupby('label1').rolling(1).sum()
Out[1]:
          a    b
label1
idx1    1.0  2.0

新しい動作:

In [52]: df.groupby('label1').rolling(1).sum()
Out[52]: 
                        a    b
label1 label1 label2          
idx1   idx1   idx2    1.0  2.0

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

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

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

パッケージ

最小バージョン

必須

変更済み

numpy

1.17.3

X

X

pytz

2017.3

X

python-dateutil

2.7.3

X

bottleneck

1.2.1

numexpr

2.7.0

X

pytest (開発)

6.0

X

mypy (開発)

0.812

X

setuptools

38.6.0

X

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

パッケージ

最小バージョン

変更済み

beautifulsoup4

4.6.0

fastparquet

0.4.0

X

fsspec

0.7.4

gcsfs

0.6.0

lxml

4.3.0

matplotlib

2.2.3

numba

0.46.0

openpyxl

3.0.0

X

pyarrow

0.17.0

X

pymysql

0.8.1

X

pytables

3.5.1

s3fs

0.4.0

scipy

1.2.0

sqlalchemy

1.3.0

X

表計算

0.8.7

X

xarray

0.12.0

xlrd

1.2.0

xlsxwriter

1.0.2

xlwt

1.3.0

pandas-gbq

0.12.0

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

その他の API の変更#

  • 部分的に初期化された CategoricalDtype オブジェクト (すなわち categories=None を持つもの) は、完全に初期化されたdtypeオブジェクトと等しいとは比較されなくなりました (GH 38516)

  • DataFrame_constructor_expanddim および Series_constructor_sliced へのアクセスは、AttributeError を発生させるようになりました。以前は NotImplementedError が発生していました (GH 38782)

  • DataFrame.to_sql() に、今後の「SQLエンジン」をサポートするための新しい engine および **engine_kwargs パラメータを追加しました。現在も内部では SQLAlchemy のみを使用していますが、turbodbc などのより多くのエンジンのサポートが計画されています (GH 36893)

  • PeriodIndex の文字列表現から重複する freq を削除しました (GH 41653)

  • ExtensionDtype サブクラスにとって ExtensionDtype.construct_array_type() はオプションメソッドではなく必須メソッドになりました (GH 24860)

  • ハッシュ不可能なpandasオブジェクトに対して hash を呼び出すと、組み込みのエラーメッセージ (unhashable type: 'Series' など) を伴う TypeError が発生するようになりました。以前は 'Series' objects are mutable, thus they cannot be hashed のようなカスタムメッセージが発生していました。さらに、isinstance(<Series>, abc.collections.Hashable)False を返すようになりました (GH 40013)

  • Styler.from_custom_template() は、テンプレート継承がより良いパースのために導入されたため、テンプレート名のための2つの新しい引数を持ち、古い name を削除しました (GH 42053)。Styler属性へのサブクラス変更も必要です。

ビルド#

  • .pptx および .pdf 形式のドキュメントは、ホイールまたはソースディストリビューションには含まれなくなりました。 (GH 30741)

非推奨#

DataFrameの集約操作およびDataFrameGroupBy操作における迷惑カラムの削除が非推奨になりました#

numeric_only=None (デフォルト) の DataFrame で集約操作 (例: .min, .max, .sum) を呼び出すと、集約操作が TypeError を発生させるカラムは黙って無視され、結果から削除されます。

この動作は非推奨です。将来のバージョンでは TypeError が発生するようになり、ユーザーは関数を呼び出す前に有効なカラムのみを選択する必要があります。

例えば

In [53]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})

In [54]: df
Out[54]: 
   A          B
0  1 2016-01-01
1  2 2016-01-02
2  3 2016-01-03
3  4 2016-01-04

以前の動作:

In [3]: df.prod()
Out[3]:
Out[3]:
A    24
dtype: int64

将来の動作:

In [4]: df.prod()
...
TypeError: 'DatetimeArray' does not implement reduction 'prod'

In [5]: df[["A"]].prod()
Out[5]:
A    24
dtype: int64

同様に、DataFrameGroupBy に関数を適用する場合、関数が TypeError を発生させるカラムは現在黙って無視され、結果から削除されます。

この動作は非推奨です。将来のバージョンでは TypeError が発生するようになり、ユーザーは関数を呼び出す前に有効なカラムのみを選択する必要があります。

例えば

In [55]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})

In [56]: gb = df.groupby([1, 1, 2, 2])

以前の動作:

In [4]: gb.prod(numeric_only=False)
Out[4]:
A
1   2
2  12

将来の動作:

In [5]: gb.prod(numeric_only=False)
...
TypeError: datetime64 type does not support prod operations

In [6]: gb[["A"]].prod(numeric_only=False)
Out[6]:
    A
1   2
2  12

その他の非推奨化#

  • スカラーを Categorical コンストラクタに渡すことが非推奨になりました (GH 38433)

  • リストライクなデータを渡さずに CategoricalIndex を構築することが非推奨になりました (GH 38944)

  • Index コンストラクタでサブクラス固有のキーワード引数を許可することが非推奨になりました。代わりに特定のサブクラスを直接使用してください (GH 14093, GH 21311, GH 22315, GH 26974)

  • 日付時刻ライクなオブジェクト (timedelta64[ns], datetime64[ns], Datetime64TZDtype, PeriodDtype) の astype() メソッドで整数dtypeへの変換が非推奨になりました。代わりに values.view(...) を使用してください (GH 38544)。この非推奨化は後にpandas 1.4.0で元に戻されました。

  • MultiIndex.is_lexsorted() および MultiIndex.lexsort_depth() は非推奨になりました。代わりに MultiIndex.is_monotonic_increasing() を使用してください (GH 32259)

  • Series.where(), Series.mask(), DataFrame.where(), DataFrame.mask() のキーワード try_cast は非推奨になりました。必要に応じて手動で結果をキャストしてください (GH 38836)

  • Timestamp オブジェクトと datetime.date オブジェクトの比較は非推奨になりました。たとえば ts <= mydate の代わりに ts <= pd.Timestamp(mydate) または ts.date() <= mydate を使用してください (GH 36131)

  • Rolling.win_type"freq" を返すことは非推奨になりました (GH 38963)

  • Rolling.is_datetimelike は非推奨になりました (GH 38963)

  • Series.__setitem__() および DataFrame.__setitem__()DataFrame インデクサは非推奨になりました (GH 39004)

  • ExponentialMovingWindow.vol() は非推奨になりました (GH 39220)

  • .astype を使用して datetime64[ns] dtype と DatetimeTZDtype 間で変換することは非推奨であり、将来のバージョンではエラーを発生させます。代わりに obj.tz_localize または obj.dt.tz_localize を使用してください (GH 38622)

  • DataFrame.unstack(), DataFrame.shift(), Series.shift(), および DataFrame.reindex()fill_value として使用する場合の datetime.date オブジェクトから datetime64 へのキャストは非推奨です。代わりに pd.Timestamp(dateobj) を渡してください (GH 39767)

  • Styler.set_na_rep() および Styler.set_precision() は、それぞれ既存および新しい入力引数として na_rep および precision を持つ Styler.format() に代わって非推奨になりました (GH 40134, GH 40425)

  • Styler.where() は、Styler.applymap() を使用する代替の表現を支持して非推奨になりました (GH 40821)

  • func がリストライクまたは辞書ライクであり、TypeError 以外の例外を発生させる場合、Series.transform() および DataFrame.transform() で部分的な失敗を許可することは非推奨になりました。funcTypeError 以外の例外を発生させる場合、将来のバージョンではエラーを発生させます (GH 40211)

  • read_csv() および read_table() の引数 error_bad_lineswarn_bad_lines は、引数 on_bad_lines を優先して非推奨になりました (GH 15122)

  • DataFrame コンストラクタにおける np.ma.mrecords.MaskedRecords のサポートは非推奨になりました。代わりに {name: data[name] for name in data.dtype.names} を渡してください (GH 40363)

  • 異なる数のレベルで merge(), DataFrame.merge(), および DataFrame.join() を使用することは非推奨になりました (GH 34862)

  • ExcelWriter での **kwargs の使用は非推奨になりました。代わりにキーワード引数 engine_kwargs を使用してください (GH 40430)

  • DataFrame および Series の集約における level キーワードは非推奨になりました。代わりにgroupbyを使用してください (GH 39983)

  • Categorical.remove_categories(), Categorical.add_categories(), Categorical.reorder_categories(), Categorical.rename_categories(), Categorical.set_categories()inplace パラメータは非推奨になりました。将来のバージョンで削除されます (GH 37643)

  • merge()suffixes キーワードと既存のカラムによって重複カラムを生成する動作は非推奨になりました (GH 22818)

  • Categorical._codes の設定は非推奨になりました。代わりに目的のコードを持つ新しい Categorical を作成してください (GH 40606)

  • read_excel() および ExcelFile.parse() のオプション引数 convert_float は非推奨になりました (GH 41127)

  • 異なるタイムゾーンを持つ DatetimeIndex.union() の動作は非推奨になりました。将来のバージョンでは、オブジェクトdtypeではなくUTCにキャストされます (GH 39328)

  • engine="c" を指定した read_csv() で、範囲外のインデックスを持つ usecols を使用することは非推奨になりました (GH 25623)

  • DataFrame コンストラクタで、最初の要素がCategoricalであるリストの特殊な扱いが非推奨になりました。代わりに pd.DataFrame({col: categorical, ...}) として渡してください (GH 38845)

  • DataFrame コンストラクタで dtype が渡され、データがそのdtypeにキャストできない場合の動作は非推奨になりました。将来のバージョンでは、黙って無視されるのではなく、エラーを発生させるようになります (GH 24435)

  • Timestamp.freq 属性は非推奨になりました。これを使用するプロパティ (is_month_start, is_month_end, is_quarter_start, is_quarter_end, is_year_start, is_year_end) については、freq がある場合、たとえば freq.is_month_start(ts) を使用してください (GH 15146)

  • DatetimeTZDtype データと datetime64[ns] dtype を持つ Series または DataFrame の非推奨の構築。代わりに Series(data).dt.tz_localize(None) を使用してください (GH 41555, GH 33401)

  • 大きな整数値と小さな整数 dtype を持つ Series 構築の非推奨の動作で、暗黙的にオーバーフローしていました。代わりに Series(data).astype(dtype) を使用してください (GH 41734)

  • 浮動小数点データと整数 dtype を持つ DataFrame 構築の非推奨の動作で、損失がある場合でもキャストしていました。将来のバージョンでは、これは Series の動作に合わせて浮動小数のままになります (GH 41770)

  • 文字列を含むデータが渡され、dtype が渡されない場合に、Series 構築における timedelta64[ns]datetime64[ns]、または DatetimeTZDtype dtypes の非推奨の推論 (GH 33558)

  • 将来のバージョンでは、datetime64[ns] データと DatetimeTZDtype を使用して Series または DataFrame を構築すると、データは UTC 時刻ではなく壁面時刻として扱われます (DatetimeIndex の動作と一致します)。データを UTC 時刻として扱うには、pd.Series(data).dt.tz_localize("UTC").dt.tz_convert(dtype.tz) または pd.Series(data.view("int64"), dtype=dtype) を使用してください (GH 33401)

  • DataFrame.xs()Series.xs() にリストを key として渡すことが非推奨になりました (GH 41760)

  • Series.between()inclusive 引数のブール値引数が非推奨になり、標準引数として {"left", "right", "neither", "both"} を取るようになりました (GH 40628)

  • 以下に示すすべての引数を位置引数として渡すことは非推奨になりました (例外は記載されています) (GH 41485)

パフォーマンス改善#

バグ修正#

カテゴリカル#

  • スカラーデータが渡されたときに CategoricalIndex が誤って TypeError を発生させなかったバグ (GH 38614)

  • CategoricalIndex.reindex が、渡された Index がカテゴリカルではないが、その値がカテゴリ内のすべてのラベルであった場合に失敗したバグ (GH 28690)

  • date オブジェクトのオブジェクト dtype 配列から Categorical を構築するときに astype と正しくラウンドトリップしなかったバグ (GH 38552)

  • ndarray および CategoricalDtype から DataFrame を構築するときのバグ (GH 38857)

  • DataFrame 内のオブジェクト dtype 列にカテゴリカル値を設定するときのバグ (GH 39136)

  • DataFrame.reindex() が、新しいインデックスに重複が含まれ、古いインデックスが CategoricalIndex であった場合に IndexError を発生させていたバグ (GH 38906)

  • タプルに似たカテゴリを持つ Categorical.fillna() が、非カテゴリタプルで埋めるときに ValueError の代わりに NotImplementedError を発生させていたバグ (GH 41914)

日付時刻ライク#

  • DataFrame および Series コンストラクタが、Timestamp (または Timedelta) data から dtype=datetime64[ns] (または timedelta64[ns]) で構築するときに、ナノ秒を誤って削除することがあったバグ (GH 38032)

  • DataFrame.first() および Series.first() が、最初の日が月の最終日である場合に、1ヶ月のオフセットで誤った結果を返していたバグ (GH 29623)

  • ミスマッチな datetime64 データと timedelta64 dtype、またはその逆で DataFrame または Series を構築するときに TypeError が発生しなかったバグ (GH 38575, GH 38764, GH 38792)

  • datetime64[ns] dtype の範囲外の datetime オブジェクト、または timedelta64[ns] dtype の範囲外の timedelta オブジェクトで Series または DataFrame を構築するときのバグ (GH 38792, GH 38965)

  • DatetimeIndex.intersection()DatetimeIndex.symmetric_difference()PeriodIndex.intersection()PeriodIndex.symmetric_difference() が、CategoricalIndex と演算するときに常にオブジェクト dtype を返していたバグ (GH 38741)

  • DatetimeIndex.intersection() が、n != 1 の非 Tick 頻度で誤った結果を与えていたバグ (GH 42104)

  • Series.where()datetime64 値を誤って int64 にキャストしていたバグ (GH 37682)

  • Categoricaldatetime オブジェクトを誤って Timestamp に型変換していたバグ (GH 38878)

  • ナノ秒 datetime64 の実装範囲をわずかに超える Timestamp オブジェクトと datetime64 オブジェクト間の比較におけるバグ (GH 39221)

  • Timestamp の実装範囲に近い値に対する Timestamp.round()Timestamp.floor()Timestamp.ceil() のバグ (GH 39244)

  • Timedelta の実装範囲に近い値に対する Timedelta.round()Timedelta.floor()Timedelta.ceil() のバグ (GH 38964)

  • date_range() が、コーナーケースで OutOfBoundsDatetime を発生させる代わりに NaT を含む DatetimeIndex を誤って作成していたバグ (GH 24124)

  • infer_freq() が、DatetimeIndex にタイムゾーンがあり、DST 境界を越える場合に、'H' 頻度を誤って推論できなかったバグ (GH 39556)

  • DatetimeArray または TimedeltaArray によってバックアップされた Series が、配列の freqNone に設定できないことがあったバグ (GH 41425)

Timedelta#

  • timedelta64[ns] の範囲外の非ナノ秒単位を持つ np.timedelta64 オブジェクトから Timedelta を構築するときのバグ (GH 38965)

  • TimedeltaIndex の構築が np.datetime64("NaT") オブジェクトを誤って受け入れていたバグ (GH 39462)

  • 記号のみで数字のない入力文字列から Timedelta を構築するときにエラーが発生しなかったバグ (GH 39710)

  • TimedeltaIndex および to_timedelta() が、timedelta64[ns] に変換するときにオーバーフローする非ナノ秒 timedelta64 配列が渡されたときにエラーを発生させなかったバグ (GH 40008)

タイムゾーン#

  • UTC を表す異なる tzinfo オブジェクトが同等として扱われなかったバグ (GH 39216)

  • dateutil.tz.gettz("UTC") が他の UTC を表す tzinfo と同等として認識されなかったバグ (GH 39276)

数値#

変換#

  • orient='records' を持つ Series.to_dict() が、Python のネイティブ型を返すようになったバグ (GH 25969)

  • datetime に似た (datetime64[ns], datetime64[ns, tz], timedelta64, period) dtypes 間で変換するときに、Series.view() および Index.view() のバグ (GH 39788)

  • 空の np.recarray から DataFrame を作成するときに、元の dtype が保持されなかったバグ (GH 40121)

  • frozenset から構築するときに、DataFrameTypeError を発生させなかったバグ (GH 40163)

  • データがその dtype にキャストできない場合に、Index 構築が渡された dtype を暗黙的に無視していたバグ (GH 21311)

  • StringArray.astype() が NumPy にフォールバックし、dtype='categorical' に変換するときにエラーを発生させていたバグ (GH 40450)

  • factorize() が、int64、uint64、および float64 より低い数値 NumPy dtype を持つ配列が与えられた場合に、一意の値が元の dtype を保持しなかったバグ (GH 41132)

  • ExtensionDtype を持つ配列ライクと copy=True を含む辞書を使用して DataFrame を構築するときに、コピーが作成されなかったバグ (GH 38939)

  • qcut() が、Float64DType を入力として受け取ったときにエラーを発生させていたバグ (GH 40730)

  • datetime64[ns] データと dtype=object を持つ DataFrame および Series の構築が、Timestamp オブジェクトではなく datetime オブジェクトを生成していたバグ (GH 41599)

  • timedelta64[ns] データと dtype=object を持つ DataFrame および Series の構築が、Timedelta オブジェクトではなく np.timedelta64 オブジェクトを生成していたバグ (GH 41599)

  • Period または Interval オブジェクトの 2 次元オブジェクト dtype np.ndarray が与えられたときに、それぞれ PeriodDtype または IntervalDtype にキャストされなかった DataFrame 構築のバグ (GH 41812)

  • リストと PandasDtype から Series を構築するときのバグ (GH 39357)

  • int64 dtype の範囲に収まらない range オブジェクトから Series を作成するときのバグ (GH 30173)

  • すべてのタプルキーを持つ dict と、リインデックスを必要とする Index から Series を作成するときのバグ (GH 41707)

  • infer_dtype() が Period dtype を持つ Series、Index、または配列を認識しなかったバグ (GH 23553)

  • 一般的な ExtensionArray オブジェクトに対して infer_dtype() がエラーを発生させていたバグ。代わりに "unknown-array" を返すようになりました (GH 37367)

  • DataFrame.convert_dtypes() が、空の DataFrame で呼び出されたときに誤って ValueError を発生させていたバグ (GH 40393)

文字列#

Interval#

  • IntervalIndex.intersection() および IntervalIndex.symmetric_difference() が、CategoricalIndex と演算するときに常にオブジェクト dtype を返していたバグ (GH 38653, GH 38741)

  • IntervalIndex.intersection() が、Index オブジェクトの少なくとも1つに、他方に存在する重複が含まれている場合に重複を返していたバグ (GH 38743)

  • IntervalIndex.union()IntervalIndex.intersection()IntervalIndex.difference()、および IntervalIndex.symmetric_difference() は、互換性のない dtype を持つ別の IntervalIndex と演算するときに、TypeError を発生させる代わりに適切な dtype にキャストするようになりました (GH 39267)

  • PeriodIndex.union()PeriodIndex.intersection()PeriodIndex.symmetric_difference()PeriodIndex.difference() は、互換性のない dtype を持つ別の PeriodIndex と演算するときに、IncompatibleFrequency を発生させる代わりにオブジェクト dtype にキャストするようになりました (GH 39306)

  • NA 値が存在する場合の IntervalIndex.is_monotonic()IntervalIndex.get_loc()IntervalIndex.get_indexer_for()、および IntervalIndex.__contains__() のバグ (GH 41831)

インデックス付け#

  • Index.union() および MultiIndex.union() が、Index が単調でなかったり、sortFalse に設定されていたりした場合に、重複する Index 値を削除していたバグ (GH 36289, GH 31326, GH 40862)

  • CategoricalIndex.get_indexer() が、非ユニークな場合に InvalidIndexError を発生させなかったバグ (GH 38372)

  • targetCategoricalDtype を持ち、インデックスとターゲットの両方に NA 値が含まれている場合の IntervalIndex.get_indexer() のバグ (GH 41934)

  • ブールリストで入力がフィルタリングされ、設定する値が低次元のリストであった場合に、Series.loc()ValueError を発生させていたバグ (GH 20438)

  • 多数の新しい列を DataFrame に挿入すると、その後のインデックス付け動作が誤りになるバグ (GH 38380)

  • 重複する列に複数の値を設定するときに DataFrame.__setitem__()ValueError を発生させていたバグ (GH 15695)

  • ミリ秒を持つ Index に対して文字列スライスで DataFrame.loc()Series.loc()DataFrame.__getitem__() および Series.__getitem__() が、非単調な DatetimeIndex に対して誤った要素を返していたバグ (GH 33146)

  • タイムゾーン対応インデックスを持つ DataFrame.reindex() および Series.reindex() が、method="ffill" および method="bfill" と指定された tolerance に対して TypeError を発生させていたバグ (GH 38566)

  • fill_value がオブジェクト dtype にキャストする必要がある場合に、datetime64[ns] または timedelta64[ns] を持つ DataFrame.reindex() が誤って整数にキャストしていたバグ (GH 39755)

  • 空の DataFrame に、指定された列と空ではない DataFrame 値を使用して設定するときに DataFrame.__setitem__()ValueError を発生させていたバグ (GH 38831)

  • DataFrame に重複する列がある場合に、ユニークな列に対して操作するときに DataFrame.loc.__setitem__()ValueError を発生させていたバグ (GH 38521)

  • 辞書値で設定するときに、混合 dtype を持つ DataFrame.iloc.__setitem__() および DataFrame.loc.__setitem__() のバグ (GH 38335)

  • ブールジェネレータが提供されたときに Series.loc.__setitem__() および DataFrame.loc.__setitem__()KeyError を発生させていたバグ (GH 39614)

  • ジェネレータが提供されたときに Series.iloc() および DataFrame.iloc()KeyError を発生させていたバグ (GH 39614)

  • 右辺が列数が誤っている DataFrame である場合に DataFrame.__setitem__()ValueError を発生させなかったバグ (GH 38604)

  • スカラーインデクサーで Series を設定するときに Series.__setitem__()ValueError を発生させていたバグ (GH 38303)

  • 入力として使用された DataFrame が1行しかなかった場合に、DataFrame.loc()MultiIndex のレベルを削除していたバグ (GH 10521)

  • Index がミリ秒を持つ場合に、既存の文字列でスライスするときに DataFrame.__getitem__() および Series.__getitem__() が常に KeyError を発生させていたバグ (GH 33589)

  • 数値 Seriestimedelta64 または datetime64 値を設定するときに、オブジェクト dtype にキャストされなかったバグ (GH 39086, GH 39619)

  • ミスマッチな IntervalDtype を持つ Series または DataFrameInterval 値を設定するときに、新しい値が既存の dtype に誤ってキャストされていたバグ (GH 39120)

  • 整数 dtype を持つ Seriesdatetime64 値を設定するときに、datetime64 値が誤って整数にキャストされていたバグ (GH 39266)

  • Datetime64TZDtype を持つ Seriesnp.datetime64("NaT") を設定するときに、タイムゾーンに依存しない値がタイムゾーン対応として誤って扱われていたバグ (GH 39769)

  • key=NaNmethod が指定されているが IndexNaN がない場合に Index.get_loc()KeyError を発生させないバグ (GH 39382)

  • タイムゾーン対応のインデックスに np.datetime64("NaT") を挿入する際に、タイムゾーン対応ではない値を誤ってタイムゾーン対応として処理する DatetimeIndex.insert() のバグ (GH 39769)

  • 既存の frame.columns に保持できない新しい列を設定する際、または Series.reset_index() または DataFrame.reset_index() で互換性のある dtype にキャストする代わりに、Index.insert() で誤って例外を発生させるバグ (GH 39068)

  • RangeIndex.append() で、長さ 1 の単一オブジェクトが誤って連結されるバグ (GH 39401)

  • RangeIndex.astype() で、CategoricalIndex に変換する際に、カテゴリが RangeIndex の代わりに Int64Index になるバグ (GH 41263)

  • ブールインデクサーを使用して numpy.timedelta64 の値をオブジェクト-dtype の Series に設定するバグ (GH 39488)

  • at または iat を使用して数値値をブール-dtypes の Series に設定する際に、オブジェクト-dtype へのキャストに失敗するバグ (GH 39582)

  • 行スライスでインデックスを付け、リストを値として設定しようとすると DataFrame.__setitem__()DataFrame.iloc.__setitem__()ValueError を発生させるバグ (GH 40440)

  • キーが MultiIndex に見つからず、レベルが完全に指定されていない場合に DataFrame.loc()KeyError を発生させないバグ (GH 41170)

  • 拡張して設定する際に、拡張軸のインデックスに重複がある場合に DataFrame.loc.__setitem__() が誤って例外を発生させるバグ (GH 40096)

  • MultiIndex を使用した DataFrame.loc.__getitem__() で、少なくとも1つのインデックス列に float dtype があり、スカラーを取得する際に float にキャストされるバグ (GH 41369)

  • DataFrame.loc() が非ブールインデックス要素を誤ってマッチングするバグ (GH 20432)

  • CategoricalIndex を持つ Series または DataFramenp.nan でインデックスを付ける際に、np.nan キーが存在する場合に誤って KeyError を発生させるバグ (GH 41933)

  • ExtensionDtype を使用した Series.__delitem__() で、誤って ndarray にキャストされるバグ (GH 40386)

  • CategoricalIndex を持つ DataFrame.at() で、整数キーが渡された場合に誤った結果を返すバグ (GH 41846)

  • インデクサーに重複がある場合、DataFrame.loc() が誤った順序で MultiIndex を返すバグ (GH 40978)

  • DatetimeIndex を使用して列名として str サブクラスを使用すると DataFrame.__setitem__()TypeError を発生させるバグ (GH 37366)

  • 一致しない freq を持つ Period が与えられたときに PeriodIndex.get_loc()KeyError を発生させないバグ (GH 41670)

  • UInt64Index と負の整数キーを使用した .loc.__getitem__ で、場合によっては KeyError の代わりに OverflowError を発生させ、他の場合は正の整数にラップアラウンドするバグ (GH 41777)

  • 無効な methodlimit、または tolerance 引数を指定した場合に、場合によっては Index.get_indexer()ValueError を発生させないバグ (GH 41918)

  • 無効な文字列を渡す際に、TimedeltaIndex を持つ Series または DataFrame をスライスする際に、TypeError の代わりに ValueError を発生させるバグ (GH 41821)

  • Index コンストラクタが、指定された dtype を黙って無視する場合があるバグ (GH 38879)

  • Index.where() の動作は、Index.putmask() の動作を反映するようになりました。つまり、index.where(mask, other)index.putmask(~mask, other) と一致します (GH 39412)

欠損値#

  • Grouperdropna 引数を正しく伝播しないバグ。DataFrameGroupBy.transform()dropna=True の欠損値を正しく処理するようになりました (GH 35612)

  • isna()Series.isna()Index.isna()DataFrame.isna()、および対応する notna 関数が Decimal("NaN") オブジェクトを認識しないバグ (GH 39409)

  • DataFrame.fillna()downcast キーワードに辞書を受け付けないバグ (GH 40809)

  • isna() がヌル許容型に対してマスクのコピーを返さず、その後のマスク変更が元の配列を変更してしまうバグ (GH 40935)

  • DataFrame の構築で、NaN を含む浮動小数点データと整数 dtypeNaN を保持せずにキャストされるバグ (GH 26919)

  • Series.isin()MultiIndex.isin() が、タプルに含まれている場合、すべての NaN を同等として扱わないバグ (GH 41836)

MultiIndex#

  • MultiIndex が非一意で level が指定されていない場合に DataFrame.drop()TypeError を発生させるバグ (GH 36293)

  • MultiIndex.intersection() が結果に NaN を重複させるバグ (GH 38623)

  • MultiIndexNaN を含んでいても順序が異なる場合に MultiIndex.equals() が誤って True を返すバグ (GH 38439)

  • CategoricalIndex と交差する際に、MultiIndex.intersection() が常に空の結果を返すバグ (GH 38653)

  • インデックスにソートできないエントリが含まれている場合に MultiIndex.difference() が誤って TypeError を発生させるバグ (GH 41915)

  • 空の MultiIndex で使用され、特定のレベルのみをインデックス付けする際に MultiIndex.reindex()ValueError を発生させるバグ (GH 41170)

  • フラットな Index に対して再インデックスを付ける際に MultiIndex.reindex()TypeError を発生させるバグ (GH 41707)

I/O#

  • display.max_seq_items=1 の場合の Index.__repr__() のバグ (GH 38415)

  • decimal 引数が設定され、engine="python" の場合に read_csv() が科学的表記法を認識しないバグ (GH 31920)

  • read_csv() で、NA 値がコメント文字列を含む場合に、NA 値をコメントとして解釈するバグ。engine="python" で修正されました (GH 34002)

  • read_csv() で、ファイルにデータ行がない場合に、複数のヘッダー列と index_col が指定されていると IndexError を発生させるバグ (GH 38292)

  • engine="python" の場合に read_csv()names と異なる長さの usecols を受け付けないバグ (GH 16469)

  • engine="python"delimiter=","usecols および parse_dates が指定されている場合に、read_csv() がオブジェクト dtype を返すバグ (GH 35873)

  • engine="c"namesparse_dates が指定されている場合に read_csv()TypeError を発生させるバグ (GH 33699)

  • read_clipboard()DataFrame.to_clipboard() が WSL で動作しないバグ (GH 38527)

  • read_sql()read_sql_query()、および read_sql_table()parse_dates 引数にカスタムエラー値を指定できるようになりました (GH 35185)

  • DataFrame または Series のサブクラスに適用しようとすると DataFrame.to_hdf()Series.to_hdf()KeyError を発生させるバグ (GH 33748)

  • 非文字列 dtype の DataFrame を保存する際に HDFStore.put() が誤った TypeError を発生させるバグ (GH 34274)

  • json_normalize() で、ジェネレータオブジェクトの最初の要素が返される DataFrame に含まれないバグ (GH 35923)

  • engine="python" で、列が日付として解析されるべきであり、usecols が指定されている場合に、read_csv() が日付列に桁区切りを適用するバグ (GH 39365)

  • 複数のヘッダーとインデックス列が指定されている場合に、read_excel()MultiIndex 名を前方埋めするバグ (GH 34673)

  • read_excel()set_option() を尊重しないバグ (GH 34252)

  • read_csv() がヌル許容ブール dtype の true_valuesfalse_values を切り替えないバグ (GH 34655)

  • orient="split" の場合に read_json() が数値文字列インデックスを維持しないバグ (GH 28556)

  • chunksize がゼロ以外で、クエリが結果を返さない場合に、read_sql() が空のジェネレータを返していました。現在は、単一の空の DataFrame を持つジェネレータを返します (GH 34411)

  • where パラメーターを使用してカテゴリカル文字列列でフィルタリングする際に、read_hdf() が予期しないレコードを返すバグ (GH 39189)

  • datetimes がヌルの場合に read_sas()ValueError を発生させるバグ (GH 39725)

  • read_excel() が単一列スプレッドシートから空の値を削除するバグ (GH 39808)

  • read_excel() が一部のファイルタイプで末尾の空の行/列をロードするバグ (GH 41167)

  • Excel ファイルに MultiIndex ヘッダーが続き、2つの空の行とインデックスがない場合に read_excel()AttributeError を発生させるバグ (GH 40442)

  • read_excel()read_csv()read_table()read_fwf()、および read_clipboard() で、MultiIndex ヘッダーの後にインデックスのない空の行が1行ある場合に、その行が削除されるバグ (GH 40442)

  • index=False の場合に DataFrame.to_string() が切り捨て列を誤って配置するバグ (GH 40904)

  • index=False の場合に DataFrame.to_string() が余分なドットを追加し、切り捨て行を誤って位置合わせするバグ (GH 40904)

  • read_orc() が常に AttributeError を発生させるバグ (GH 40918)

  • read_csv()read_table()namesprefix が定義されている場合に prefix を黙って無視するバグ。現在は ValueError を発生させます (GH 39123)

  • mangle_dupe_colsTrue に設定されている場合に、read_csv()read_excel() が重複する列名の dtype を尊重しないバグ (GH 35211)

  • delimitersep が定義されている場合に read_csv()sep を黙って無視するバグ。現在は ValueError を発生させます (GH 39823)

  • sys.setprofile が以前に呼び出されていた場合に、read_csv()read_table() が引数を誤って解釈するバグ (GH 41069)

  • PyArrow から pandas への変換 (Parquet の読み込みなど) で、ヌル許容 dtype と、データバッファサイズが dtype サイズの倍数ではない PyArrow 配列がある場合のバグ (GH 40896)

  • read_excel() が、ユーザーが engine 引数を指定したにもかかわらず、pandas がファイルタイプを特定できない場合にエラーを発生させるバグ (GH 41225)

  • read_clipboard() で、最初の列にヌル値がある場合、Excel ファイルからコピーすると値が誤った列にずれるバグ (GH 41108)

  • 文字列列を互換性のない列に追加しようとすると、DataFrame.to_hdf()Series.to_hdf()TypeError を発生させるバグ (GH 41897)

期間#

  • Period オブジェクト、または IndexSeries、または DataFrame と一致しない PeriodDtype との比較は、他の不一致型比較と同様に動作するようになりました。つまり、等しい場合は False、等しくない場合は True を返し、不等式チェックでは TypeError を発生させます (GH 39274)

プロット#

  • 2D の ax 引数が渡された場合に plotting.scatter_matrix() が例外を発生させるバグ (GH 16253)

  • Matplotlib の constrained_layout が有効な場合に警告を抑制するようになりました (GH 25261)

  • DataFrame.plot() で、関数が繰り返し呼び出され、一部の呼び出しで yerr が使用され、他の呼び出しでは使用されない場合に、凡例に誤った色が表示されるバグ (GH 39522)

  • DataFrame.plot() で、関数が繰り返し呼び出され、一部の呼び出しで secondary_y が使用され、他の呼び出しで legend=False が使用される場合に、凡例に誤った色が表示されるバグ (GH 40044)

  • dark_background テーマが選択されている場合に、DataFrame.plot.box() のキャップまたは最小/最大マーカーが表示されないバグ (GH 40769)

Groupby/resample/rolling#

再整形#

  • merge() で、部分的なインデックスと right_index=True を使用して内部結合を実行する際に、インデックス間に重複がない場合にエラーを発生させるバグ (GH 33814)

  • 欠損レベルを持つ DataFrame.unstack() が誤ったインデックス名になるバグ (GH 37510)

  • merge_asof() で、left_index=Trueright_on 指定がある場合に、左のインデックスではなく右のインデックスを伝播するバグ (GH 33463)

  • MultiIndex を持つ DataFrame での DataFrame.join() で、両方のインデックスのいずれかが1つのレベルしかない場合に誤った結果を返すバグ (GH 36909)

  • merge_asof() は、数値以外の結合列の場合に、わかりにくい TypeError の代わりに ValueError を発生させるようになりました (GH 29130)

  • DataFrame.join() で、DataFrame が、少なくとも1つの次元がアルファベット順にソートされていないカテゴリカルな dtype の MultiIndex を持つ場合に、値を正しく割り当てないバグ (GH 38502)

  • Series.value_counts()Series.mode() は、元の順序で一貫したキーを返すようになりました (GH 12679GH 11227 および GH 39007)

  • DataFrame.stack() で、MultiIndex 列の NaN を正しく処理しないバグ (GH 39481)

  • DataFrame.apply() で、引数 func が文字列で axis=1 であり、axis 引数がサポートされていない場合に誤った結果を返すバグ。現在は ValueError を発生させます (GH 39211)

  • DataFrame.sort_values() で、ignore_index=True の場合に列でソートした後、インデックスを正しく再形成しないバグ (GH 39464)

  • DataFrame.append()ExtensionDtype データ型の組み合わせで誤った dtypes を返すバグ (GH 39454)

  • DataFrame.append()datetime64timedelta64 データ型の組み合わせで使用された場合に誤った dtypes を返すバグ (GH 39574)

  • MultiIndex を持つ DataFrame に、IndexMultiIndex ではない Series を追加するときの DataFrame.append() のバグ (GH 41707)

  • 空の DataFrame で操作するときに、DataFrame.pivot_table() が単一値に対して MultiIndex を返すバグ (GH 13483)

  • Indexnumpy.all() 関数に渡せるようになりました (GH 40180)

  • DataFrame.stack()MultiIndex 内の CategoricalDtype を保持しないバグ (GH 36991)

  • 入力シーケンスにハッシュ不可能な項目が含まれている場合に to_datetime() がエラーを発生させるバグ (GH 39756)

  • ignore_indexTrue で値がスカラーの場合に Series.explode() がインデックスを保持するバグ (GH 40487)

  • SeriesNoneNaT が含まれ、要素が 50 を超える場合に to_datetime()ValueError を発生させるバグ (GH 39882)

  • タイムゾーン対応の datetime オブジェクトを含む object-dtype 値を持つ Series.unstack()DataFrame.unstack() が誤って TypeError を発生させるバグ (GH 41875)

  • DataFramevalue_vars として使用される重複列を持つ場合に、DataFrame.melt()InvalidIndexError を発生させるバグ (GH 41951)

スパース#

  • 数字の Index0 を含まない列を持つ場合に DataFrame.sparse.to_coo()KeyError を発生させるバグ (GH 18414)

  • copy=False を指定した SparseArray.astype() で、整数 dtype から浮動小数点 dtype に変換するときに誤った結果が生成されるバグ (GH 34456)

  • SparseArray.max()SparseArray.min() が常に空の結果を返すバグ (GH 40921)

ExtensionArray#

Styler#

  • Styler のバグで、メソッドの subset 引数が一部の有効な MultiIndex スライスでエラーを発生させた (GH 33562)

  • Styler がレンダリングする HTML 出力が、w3 の適切なコード標準をサポートするために若干変更されました (GH 39626)

  • Styler のバグで、レンダリングされた HTML で特定のヘッダーセルに列クラス識別子がない問題がありました (GH 39716)

  • Styler.background_gradient() のバグで、テキストの色が正しく決定されない問題がありました (GH 39888)

  • Styler.set_table_styles() のバグで、table_styles 引数の CSS セレクタ内の複数の要素が正しく追加されない問題がありました (GH 34061)

  • Styler のバグで、Jupyter からコピーすると左上のセルが欠落し、ヘッダーがずれる問題がありました (GH 12147)

  • Styler.where のバグで、kwargs が適用可能な呼び出し可能オブジェクトに渡されない問題がありました (GH 40845)

  • Styler のバグで、複数回レンダリングすると CSS が重複する問題がありました (GH 39395GH 40334)

その他#

貢献者#

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

  • Abhishek R +

  • Ada Draginda

  • Adam J. Stewart

  • Adam Turner +

  • Aidan Feldman +

  • Ajitesh Singh +

  • Akshat Jain +

  • アルバート・ビラノバ・デル・モラル

  • Alexandre Prince-Levasseur +

  • Andrew Hawyrluk +

  • Andrew Wieteska

  • AnglinaBhambra +

  • Ankush Dua +

  • Anna Daglis

  • Ashlan Parker +

  • Ashwani +

  • Avinash Pancham

  • Ayushman Kumar +

  • BeanNan

  • Benoît Vinot

  • Bharat Raghunathan

  • Bijay Regmi +

  • Bobin Mathew +

  • Bogdan Pilyavets +

  • Brian Hulette +

  • Brian Sun +

  • Brock +

  • Bryan Cutler

  • Caleb +

  • Calvin Ho +

  • Chathura Widanage +

  • Chinmay Rane +

  • Chris Lynch

  • Chris Withers

  • Christos Petropoulos

  • Corentin Girard +

  • DaPy15 +

  • Damodara Puddu +

  • Daniel Hrisca

  • ダニエル・サクストン

  • DanielFEvans

  • Dare Adewumi +

  • Dave Willmer

  • David Schlachter +

  • David-dmh +

  • Deepang Raval +

  • Doris Lee +

  • Dr. Jan-Philip Gehrcke +

  • DriesS +

  • Dylan Percy

  • Erfan Nariman

  • Eric Leung

  • EricLeer +

  • Eve

  • ファンチェン・リー

  • Felix Divo

  • Florian Jetter

  • Fred Reiss

  • GFJ138 +

  • Gaurav Sheni +

  • Geoffrey B. Eisenbarth +

  • Gesa Stupperich +

  • Griffin Ansel +

  • Gustavo C. Maciel +

  • Heidi +

  • Henry +

  • Hung-Yi Wu +

  • Ian Ozsvald +

  • アーブ・ラスティッグ

  • Isaac Chung +

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

  • JHM Darbyshire (MBP) +

  • JHM Darbyshire (iMac) +

  • Jack Liu +

  • James Lamb +

  • Jeet Parekh

  • ジェフ・リーバック

  • Jiezheng2018 +

  • Jody Klymak

  • Johan Kåhrström +

  • John McGuigan

  • Joris Van den Bossche

  • Jose

  • JoseNavy

  • Josh Dimarsky

  • Josh Friedlander

  • Joshua Klein +

  • Julia Signell

  • Julian Schnitzler +

  • Kaiqi Dong

  • Kasim Panjri +

  • Katie Smith +

  • Kelly +

  • Kenil +

  • Keppler, Kyle +

  • ケビン・シェパード

  • Khor Chean Wei +

  • Kiley Hewitt +

  • Larry Wong +

  • Lightyears +

  • Lucas Holtz +

  • Lucas Rodés-Guirao

  • Lucky Sivagurunathan +

  • Luis Pinto

  • Maciej Kos +

  • Marc Garcia

  • Marco Edward Gorelli +

  • マルコ・ゴレリ

  • MarcoGorelli +

  • Mark Graham

  • Martin Dengler +

  • Martin Grigorov +

  • Marty Rudolf +

  • Matt Roeschke

  • Matthew Roeschke

  • Matthew Zeitlin

  • Max Bolingbroke

  • マキシム・イワノフ

  • Maxim Kupfer +

  • Mayur +

  • MeeseeksMachine

  • Micael Jarniac

  • Michael Hsieh +

  • Michel de Ruiter +

  • Mike Roberts +

  • Miroslav Šedivý

  • Mohammad Jafar Mashhadi

  • Morisa Manzella +

  • モルタダ・メヒヤル

  • Muktan +

  • Naveen Agrawal +

  • Noah

  • Nofar Mishraki +

  • Oleh Kozynets

  • Olga Matoula +

  • Oli +

  • Omar Afifi

  • Omer Ozarslan +

  • Owen Lamont +

  • Ozan Öğreden +

  • Pandas Development Team

  • Paolo Lammens

  • Parfait Gasana +

  • Patrick Hoefler

  • Paul McCarthy +

  • Paulo S. Costa +

  • Pav A

  • Peter

  • Pradyumna Rahul +

  • Punitvara +

  • QP Hou +

  • Rahul Chauhan

  • Rahul Sathanapalli

  • Richard Shadrach

  • Robert Bradshaw

  • Robin to Roxel

  • Rohit Gupta

  • Sam Purkis +

  • Samuel GIFFARD +

  • Sean M. Law +

  • Shahar Naveh +

  • ShaharNaveh +

  • Shiv Gupta +

  • Shrey Dixit +

  • Shudong Yang +

  • Simon Boehm +

  • Simon Hawkins

  • Sioned Baker +

  • Stefan Mejlgaard +

  • Steven Pitman +

  • Steven Schaerer +

  • Stéphane Guillou +

  • TLouf +

  • Tegar D Pratama +

  • テルジ・ピーターセン

  • Theodoros Nikolaou +

  • Thomas Dickson

  • Thomas Li

  • Thomas Smith

  • Thomas Yu +

  • ThomasBlauthQC +

  • Tim Hoffmann

  • Tom Augspurger

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

  • Tyler Reddy

  • UrielMaD

  • Uwe L. Korn

  • Venaturum +

  • VirosaLi

  • Vladimir Podolskiy

  • Vyom Pathak +

  • WANG Aiyong

  • Waltteri Koskinen +

  • Wenjun Si +

  • ウィリアム・エイド

  • Yeshwanth N +

  • ユアンハオ・ゲン

  • Zito Relova +

  • aflah02 +

  • arredond +

  • attack68

  • cdknox +

  • chinggg +

  • fathomer +

  • ftrihardjo +

  • github-actions[bot] +

  • gunjan-solanki +

  • guru kiran

  • hasan-yaman

  • i-aki-y +

  • jbrockmendel

  • jmholzer +

  • jordi-crespo +

  • jotasi +

  • jreback

  • juliansmidek +

  • kylekeppler

  • lrepiton +

  • lucasrodes

  • maroth96 +

  • mikeronayne +

  • mlondschien

  • moink +

  • morrme

  • mschmookler +

  • mzeitlin11

  • na2 +

  • nofarmishraki +

  • パルテフ

  • パトリック

  • ptype

  • realead

  • rhshadrach

  • rlukevie +

  • rosagold +

  • saucoide +

  • sdementen +

  • shawnbrown

  • sstiijn +

  • stphnlyd +

  • sukriti1 +

  • taytzehao

  • theOehrly +

  • theodorju +

  • thordisstella +

  • tonyyyyip +

  • tsinggggg +

  • tushushu +

  • vangorade +

  • vladu +

  • wertha +