1.2.0 の新機能 (2020年12月26日)#

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

警告

古いスタイルの .xls Excel ファイルを書き込むための xlwt パッケージは、もはやメンテナンスされていません。xlrd パッケージは、現在では古いスタイルの .xls ファイルの読み込み専用です。

以前は、read_excel() のデフォルト引数 engine=None は、新しい Excel 2007 以降 (.xlsx) のファイルを含む多くの場合で xlrd エンジンを使用する結果となっていました。openpyxl がインストールされている場合、これらの多くの場合で openpyxl エンジンを使用するようにデフォルトが変更されます。read_excel() のドキュメントで詳細を確認してください。

したがって、Excel 2007 以降 (.xlsx) のファイルを読み込むには、openpyxl をインストールすることを強くお勧めします。xlrd を使用して .xlsx ファイルを読み込む際の不具合は報告しないでください。 これはサポート対象外となり、代わりに openpyxl を使用してください。

io.excel.xls.writer オプションが "xlwt" に設定されていない限り、xlwt エンジンを使用しようとすると FutureWarning が発生します。このオプションは現在非推奨であり、FutureWarning も発生しますが、グローバルに設定して警告を抑制することができます。ユーザーは代わりに openpyxl エンジンを使用して .xlsx ファイルを書き込むことをお勧めします。

機能強化#

必要に応じて重複ラベルを禁止する#

Series および DataFrame は、インデックスまたは列に重複ラベルを含めることができるかどうかを制御するために、allows_duplicate_labels=False フラグを設定して作成できるようになりました (GH 28394)。これにより、ダウンストリームの操作に影響を与える可能性のある重複ラベルの偶発的な導入を防ぐことができます。

デフォルトでは、引き続き重複が許可されます。

In [1]: pd.Series([1, 2], index=['a', 'a'])
Out[1]:
a    1
a    2
Length: 2, dtype: int64

In [2]: pd.Series([1, 2], index=['a', 'a']).set_flags(allows_duplicate_labels=False)
...
DuplicateLabelError: Index has duplicates.
      positions
label
a        [0, 1]

pandas は、多くの操作で allows_duplicate_labels プロパティを伝播します。

In [3]: a = (
   ...:     pd.Series([1, 2], index=['a', 'b'])
   ...:       .set_flags(allows_duplicate_labels=False)
   ...: )

In [4]: a
Out[4]:
a    1
b    2
Length: 2, dtype: int64

# An operation introducing duplicates
In [5]: a.reindex(['a', 'b', 'a'])
...
DuplicateLabelError: Index has duplicates.
      positions
label
a        [0, 2]

[1 rows x 1 columns]

警告

これは実験的な機能です。現在、多くのメソッドが allows_duplicate_labels の値を伝播できません。将来のバージョンでは、1 つ以上の DataFrame または Series オブジェクトを受け取るか返すすべてのメソッドが allows_duplicate_labels を伝播することが期待されています。

詳細については、重複ラベルを参照してください。

allows_duplicate_labels フラグは、新しい DataFrame.flags 属性に格納されます。これは、pandas オブジェクトに適用されるグローバル属性を格納します。これは、データセットに適用される情報を格納する DataFrame.attrs とは異なります。

fsspec バックエンドへの引数渡し#

多くの読み書き関数に storage_options オプション引数が追加され、ストレージバックエンドにパラメータの辞書を渡すことができるようになりました。これにより、例えば S3 や GCS ストレージに認証情報を渡すことができます。どのバックエンドにどのパラメータを渡せるかの詳細は、個々のストレージバックエンドのドキュメント (fsspec ドキュメントの組み込み実装から詳細化され、外部のものにリンクされています) で見つけることができます。リモートファイルの読み書きのセクションを参照してください。

GH 35655 で Excel ファイルの読み込みに fsspec サポート (storage_options を含む) が追加されました。

to_csv におけるバイナリファイルハンドルのサポート#

to_csv() は、encoding (GH 13068 および GH 23854) および compression (GH 22555) とともにバイナリモードのファイルハンドルをサポートします (GH 19827 および GH 35058)。pandas がファイルハンドルがバイナリモードで開かれているかテキストモードで開かれているかを自動的に検出しない場合、mode="wb" を提供する必要があります。

例えば

In [1]: import io

In [2]: data = pd.DataFrame([0, 1, 2])

In [3]: buffer = io.BytesIO()

In [4]: data.to_csv(buffer, encoding="utf-8", compression="gzip")

to_latex での短いキャプションとテーブル位置のサポート#

DataFrame.to_latex() で、浮動テーブル位置 (GH 35281) と短いキャプション (GH 36267) を指定できるようになりました。

位置を設定するためのキーワード position が追加されました。

In [5]: data = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})

In [6]: table = data.to_latex(position='ht')

In [7]: print(table)
\begin{table}[ht]
\begin{tabular}{lrr}
\toprule
 & a & b \\
\midrule
0 & 1 & 3 \\
1 & 2 & 4 \\
\bottomrule
\end{tabular}
\end{table}

キーワード caption の使い方が拡張されました。単一の文字列を引数として受け取るだけでなく、オプションでタプル (full_caption, short_caption) を提供して短いキャプションマクロを追加できます。

In [8]: data = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})

In [9]: table = data.to_latex(caption=('the full long caption', 'short caption'))

In [10]: print(table)
\begin{table}
\caption[short caption]{the full long caption}
\begin{tabular}{lrr}
\toprule
 & a & b \\
\midrule
0 & 1 & 3 \\
1 & 2 & 4 \\
\bottomrule
\end{tabular}
\end{table}

read_csv および read_table のデフォルトの浮動小数点精度における変更#

C 解析エンジンでは、read_csv()read_table() のメソッドは、以前は浮動小数点数をわずかに不正確な最後のビット精度で読み込む可能性のあるパーサーをデフォルトとしていました。この問題を回避するために、floating_precision="high" オプションは常に利用可能でした。このバージョンから、デフォルトはより正確なパーサーを使用するように変更され、floating_precision=None が高精度パーサーに対応し、新しいオプション floating_precision="legacy" が従来のパーサーを使用するようになります。高精度パーサーをデフォルトで使用する変更は、パフォーマンスに影響を与えないはずです。( GH 17154 )

float データのための実験的なヌル許容データ型#

Float32Dtype / Float64Dtype および FloatingArray を追加しました。これらは、pd.NA 欠損値インジケーターを保持できる浮動小数点データ専用の拡張データ型です (GH 32265, GH 34307)。

デフォルトの float データ型はすでに np.nan を使用して欠損値をサポートしていますが、これらの新しいデータ型は、既存のヌル許容整数およびブール値データ型と同様に、pd.NA (およびそれに対応する動作) を欠損値インジケーターとして使用します。

np.nanpd.NA の動作が異なる例の一つが比較演算です。

# the default NumPy float64 dtype
In [11]: s1 = pd.Series([1.5, None])

In [12]: s1
Out[12]: 
0    1.5
1    NaN
Length: 2, dtype: float64

In [13]: s1 > 1
Out[13]: 
0     True
1    False
Length: 2, dtype: bool
# the new nullable float64 dtype
In [14]: s2 = pd.Series([1.5, None], dtype="Float64")

In [15]: s2
Out[15]: 
0     1.5
1    <NA>
Length: 2, dtype: Float64

In [16]: s2 > 1
Out[16]: 
0    True
1    <NA>
Length: 2, dtype: boolean

pd.NA 欠損値インジケーターを使用する場合の動作の詳細については、NAセマンティクスのドキュメントセクションを参照してください。

上記のように、dtype は "Float64" または "Float32" の文字列 (デフォルトの "float64" データ型と区別するために大文字) を使用して指定できます。または、dtype オブジェクトを使用することもできます。

In [17]: pd.Series([1.5, None], dtype=pd.Float32Dtype())
Out[17]: 
0     1.5
1    <NA>
Length: 2, dtype: Float32

既存の整数またはブール値の Nullable データ型による浮動小数点結果を返す操作も、Nullable 浮動小数点データ型を使用するようになりました (GH 38178)。

警告

実験的: 新しい浮動小数点データ型は現在実験的であり、その動作や API は予告なく変更される可能性があります。特に、NaN (NA 欠損値とは異なる) に関する動作は変更される可能性があります。

集計時のインデックス/列名の保持#

concat() または DataFrame コンストラクタを使用して集計する場合、pandas は可能な限りインデックス名と列名を保持しようとします (GH 35847)。すべての入力が共通の名前を共有している場合、この名前が結果に割り当てられます。入力名がすべて一致しない場合、結果は名前なしになります。以下はインデックス名が保持される例です。

In [18]: idx = pd.Index(range(5), name='abc')

In [19]: ser = pd.Series(range(5, 10), index=idx)

In [20]: pd.concat({'x': ser[1:], 'y': ser[:-1]}, axis=1)
Out[20]: 
       x    y
abc          
1    6.0  6.0
2    7.0  7.0
3    8.0  8.0
4    9.0  NaN
0    NaN  5.0

[5 rows x 2 columns]

MultiIndex でも同様ですが、ロジックはレベルごとに個別に適用されます。

GroupBy が EWM 演算を直接サポート#

DataFrameGroupBy は、指数加重移動平均 (EWM) 演算を直接サポートするようになりました (GH 16037)。

In [21]: df = pd.DataFrame({'A': ['a', 'b', 'a', 'b'], 'B': range(4)})

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

[4 rows x 2 columns]

In [23]: df.groupby('A').ewm(com=1.0).mean()
Out[23]: 
            B
A            
a 0  0.000000
  2  1.333333
b 1  1.000000
  3  2.333333

[4 rows x 1 columns]

さらに、meanNumba を介した実行を engine および engine_kwargs 引数でサポートしています。この機能を使用するには、Numba をオプションの依存関係としてインストールする必要があります。

その他の機能強化#

  • TimestampDatetimeIndexPeriodPeriodIndexday_of_week (互換性エイリアス dayofweek) プロパティを追加しました (GH 9605)。

  • TimestampDatetimeIndexPeriodPeriodIndexday_of_year (互換性エイリアス dayofyear) プロパティを追加しました (GH 9605)。

  • Series または DataFrame にテーブル全体のフラグを設定するための set_flags() を追加しました (GH 28394)。

  • DataFrame.applymap()na_action をサポートするようになりました (GH 23803)。

  • オブジェクト dtype を持つ Index が除算と乗算をサポートするようになりました (GH 34160)。

  • io.sql.get_schema()schema キーワード引数をサポートするようになり、CREATE TABLE ステートメントにスキーマを追加できるようになりました (GH 28486)。

  • DataFrame.explode() および Series.explode() は、集合の爆発をサポートするようになりました (GH 35614)。

  • DataFrame.hist() は時系列 (datetime) データをサポートするようになりました (GH 32590)。

  • Styler.set_table_styles() は、行と列の直接スタイリングを可能にし、チェーンできるようになりました (GH 35607)。

  • Styler は、個々のデータセルへの直接 CSS クラス名追加を許可するようになりました (GH 36159)。

  • Rolling.mean() および Rolling.sum() は、数値的な問題を回避するために Kahan 和を使用して平均を計算します (GH 10319, GH 11645, GH 13254, GH 32761, GH 36031)。

  • DatetimeIndex.searchsorted(), TimedeltaIndex.searchsorted(), PeriodIndex.searchsorted(), および datetime-like dtypes を持つ Series.searchsorted() は、文字列引数 (リストライクおよびスカラー) を対応する datetime-like 型にキャストしようとするようになりました (GH 36346)。

  • IntegerArray.prod()IntegerArray.min()、および IntegerArray.max() メソッドを追加しました (GH 33790)。

  • NumPy の ufunc を拡張型を持つ DataFrame に呼び出すと、可能であれば拡張型が保持されるようになりました (GH 23743)。

  • 複数の DataFrame オブジェクトに対してバイナリ入力 NumPy ufunc を呼び出すと、Series に対するバイナリ演算および ufunc の動作に合わせてアラインされるようになりました (GH 23743)。この変更は pandas 1.2.1 で元に戻され、DataFrame をアラインしない動作が代わりに非推奨となりました。詳細については、1.2.1 リリースノートを参照してください。

  • 可能な場合、RangeIndex.difference()RangeIndex.symmetric_difference()Int64Index の代わりに RangeIndex を返します (GH 36564)。

  • DataFrame.to_parquet() は parquet 形式の列に MultiIndex をサポートするようになりました (GH 34777)。

  • read_parquet() は、結果の DataFrame で可能な限り pd.NA を欠損値インジケーターとして使用する Nullable dtypes を使用するための use_nullable_dtypes=True オプションを獲得しました (デフォルトは False で、engine="pyarrow" の場合にのみ適用されます) (GH 31242)。

  • 平均の標準誤差を計算する Rolling.sem()Expanding.sem() を追加しました (GH 26476)。

  • Rolling.var() および Rolling.std() は、数値的な問題を回避するために Kahan 和と Welford の方法を使用します (GH 37051)。

  • DataFrame.corr() および DataFrame.cov() は、数値的な問題を回避するために Welford の方法を使用します (GH 37448)。

  • DataFrame.plot() は、scatter および hexbin タイプのプロットに対して xlabel および ylabel 引数を認識するようになりました (GH 37001)。

  • DataFramedivmod 演算をサポートするようになりました (GH 37165)。

  • DataFrame.to_parquet() は、path 引数が渡されない場合に bytes オブジェクトを返すようになりました (GH 37105)。

  • Rolling は、固定ウィンドウの closed 引数をサポートするようになりました (GH 34315)。

  • DatetimeIndexdatetime64 または datetime64tz dtypes を持つ Seriesstd をサポートするようになりました (GH 37436)。

  • Window は、Scipy のすべてのウィンドウタイプを win_type でサポートし、柔軟なキーワード引数もサポートするようになりました (GH 34556)。

  • testing.assert_index_equal()check_order パラメータを持つようになり、インデックスを順序に依存しない方法でチェックできるようになりました (GH 37478)。

  • read_csv() は圧縮ファイルのメモリマップをサポートするようになりました (GH 37621)。

  • DataFrame.groupby() および DataFrame.resample()minmaxfirstlast 関数に min_count キーワードを追加しました (GH 37821, GH 37768)。

  • DataFrame.merge() で無効なマージ列定義が与えられた場合のエラー報告を改善しました (GH 16228)。

  • Rolling.skew()Rolling.kurt()Expanding.skew()、および Expanding.kurt() の数値安定性を、Kahan 和の実装を通じて改善しました (GH 6929)。

  • axis=1 を指定して DataFrameGroupBy の列をサブセット化する際のエラー報告を改善しました (GH 37725)。

  • DataFrame.merge() および DataFrame.join()cross メソッドを実装しました (GH 5401)。

  • read_csv()read_sas()read_json()chunksize/iterator を指定して呼び出すと、コンテキストマネージャーを返すため、with ステートメントで使用できるようになりました (GH 38225)。

  • Excel エクスポートのスタイリングに利用できる名前付き色のリストを拡張し、すべての CSS4 色を有効にしました (GH 38247)。

注目すべきバグ修正#

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

DataFrame 縮約の一貫性#

DataFrame.any() および DataFrame.all()bool_only=True で使用する場合、オブジェクト型列を考慮対象から外すかどうかは、すべてのオブジェクト型列がブール値と見なせるかをチェックするのではなく、列ごとに決定するようになりました。

これにより、列のサブセットに縮約を適用した結果、より大きな Series が返されるという異常な動作が防止されます。(GH 37799)を参照してください。

In [24]: df = pd.DataFrame({"A": ["foo", "bar"], "B": [True, False]}, dtype=object)

In [25]: df["C"] = pd.Series([True, True])

以前の動作:

In [5]: df.all(bool_only=True)
Out[5]:
C    True
dtype: bool

In [6]: df[["B", "C"]].all(bool_only=True)
Out[6]:
B    False
C    True
dtype: bool

新しい動作:

In [26]: In [5]: df.all(bool_only=True)
Out[26]: 
C    True
Length: 1, dtype: bool

In [27]: In [6]: df[["B", "C"]].all(bool_only=True)
Out[27]: 
C    True
Length: 1, dtype: bool

numeric_only=None を持つ他の DataFrame 縮約も、この異常な動作を回避するでしょう (GH 37827)。

In [28]: df = pd.DataFrame({"A": [0, 1, 2], "B": ["a", "b", "c"]}, dtype=object)

以前の動作:

In [3]: df.mean()
Out[3]: Series([], dtype: float64)

In [4]: df[["A"]].mean()
Out[4]:
A    1.0
dtype: float64

新しい動作:

In [3]: df.mean()
Out[3]:
A    1.0
dtype: float64

In [4]: df[["A"]].mean()
Out[4]:
A    1.0
dtype: float64

さらに、numeric_only=None を指定した DataFrame の削減は、対応する Series の削減と一貫性を持つようになります。特に、Series メソッドが TypeError を発生させる削減の場合、DataFrame の削減は、異なるセマンティクスを持つ可能性のある NumPy 配列にキャストするのではなく、その列を非数値と見なすようになります (GH 36076, GH 28949, GH 21020)。

In [29]: ser = pd.Series([0, 1], dtype="category", name="A")

In [30]: df = ser.to_frame()

以前の動作:

In [5]: df.any()
Out[5]:
A    True
dtype: bool

新しい動作:

In [5]: df.any()
Out[5]: Series([], dtype: bool)

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

pandas 1.2.0 は Python 3.7.1 以降をサポートします (GH 35214)。

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

いくつかの依存関係の最小サポートバージョンが更新されました (GH 35214)。インストールされている場合、以下の要件があります。

パッケージ

最小バージョン

必須

変更済み

numpy

1.16.5

X

X

pytz

2017.3

X

X

python-dateutil

2.7.3

X

bottleneck

1.2.1

numexpr

2.6.8

X

pytest (開発)

5.0.1

X

mypy (開発)

0.782

X

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

パッケージ

最小バージョン

変更済み

beautifulsoup4

4.6.0

fastparquet

0.3.2

fsspec

0.7.4

gcsfs

0.6.0

lxml

4.3.0

X

matplotlib

2.2.3

X

numba

0.46.0

openpyxl

2.6.0

X

pyarrow

0.15.0

X

pymysql

0.7.11

X

pytables

3.5.1

X

s3fs

0.4.0

scipy

1.2.0

sqlalchemy

1.2.8

X

xarray

0.12.3

X

xlrd

1.2.0

X

xlsxwriter

1.0.2

X

xlwt

1.3.0

X

pandas-gbq

0.12.0

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

その他の API の変更#

  • Series.sort_values() および Datetime-like Index サブクラスに対する Index.sort_values() の降順ソートは安定するようになりました。これは、複数の列で DataFrame をソートする場合、重複を生成するキー関数でソートする場合、または Index.sort_values() を使用してソートインデックスを要求する場合にソート順序に影響します。Series.value_counts() を使用する場合、欠損値のカウントはもはや必ずしも重複カウントのリストの最後に位置するわけではありません。代わりに、元の Series 内の位置に対応します。Datetime-like Index サブクラスに対して Index.sort_values() を使用する場合、NaTs は na_position 引数を無視し、先頭にソートされていました。現在は na_position を尊重し、デフォルトは他の Index サブクラスと同様に last となります (GH 35992)。

  • Categorical.take()DatetimeArray.take()TimedeltaArray.take()、または PeriodArray.take() に無効な fill_value を渡すと、ValueError の代わりに TypeError が発生するようになりました (GH 37733)。

  • Series.shift()CategoricalDtype を持つ無効な fill_value を渡すと、ValueError の代わりに TypeError が発生するようになりました (GH 37733)。

  • IntervalIndex.insert() または CategoricalIndex.insert() に無効な値を渡すと、ValueError の代わりに TypeError が発生するようになりました (GH 37733)。

  • CategoricalIndex を持つ Series を無効な fill_value で再インデックスしようとすると、ValueError の代わりに TypeError が発生するようになりました (GH 37733)。

  • 非カテゴリ値を含むインデックスを持つ CategoricalIndex.append() は、TypeError を発生させる代わりに、キャストするようになりました (GH 38098)。

非推奨#

  • MultiIndex.set_codes() および MultiIndex.set_levels()inplace パラメータは非推奨になりました (GH 35626)。

  • すべての Index サブクラスの copy() メソッドの dtype パラメータは非推奨になりました。dtype を変更するには、代わりに astype() メソッドを使用してください (GH 35853)。

  • MultiIndex.copy() のパラメータ levels および codes は非推奨になりました。代わりに set_levels() および set_codes() メソッドを使用してください (GH 36685)。

  • pandas.io.date_converters の日付パーサー関数 parse_date_time()parse_date_fields()parse_all_fields()generic_parser() は非推奨となり、将来のバージョンで削除されます。代わりに to_datetime() を使用してください (GH 35741)。

  • DataFrame.lookup() は非推奨となり、将来のバージョンで削除されます。代わりに DataFrame.melt() および DataFrame.loc() を使用してください (GH 35224)。

  • Index.to_native_types() メソッドは非推奨です。代わりに .astype(str) を使用してください (GH 28867)。

  • tz-aware の DataFrame 行を単一の datetime-like 文字列 df[string] でインデックス付けすることは非推奨となりました (行のインデックス付けと列の選択のどちらであるか曖昧なため)、代わりに df.loc[string] を使用してください (GH 36179)。

  • Index.is_all_dates() は非推奨になりました (GH 27744)。

  • Series.str.replace()regex のデフォルト値は、将来のリリースで True から False に変更されます。さらに、regex=True が設定されている場合、単一文字の正規表現はリテラル文字列として扱われません (GH 24804)。

  • DataFrameSeries の間の比較演算での自動アラインメントは非推奨になりました。例えば frame == ser の前に frame, ser = frame.align(ser, axis=1, copy=False) を実行してください (GH 28759)。

  • min_periods=None を持つ Rolling.count() は、将来のバージョンでウィンドウのサイズをデフォルトとします (GH 31302)。

  • DataFrame に「outer」ufunc を使用して 4 次元の ndarray を返すことは非推奨になりました。最初に ndarray に変換してください (GH 23743)。

  • tz-aware の DatetimeIndex を naive な datetime オブジェクトでスライスインデックス付けすることは非推奨となり、スカラーインデックス付けの動作に合わせるようになりました (GH 36148)。

  • Index.ravel()np.ndarray を返すことは非推奨であり、将来的には同じインデックスのビューを返します (GH 19956)。

  • to_timedelta() で 'M'、'Y'、'y' を含む単位を示す文字列の使用は非推奨になりました (GH 36666)。

  • Index メソッドの &|、および ^ が、それぞれ集合演算の Index.intersection()Index.union()、および Index.symmetric_difference() として動作することは非推奨であり、将来的には Series の動作に合わせてポイントワイズなブール演算として動作するようになります。代わりに名前付き集合メソッドを使用してください (GH 36758)。

  • Categorical.is_dtype_equal() および CategoricalIndex.is_dtype_equal() は非推奨となり、将来のバージョンで削除されます (GH 37545)。

  • Series.slice_shift() および DataFrame.slice_shift() は非推奨です。代わりに Series.shift() または DataFrame.shift() を使用してください (GH 37601)。

  • 順序のない DatetimeIndex オブジェクトに対する、インデックスにないキーでの部分スライスは非推奨となり、将来のバージョンで削除されます (GH 18531)。

  • PeriodIndex.astype()how キーワードは非推奨となり、将来のバージョンで削除されます。代わりに index.to_timestamp(how=how) を使用してください (GH 37982)。

  • Index のサブクラス (DatetimeIndexTimedeltaIndexPeriodIndex を除く) に対する Index.asi8() は非推奨になりました (GH 37877)。

  • Categorical.remove_unused_categories()inplace パラメータは非推奨となり、将来のバージョンで削除されます (GH 37643)。

  • DataFrame.info()null_counts パラメータは非推奨となり、show_counts に置き換えられました。これは将来のバージョンで削除されます (GH 37999)。

非アラインドな DataFrame での NumPy ufunc の呼び出し

非アラインド DataFrame に対する NumPy ufunc の呼び出しの動作は pandas 1.2.0 で変更されました (ufunc を呼び出す前に引数をアラインする)。しかし、この変更は pandas 1.2.1 で元に戻されました。代わりにアラインしない動作は非推奨となり、詳細については 1.2.1 リリースノートを参照してください。

パフォーマンス改善#

  • 多数の文字列要素を持つ配列から dtype str または StringDtype の DataFrame または Series を作成する際のパフォーマンス改善 (GH 36304, GH 36317, GH 36325, GH 36432, GH 37371)。

  • DataFrameGroupBy.agg()SeriesGroupBy.agg() での numba エンジン使用時のパフォーマンス改善 (GH 35759)。

  • 巨大な辞書から Series.map() を作成する際のパフォーマンス改善 (GH 34717)。

  • DataFrameGroupBy.transform() および SeriesGroupBy.transform() における numba エンジン使用時のパフォーマンス改善 (GH 36240)。

  • Styler の uuid メソッドが変更され、テーブル衝突の可能性を合理的に低く保ちつつ、Web 上でのデータ転送を圧縮するようになりました (GH 36345)。

  • float dtype 列の非 ns 時間単位での to_datetime() のパフォーマンス改善 (GH 20445)。

  • IntervalArray に値を設定する際のパフォーマンス改善 (GH 36310)。

  • 内部インデックスメソッド _shallow_copy() は、新しいインデックスと元のインデックスがキャッシュされた属性を共有するように変更され、どちらかで作成された場合、これらの属性を再度作成するのを回避します。これにより、既存のインデックスのコピーを作成する操作が高速化されます (GH 36840)。

  • RollingGroupby.count() のパフォーマンス改善 (GH 35625)。

  • 固定ウィンドウの Rolling.min() および Rolling.max() のパフォーマンスがわずかに低下しました (GH 36567)。

  • Python 3.8+ で protocol=5 を使用する際の DataFrame.to_pickle() のピークメモリ使用量を削減しました (GH 34244)。

  • オブジェクトに多くのインデックスラベルがある場合 (例: dir(ser))、dir 呼び出しが高速化されました (GH 37450)。

  • ExpandingGroupby のパフォーマンス改善 (GH 37064)。

  • Series.astype() および DataFrame.astype()Categorical でのパフォーマンス改善 (GH 8628)。

  • float dtypeDataFrame.groupby() のパフォーマンス改善 (GH 28303)。基盤となるハッシュ関数の変更は、同値の浮動小数点ベースのインデックスのソート順序に影響を与える可能性があります (例: Index.value_counts())。

  • 100万を超える要素を持つ入力の場合の pd.isin() のパフォーマンス改善 (GH 36611)。

  • リストライクなインデクサを使用した DataFrame.__setitem__() のパフォーマンス改善 (GH 37954)。

  • read_json() は、chunksize が指定された場合にファイル全体をメモリに読み込むことを回避するようになりました (GH 34548)。

バグ修正#

カテゴリカル#

  • Categorical.fillna() は常にコピーを返し、埋める NA があるかどうかに関わらず渡された埋め値の検証を行い、数値カテゴリの埋め値として NaT を許可しないようになりました (GH 36530)。

  • タプル値を設定しようとしたときに誤ってエラーが発生していた Categorical.__setitem__() のバグ (GH 20439)。

  • CategoricalIndex.equals() で、カテゴリ外のエントリを誤って np.nan にキャストしていたバグ (GH 37667)。

  • CategoricalIndex.where() で、カテゴリ外のエントリを TypeError を発生させる代わりに誤って np.nan に設定していたバグ (GH 37977)。

  • tz-aware な datetime64 カテゴリを持つ Categorical.to_numpy() および np.array(categorical) で、タイムゾーン情報を誤って削除し、オブジェクト dtype にキャストしていなかったバグ (GH 38136)。

Datetime-like#

  • DataFrame.combine_first() において、元の DataFrame に存在しない列が他の DataFrame の datetime-like 列を整数に変換するバグ (GH 28481)。

  • 読み取り専用のバッキング配列で ValueError が発生する DatetimeArray.date のバグ (GH 33530)。

  • NaT 比較で無効な不等式比較に対して TypeError が発生しなかったバグ (GH 35046)。

  • DateOffset で、入力値が通常の範囲を超えている場合 (例: months=12)、pickle ファイルから再構築された属性が元のオブジェクトと異なるバグ (GH 34511)。

  • DatetimeIndex.get_slice_bound() で、datetime.date オブジェクトまたは tz-aware の DatetimeIndex を持つ naive な Timestamp が受け入れられなかったバグ (GH 35690)。

  • DatetimeIndex.slice_locs()datetime.date オブジェクトが受け入れられなかったバグ (GH 34077)。

  • DatetimeIndex.searchsorted(), TimedeltaIndex.searchsorted(), PeriodIndex.searchsorted(), および datetime64, timedelta64 または Period dtype を持つ Series.searchsorted() での NaT 値の配置が NumPy と一貫していなかったバグ (GH 36176, GH 36254)。

  • DatetimeArrayTimedeltaArray、および PeriodArray__setitem__ メソッドで、文字列の配列を datetime-like スカラーにキャストするが、スカラー文字列にはキャストしないという不整合があったバグ (GH 36261)。

  • DatetimeArray.take() で、タイムゾーンが一致しない fill_value を誤って許可していたバグ (GH 37356)。

  • DatetimeIndex.shift で、空のインデックスをシフトする際に誤ってエラーが発生していたバグ (GH 14811)。

  • TimestampDatetimeIndex の tz-aware と tz-naive オブジェクト間の比較が、標準ライブラリの datetime の動作に従うようになり、!=/== に対して True/False を返し、不等式比較に対してはエラーを発生させるようになりました (GH 28507)。

  • DatetimeIndex.equals() および TimedeltaIndex.equals() のバグにより、int64 インデックスが誤って等しいと見なされる (GH 36744)

  • Series.to_json()DataFrame.to_json()、および read_json() が、オリエント構造が table の場合にタイムゾーン解析を実装するようになりました (GH 35973)

  • astype() は、文字列からのタイムゾーン推論により、object から datetime64[ns, tz] へ直接変換を試みるようになりました (GH 35973)

  • TimedeltaIndex.sum() および Series.sum() のバグにより、空のインデックスまたはシリーズの timedelta64 dtype で Timedelta(0) ではなく NaT が返される (GH 31751)

  • DatetimeArray.shift() のバグにより、タイムゾーンが一致しない fill_value が誤って許可される (GH 37299)

  • BusinessDay にゼロ以外の offset を非スカラーに追加する際のバグ (GH 37457)

  • to_datetime() のバグにより、読み取り専用配列で誤ってエラーが発生する (GH 34857)

  • Series.isin()datetime64[ns] dtype と DatetimeIndex.isin() のバグにより、整数が誤って日付時刻にキャストされる (GH 36621)

  • Series.isin()datetime64[ns] dtype と DatetimeIndex.isin() のバグにより、タイムゾーン対応とタイムゾーン非対応の日付時刻が常に異なるものとして考慮されない (GH 35728)

  • Series.isin()PeriodDtype dtype と PeriodIndex.isin() のバグにより、異なる PeriodDtype を持つ引数が常に異なるものとして考慮されない (GH 37528)

  • Period コンストラクタのバグにより、value 引数内のナノ秒が正しく処理されなかった件が修正されました (GH 34621 および GH 17053)

Timedelta#

タイムゾーン#

数値#

  • to_numeric() のバグにより、浮動小数点精度の誤りが発生していた (GH 31364)

  • DataFrame.any() のバグにより、axis=1 および bool_only=Truebool_only キーワードが無視される (GH 32432)

  • Series.equals() のバグにより、NumPy 配列とスカラーを比較すると ValueError が発生していた (GH 35267)

  • Series のバグにより、それぞれ異なるタイムゾーンを持つ DatetimeIndex を持つ 2 つの Series で算術演算を実行する際に、インデックスが誤って変更される (GH 33671)

  • pandas.testing モジュール関数のバグにより、複雑な数値型に対して check_exact=False を使用した場合に正しく動作しない (GH 28235)

  • DataFrame.__rmatmul__() のバグにより、転置された形状がエラー処理で報告される (GH 21581)

  • Series の柔軟な算術メソッドのバグにより、listtuple、または np.ndarray と操作した場合の戻り値の名前が不正になる (GH 36760)

  • IntegerArraytimedelta および np.timedelta64 オブジェクトの乗算のバグ (GH 36870)

  • MultiIndex とタプルの比較のバグにより、タプルが誤って配列ライクとして扱われる (GH 21517)

  • DataFrame.diff() のバグにより、datetime64 dtypes が NaT 値を含む場合に、NaT の結果を正しく埋められない (GH 32441)

  • DataFrame の算術演算のバグにより、キーワード引数が誤って受け入れられる (GH 36843)

  • IntervalArraySeries の比較のバグにより、Series が返されない (GH 36908)

  • DataFrame のバグにより、配列ライクのリストとの算術演算が未定義の結果で許可されていた。この動作は ValueError を発生させるように変更されました (GH 36702)

  • DataFrame.std() のバグにより、timedelta64 dtype と skipna=False で不正な値が返される (GH 37392)

  • DataFrame.min() および DataFrame.max() のバグにより、datetime64 dtype と skipna=False で不正な値が返される (GH 36907)

  • DataFrame.idxmax() および DataFrame.idxmin() のバグにより、混合 dtype で誤って TypeError が発生する (GH 38195)

変換#

  • DataFrame.to_dict() のバグにより、orient='records' で datetime-like 列に対して python ネイティブの datetime オブジェクトが返されるようになりました (GH 21256)

  • Series.astype() のバグにより、pd.NA 値が存在する場合に string から float への変換でエラーが発生していた (GH 37626)

文字列#

Interval#

  • DataFrame.replace() および Series.replace() のバグにより、Interval dtypes がオブジェクト dtypes に変換される (GH 34871)

  • IntervalIndex.take() のバグにより、負のインデックスと fill_value=None で不正な動作が発生する (GH 37330)

  • IntervalIndex.putmask() のバグにより、datetime-like dtype が誤ってオブジェクト dtype にキャストされる (GH 37968)

  • IntervalArray.astype() のバグにより、CategoricalDtype オブジェクトで dtype 情報が誤って削除される (GH 37984)

インデックス付け#

  • PeriodIndex.get_loc() のバグにより、日付ライクでない文字列に対して KeyError ではなく ValueError が誤って発生し、Series.__getitem__()Series.__contains__()、および Series.loc.__getitem__() でも同様のエラーが発生していた (GH 34240)

  • Index.sort_values() のバグにより、空の値が渡された場合に、欠損値をソート順の最後にプッシュする代わりに比較しようとしてメソッドが破損していた (GH 35584)

  • Index.get_indexer() および Index.get_indexer_non_unique() のバグにより、intp ではなく int64 配列が返される (GH 36359)

  • DataFrame.sort_index() のバグにより、単一レベルインデックスで ascending パラメータがリストとして渡された場合に誤った結果が返される (GH 32334)

  • DataFrame.reset_index() のバグにより、MultiIndexCategorical dtype のレベルに欠損値がある入力に対して誤って ValueError が発生していた (GH 24206)

  • datetime-like 値のブールマスクでのインデックス作成のバグにより、コピーではなくビューが返される場合があった (GH 36210)

  • DataFrame.__getitem__() および DataFrame.loc.__getitem__() のバグにより、IntervalIndex 列と数値インデクサーで不正な動作が発生する (GH 26490)

  • Series.loc.__getitem__() のバグにより、一意でない MultiIndex と空のリストインデクサーで不正な動作が発生する (GH 13691)

  • Series または DataFrame で、MultiIndex を持ち、レベル名が "0" の場合に、インデックス作成のバグが発生する (GH 37194)

  • Series.__getitem__() のバグにより、符号なし整数配列をインデクサーとして使用した場合に、KeyError が発生する代わりに不正な結果やセグメンテーション違反が発生していた (GH 37218)

  • Index.where() のバグにより、数値が誤って文字列にキャストされる (GH 37591)

  • DataFrame.loc() のバグにより、インデクサーが負のステップサイズのスライスである場合に空の結果が返される (GH 38071)

  • Series.loc() および DataFrame.loc() のバグにより、インデックスが object dtype で、与えられた数値ラベルがインデックス内に存在する場合にエラーが発生する (GH 26491)

  • DataFrame.loc() のバグにより、MultiIndex の単一レベルに loc が適用された場合に、要求されたキーと欠損値が返される (GH 27104)

  • Series または DataFrame で、CategoricalIndex を使用し、NA 値を含むリストライクなインデクサーを使用した場合のインデックス作成のバグ (GH 37722)

  • DataFrame.loc.__setitem__() のバグにより、混合 dtype の空の DataFrame が拡張される (GH 37932)

  • DataFrame.xs() のバグにより、列の droplevel=False が無視される (GH 19056)

  • DataFrame.reindex() のバグにより、toleranceNone でないか、method="nearest" の空の DataFrame に対して誤って IndexingError が発生する (GH 27315)

  • Series または DataFrame で、CategoricalIndex を使用し、インデックスの categories にはあるがインデックス自体にはない要素を含むリストライクなインデクサーを使用した場合に、KeyError が発生しないというインデックス作成のバグ (GH 37901)

  • DataFrame に、数値 Index 列を持つブールラベルを挿入する際のバグにより、誤って整数にキャストされる (GH 36319)

  • DataFrame.iloc() および Series.iloc() のバグにより、__setitem__ でオブジェクトが整列される (GH 22046)

  • MultiIndex.drop() のバグにより、ラベルが部分的に見つかった場合にエラーが発生しない (GH 37820)

  • DataFrame.loc() のバグにより、残りのレベルに slice(None) が与えられた場合に、欠損の組み合わせに対して KeyError が発生しない (GH 19556)

  • DataFrame.loc() のバグにより、MultiIndex から値を選択するために非整数スライスが与えられた場合に TypeError が発生する (GH 25165, GH 24263)

  • Series.at() のバグにより、インデックスが単一レベルの MultiIndex である場合に、スカラーではなく単一要素の Series が返される (GH 38053)

  • DataFrame.loc() のバグにより、インデクサーがフィルタリング対象の MultiIndex と異なる順序である場合に、要素が誤った順序で返され、割り当てられる (GH 31330, GH 34603)

  • DataFrame.loc() および DataFrame.__getitem__() のバグにより、列が単一レベルの MultiIndex である場合に KeyError が発生する (GH 29749)

  • Series.__getitem__() および DataFrame.__getitem__() のバグにより、IntervalIndex の欠損キーなしで空の KeyError が発生する (GH 27365)

  • DataFrame または Series で、CategoricalIndex を持ち、新しいラベルがインデックスのカテゴリにない場合に、新しいラベルを設定する際のバグにより、誤って TypeError が発生する (GH 38098)

  • Series.loc() および Series.iloc() のバグにより、同じ長さの object Series にリストライクな np.arraylist、または tuple を挿入する際に ValueError が発生していた (GH 37748, GH 37486)

  • Series.loc() および Series.iloc() のバグにより、object Series のすべての値がリストライクな ExtensionArray の値で置き換えられ、挿入されなかった (GH 38271)

欠損値#

  • SeriesGroupBy.transform() のバグにより、dropna=False の欠損値が正しく処理されなかった件が修正されました (GH 35014)

  • Series.nunique() のバグにより、dropna=TrueNANone の両方の欠損値が存在する場合に不正な結果が返される (GH 37566)

  • Series.interpolate() のバグにより、メソッド pad および backfill を使用した場合に kwarg limit_arealimit_direction が効果を発揮しなかった (GH 31048)

MultiIndex#

  • DataFrame.xs() のバグにより、IndexSlice と組み合わせて使用すると "Expected label or tuple of labels" というメッセージで TypeError が発生する (GH 35301)

  • DataFrame.reset_index() のバグにより、インデックスに NaT 値がある場合に "cannot convert float NaN to integer" というメッセージで ValueError が発生する (GH 36541)

  • DataFrame.combine_first() のバグにより、文字列と NaN 値を含む MultiIndex と組み合わせて使用すると TypeError が発生する (GH 36562)

  • MultiIndex.drop() のバグにより、存在しないキーが入力として与えられた場合に NaN 値が削除される (GH 18853)

  • MultiIndex.drop() のバグにより、インデックスに重複がありソートされていない場合に、予想よりも多くの値が削除される (GH 33494)

I/O#

  • read_sas() が失敗時にリソースをリークしなくなりました (GH 35566)

  • DataFrame.to_csv() および Series.to_csv() のバグにより、modeb が含まれるファイル名と組み合わせて呼び出すと ValueError が発生する (GH 35058)

  • read_csv() のバグにより、float_precision='round_trip'decimal および thousands パラメータが処理されなかった (GH 35365)

  • to_pickle() および read_pickle() がユーザー提供のファイルオブジェクトを閉じるように変更されました (GH 35679)

  • to_csv()'gzip' の圧縮引数を常に gzip.GzipFile に渡すようになりました (GH 28103)

  • to_csv() のバグにより、ファイル名を持たないバイナリファイルオブジェクトの zip 圧縮がサポートされなかった (GH 35058)

  • to_csv() および read_csv() のバグにより、内部的にファイルライクオブジェクトに変換されるパスライクオブジェクトに対して compression および encoding が考慮されなかった (GH 35677, GH 26124, GH 32392)

  • DataFrame.to_pickle()Series.to_pickle()、および read_pickle() のバグにより、ファイルオブジェクトの圧縮がサポートされなかった (GH 26237, GH 29054, GH 29570)

  • LongTableBuilder.middle_separator() のバグにより、LaTeX ドキュメントの図表目次で LaTeX の longtable エントリが重複していた (GH 34360)

  • read_csv() のバグにより、engine='python' で最初の行に複数の項目があり、最初の要素が BOM で始まる場合にデータが切り捨てられる (GH 36343)

  • read_gbq() から private_keyverbose が削除されました。これらは pandas-gbq でサポートされなくなったためです (GH 34654, GH 30200)

  • read_hdf() での ValueError を回避するため、最低限必要な pytables バージョンが 3.5.1 に引き上げられました (GH 24839)

  • read_table() および read_csv() のバグにより、delim_whitespace=True および sep=default の場合に不正な動作が発生する (GH 36583)

  • DataFrame.to_json() および Series.to_json() のバグにより、lines=True および orient='records' を使用した場合に、レコードの最後の行に「改行文字」が付加されない (GH 36888)

  • read_parquet() のバグにより、固定オフセットタイムゾーンが正しく処理されなかった。タイムゾーンの文字列表現が認識されなかった (GH 35997, GH 36004)

  • DataFrame.to_html()DataFrame.to_string()、および DataFrame.to_latex() のバグにより、float_format も指定されている場合に na_rep 引数が無視される (GH 9046, GH 13828)

  • 複雑な数値の出力表示のバグにより、末尾のゼロが多すぎた (GH 36799)

  • HDFStore のバグにより、固定 HDF5 ストアで datetime64[ns, tz] dtypes を持つ空の DataFrame をエクスポートする際に TypeError が発生する (GH 20594)

  • HDFStore のバグにより、固定 HDF5 ストアで datetime64[ns, tz] dtypes を持つ Series をエクスポートする際にタイムゾーン情報が削除される (GH 20594)

  • read_csv() のバグにより、engine="c" でエンコーディングが要求された場合に、ユーザー提供のバイナリファイルハンドルが閉じられた (GH 36980)

  • DataFrame.to_hdf() のバグにより、dropna=True で欠損行が削除されなかった (GH 35719)

  • read_html() のバグにより、io パラメータに pathlib.Path 引数を指定すると TypeError が発生していた (GH 37705)

  • DataFrame.to_excel()Series.to_excel()DataFrame.to_markdown()、および Series.to_markdown() が、S3 や Google Cloud Storage などの fsspec URL への書き込みをサポートするようになりました (GH 33987)

  • read_fwf() のバグにより、skip_blank_lines=True で空行がスキップされなかった (GH 37758)

  • read_json()dtype=False で使用した場合に、欠損値が None ではなく NaN として解析されるようになりました (GH 28501)

  • read_fwf()compression=None で圧縮を推論していました。これは他の read_* 関数と一貫していなかった (GH 37909)

  • DataFrame.to_html() のバグにより、ExtensionDtype 列の formatters 引数が無視される (GH 36525)

  • 削除された Panel クラスへの参照を避けるため、xarray の最小バージョンが 0.12.3 に引き上げられました (GH 27101, GH 37983)

  • DataFrame.to_csv() のバグにより、os.PathLike も実装するファイルライクなハンドルを再度開いていた (GH 38125)

  • 欠損値を含むスライスされた pyarrow.Table から DataFrame への変換のバグ (GH 38525)

  • read_sql_table() のバグにより、列名にパーセント記号が含まれている場合に sqlalchemy.exc.OperationalError が発生していた (GH 37517)

期間#

プロット#

  • DataFrame.plot() のバグにより、subplots=True の場合に、x 軸が不規則な時系列でなくても xticklabels が回転していた (GH 29460)

  • DataFrame.plot() のバグにより、style キーワードのマーカー文字が ValueError を引き起こすことがあった (GH 21003)

  • DataFrame.plot.bar() および Series.plot.bar() のバグにより、数値の実際の値や文字列のスマートな順序ではなく、値の順序でティックの位置が割り当てられていた (GH 26186, GH 11465)。この修正は pandas 1.2.1 で元に戻されました。詳細は What’s new in 1.2.1 (January 20, 2021) を参照してください。

  • 連結された軸がティックラベルを失っていたが、これは「外部的に」共有された軸の最後の行または列以外のすべてにのみ発生するはずだった (GH 33819)

  • Series.plot() および DataFrame.plot() のバグにより、Series または DataFrame が固定周波数の TimedeltaIndex でインデックス付けされており、x 軸の下限が上限より大きい場合に ValueError が発生していた (GH 37454)

  • DataFrameGroupBy.boxplot() のバグにより、subplots=False の場合に KeyError が発生する (GH 16748)

  • DataFrame.plot() および Series.plot() のバグにより、sharey パラメータが渡されない場合に Matplotlib の共有 y 軸の動作が上書きされていた (GH 37942)

  • DataFrame.plot() のバグにより、ExtensionDtype 列で TypeError が発生していた (GH 32073)

Styler#

  • Styler.render() のバグにより、rowspan 属性のフォーマットエラーのために HTML が誤って生成されていた。現在は w3 構文と一致するようになりました (GH 38234)

Groupby/resample/rolling#

  • DataFrameGroupBy.count() および SeriesGroupBy.sum() のバグにより、複数の Categoricals でグループ化した場合に、欠損カテゴリに対して NaN が返されていた。現在は 0 が返されます (GH 35028)

  • DataFrameGroupBy.apply() のバグにより、グループ化軸に重複するエントリがある場合に、誤って ValueError が発生することがあった (GH 16646)

  • DataFrame.resample() のバグにより、夏時間 (DST) への移行時に "D" から "24H" へリサンプリングすると ValueError が発生する (GH 35219)

  • DataFrame.groupby()DataFrame.resample() および DataFrame.interpolate() を組み合わせる際のバグにより、TypeError が発生する (GH 35325)

  • DataFrameGroupBy.apply() のバグにより、.apply が呼び出される前に別の groupby メソッドが呼び出された場合、非迷惑なグループ化列が出力列から削除されることがあった (GH 34656)

  • DataFrameGroupBy の列をサブセット化する際のバグ (例: df.groupby('a')[['b']])) により、属性 axisdropnagroup_keyslevelmutatedsort、および squeeze がデフォルト値にリセットされる (GH 9959)

  • DataFrameGroupBy.tshift() のバグにより、グループのインデックスの頻度が推論できない場合に ValueError が発生しない (GH 35937)

  • DataFrame.groupby() のバグにより、anyallbfillffillshift で列インデックス名が常に維持されない (GH 29764)

  • DataFrameGroupBy.apply() のバグにより、dropna=False の場合に np.nan グループでエラーが発生する (GH 35889)

  • Rolling.sum() のバグにより、dtype が float と integer で混在し、axis=1 の場合に誤った値が返されました (GH 20649, GH 35596)。

  • Rolling.count() のバグにより、FixedForwardWindowIndexer をウィンドウとして使用し、min_periods=0 でウィンドウ内に欠損値のみがある場合に np.nan が返されました (GH 35579)。

  • RollingPeriodIndex を使用する際に誤ったウィンドウサイズを生成するバグ (GH 34225)。

  • DataFrameGroupBy.ffill() および DataFrameGroupBy.bfill() のバグで、dropna=True の場合に NaN グループが NaN ではなく埋められた値を返す (GH 34725)。

  • RollingGroupby.count() のバグで、closed パラメータを指定すると ValueError が発生する (GH 35869)。

  • DataFrameGroupBy.rolling() のバグにより、部分的に中央に配置されたウィンドウで誤った値が返される (GH 36040)。

  • DataFrameGroupBy.rolling() のバグにより、NaN を含む時間認識ウィンドウで誤った値が返されました。ウィンドウが単調でなくなったため、ValueError が発生します (GH 34617)。

  • Rolling.__iter__() のバグで、min_periodswindow より大きい場合に ValueError が発生しなかった (GH 37156)。

  • Rolling.std() が浮動小数点精度を超えている間、Rolling.var() が浮動小数点精度内にある場合、Rolling.std() の代わりに Rolling.var() を使用することで、Rolling.corr() の数値的な問題を回避できます (GH 31286)。

  • DataFrameGroupBy.quantile() および Resampler.quantile() のバグで、値が Timedelta 型の場合に TypeError が発生する (GH 29485)。

  • Rolling.median() および Rolling.quantile() のバグにより、ウィンドウの開始点または終了点が非単調な BaseIndexer サブクラスに対して誤った値が返される (GH 37153)。

  • DataFrame.groupby() のバグで、単一列でグループ化する際に dropna=False で結果から nan グループが削除される (GH 35646, GH 35542)。

  • DataFrameGroupBy.head(), DataFrameGroupBy.tail(), SeriesGroupBy.head(), および SeriesGroupBy.tail() のバグで、axis=1 と共に使用するとエラーが発生する (GH 9772)。

  • DataFrameGroupBy.transform() のバグで、axis=1 と変換カーネル (例: "shift") と共に使用するとエラーが発生する (GH 36308)。

  • DataFrameGroupBy.resample() のバグで、.agg を sum と共に使用すると、単に .sum を呼び出す場合と異なる結果が生成される (GH 33548)。

  • DataFrameGroupBy.apply() のバグで、元のフレームと同じ軸を返す際に nan グループの値が削除される (GH 38227)。

  • DataFrameGroupBy.quantile() のバグで、列でグループ化する際に配列のような q を処理できない (GH 33795)。

  • DataFrameGroupBy.rank() のバグで、datetime64tz または period dtype で誤って結果がそれらの dtype にキャストされ、float64 dtype が返されない (GH 38187)。

再整形#

  • DataFrame.crosstab() のバグで、重複する行名、重複する列名、または行と列のラベル間で重複する名前を持つ入力で誤った結果を返していた (GH 22529)。

  • DataFrame.pivot_table() のバグで、aggfunc='count' または aggfunc='sum' を使用して Categorical でピボットした場合に、欠損カテゴリに対して NaN が返されていた。現在は 0 が返されます (GH 31422)。

  • concat() および DataFrame コンストラクタのバグで、場合によっては入力インデックス名が保持されない (GH 13475)。

  • 関数 crosstab() のバグで、margins=True および normalize=True と共に複数の列を使用した場合 (GH 35144)。

  • DataFrame.stack() のバグで、空の DataFrame.stack がエラーを発生させた (GH 36113)。現在は空の MultiIndex を持つ空の Series を返します。

  • Series.unstack() のバグ。単一レベルのインデックスを持つ Series が unstack しようとすると、ValueError が発生するようになりました (GH 36113)。

  • DataFrame.agg() のバグで、func={'name':<FUNC>}DataFrame.columns==['Name'] の場合に誤って TypeError が発生する (GH 36212)。

  • Series.transform() のバグで、引数 func が辞書の場合に誤った結果を返したり、エラーが発生したりする (GH 35811)。

  • DataFrame.pivot() のバグで、行と列の両方がマルチインデックスの場合に列の MultiIndex レベル名が保持されない (GH 36360)。

  • DataFrame.pivot() のバグで、columns が渡され、values が渡されなかった場合に index 引数を変更する (GH 37635)。

  • DataFrame.join() のバグにより、結果の MultiIndex のレベル順序が非決定論的になる (GH 36910)。

  • DataFrame.combine_first() のバグにより、dtype が string で、MultiIndex の単一レベルに NA のみが含まれる場合に誤ったアライメントが発生した (GH 37591)。

  • 空の DataFrame と DatetimeIndex をマージする際の merge() の回帰バグを修正 (GH 36895)。

  • DataFrame.apply() のバグで、func の戻り値の型が dict の場合に、戻り値のインデックスが設定されない (GH 37544)。

  • DataFrame.merge() および pandas.merge() のバグで、how=right および how=left の結果の順序が不一致になる (GH 35382)。

  • merge_ordered() のバグで、リストのような left_by または right_by を処理できない (GH 35269)。

  • merge_ordered() のバグで、left_by または right_by の長さが left または right の行数と等しい場合に誤った結合結果を返す (GH 38166)。

  • merge_ordered() のバグで、left_by または right_by の要素が left の列または right の列に存在しない場合にエラーを発生させなかった (GH 38167)。

  • DataFrame.drop_duplicates() のバグで、ignore_index キーワードの bool dtype を検証しない (GH 38274)。

ExtensionArray#

  • 辞書インスタンス化によってスカラー拡張型に設定された DataFrame の列が、拡張型ではなくオブジェクト型として扱われるバグを修正 (GH 35965)。

  • 等しい dtype と copy=Falseastype() を適用した場合に新しいオブジェクトを返すバグを修正 (GH 28488)。

  • 複数の出力を伴う NumPy ufunc を IntegerArray に適用した場合に None を返すバグを修正 (GH 36913)。

  • PeriodArray__init__ シグネチャが DatetimeArray および TimedeltaArray のシグネチャと一貫性がなかったバグを修正 (GH 37289)。

  • BooleanArrayCategoricalDatetimeArrayFloatingArrayIntegerArrayPeriodArrayTimedeltaArray、および PandasArray の削減がキーワード専用メソッドになりました (GH 37541)。

  • nan-like な値を含む ExtensionArray でメンバーシップチェックが行われた場合に TypeError が誤って発生するバグを修正 (GH 37867)。

その他#

  • DataFrame.replace() および Series.replace() のバグで、無効なパラメータの組み合わせが渡された場合に ValueError の代わりに誤って AssertionError を発生させる (GH 36045)。

  • DataFrame.replace() および Series.replace() のバグで、数値と文字列の to_replace を使用した場合 (GH 34789)。

  • Series.abs() および Series と DataFrame で呼び出される ufuncs でのメタデータ伝播を修正 (GH 28283)。

  • DataFrame.replace() および Series.replace() のバグで、PeriodDtype からオブジェクト dtype へ誤ってキャストされる (GH 34871)。

  • 列名がメタデータ名と重複する場合に、DataFrame の列がメタデータとして誤ってコピーされるメタデータ伝播のバグを修正 (GH 37037)。

  • Series.dt, Series.str アクセサ、DataFrame.duplicated, DataFrame.stack, DataFrame.unstack, DataFrame.pivot, DataFrame.append, DataFrame.diff, DataFrame.applymap および DataFrame.update メソッドでのメタデータ伝播を修正 (GH 28283, GH 37381)。

  • DataFrame.__getitem__ で列を選択する際のメタデータ伝播を修正 (GH 28283)。

  • Index.intersection() のバグで、非 Index で戻り値の Index に正しい名前が設定されない (GH 38111)。

  • RangeIndex.intersection() のバグで、特定のエッジケースで戻り値の Index に正しい名前が設定されない (GH 38197)。

  • Index.difference() のバグで、特定のエッジケースで戻り値の Index に正しい名前が設定されない (GH 38268)。

  • Index.union() のバグで、オペランドが Index か他のリストライクなものかによって動作が異なる (GH 36384)。

  • Index.intersection() のバグで、一致しない数値 dtype が最小共通 dtype ではなく object dtype にキャストされる (GH 38122)。

  • IntervalIndex.union() のバグで、空の場合に誤った型の Index が返される (GH 38282)。

  • 2 次元以上の配列を Series コンストラクタに渡すと、単純な Exception ではなく、より具体的な ValueError が発生するようになりました (GH 35744)。

  • dir のバグで、dir(obj) が pandas オブジェクトのインスタンスで定義された属性を表示しない (GH 37173)。

  • Index.drop() のバグで、インデックスに重複がある場合に InvalidIndexError が発生する (GH 38051)。

  • RangeIndex.difference() のバグで、RangeIndex を返す必要がある場合に Int64Index を返す場合がある (GH 38028)。

  • datetime-like 配列と等価な非拡張 dtype 配列を比較する際の assert_series_equal() のバグを修正 (GH 37609)。

  • is_bool_dtype() のバグで、"boolean" のような有効な文字列が渡された場合にエラーが発生する (GH 38386)。

  • DataFrame の列が未使用カテゴリを持つ CategoricalIndex である場合に、論理演算子で ValueError が発生する回帰バグを修正 (GH 38367)。

貢献者#

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

  • 21CSM +

  • AbdulMAbdi +

  • Abhiraj Hinge +

  • Abhishek Mangla +

  • Abo7atm +

  • Adam Spannbauer +

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

  • Alex Kirko

  • Alex Lim +

  • Alex Thorne +

  • Aleš Erjavec +

  • Ali McMaster

  • Amanda Dsouza +

  • Amim Knabben +

  • Andrew Wieteska

  • Anshoo Rajput +

  • Anthony Milbourne

  • Arun12121 +

  • Asish Mahapatra

  • Avinash Pancham +

  • BeanNan +

  • Ben Forbes +

  • Brendan Wilby +

  • Bruno Almeida +

  • Byron Boulton +

  • Chankey Pathak

  • Chris Barnes +

  • Chris Lynch +

  • Chris Withers

  • Christoph Deil +

  • Christopher Hadley +

  • Chuanzhu Xu

  • Coelhudo +

  • Dan Moore

  • ダニエル・サクストン

  • David Kwong +

  • David Li +

  • David Mrva +

  • Deepak Pandey +

  • Deepyaman Datta

  • Devin Petersohn

  • Dmitriy Perepelkin +

  • Douglas Hanley +

  • Dāgs Grīnbergs +

  • Eli Treuherz +

  • Elliot Rampono +

  • Erfan Nariman

  • Eric Goddard

  • Eric Leung +

  • Eric Wieser

  • Ethan Chen +

  • Eve +

  • Eyal Trabelsi +

  • Fabian Gebhart +

  • ファンチェン・リー

  • Felix Claessen +

  • Finlay Maguire +

  • Florian Roscheck +

  • Gabriel Monteiro

  • Gautham +

  • Gerard Jorgensen +

  • Gregory Livschitz

  • ハンス

  • Harsh Sharma

  • Honfung Wong +

  • Igor Gotlibovych +

  • Iqrar Agalosi Nureyza

  • アーブ・ラスティッグ

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

  • Jacob Peacock

  • Jacob Stevens-Haas +

  • Jan Müller +

  • Janus

  • Jeet Parekh

  • Jeff Hernandez +

  • ジェフ・リーバック

  • Jiaxiang

  • Joao Pedro Berno Zanutto +

  • Joel Nothman

  • Joel Whittier +

  • John Karasinski +

  • John McGuigan +

  • Johnny Pribyl +

  • Jonas Laursen +

  • Jonathan Shreckengost +

  • Joris Van den Bossche

  • Jose +

  • JoseNavy +

  • Josh Temple +

  • Jun Kudo +

  • Justin Essert

  • Justin Sexton +

  • Kaiqi Dong

  • Kamil Trocewicz +

  • Karthik Mathur

  • Kashif +

  • Kenny Huynh

  • ケビン・シェパード

  • Kumar Shivam +

  • Leonardus Chen +

  • Levi Matus +

  • Lucas Rodés-Guirao +

  • Luis Pinto +

  • Lynch +

  • Marc Garcia

  • マルコ・ゴレリ

  • Maria-Alexandra Ilie +

  • Marian Denes

  • Mark Graham +

  • Martin Durant

  • Matt Roeschke

  • Matthew Roeschke

  • Matthias Bussonnier

  • Maxim Ivanov +

  • Mayank Chaudhary +

  • MeeseeksMachine

  • Meghana Varanasi +

  • Metehan Kutlu +

  • Micael Jarniac +

  • Micah Smith +

  • Michael Marino

  • Miroslav Šedivý

  • Mohammad Jafar Mashhadi

  • Mohammed Kashif +

  • Nagesh Kumar C +

  • Nidhi Zare +

  • Nikhil Choudhary +

  • Number42

  • Oleh Kozynets +

  • OlivierLuG

  • Pandas Development Team

  • Paolo Lammens +

  • Paul Ganssle

  • Pax +

  • Peter Liu +

  • Philip Cerles +

  • Pranjal Bhardwaj +

  • Prayag Savsani +

  • Purushothaman Srikanth +

  • Qbiwan +

  • Rahul Chauhan +

  • Rahul Sathanapalli +

  • Rajat Bishnoi +

  • Ray Bell

  • Reshama Shaikh +

  • Richard Shadrach

  • Robert Bradshaw

  • Robert de Vries

  • Rohith295

  • S Mono +

  • S.TAKENO +

  • Sahid Velji +

  • Sam Cohen +

  • Sam Ezebunandu +

  • Sander +

  • Sarthak +

  • Sarthak Vineet Kumar +

  • Satrio H Wicaksono +

  • Scott Lasley

  • Shao Yang Hong +

  • Sharon Woo +

  • Shubham Mehra +

  • Simon Hawkins

  • Sixuan (Cherie) Wu +

  • Souris Ash +

  • Steffen Rehberg

  • Suvayu Ali

  • スヴェン

  • SylvainLan +

  • T. JEGHAM +

  • テルジ・ピーターセン

  • Thomas Dickson +

  • Thomas Heavey +

  • Thomas Smith

  • Tobias Pitters

  • Tom Augspurger

  • Tomasz Sakrejda +

  • Torsten Wörtwein +

  • Ty Mick +

  • UrielMaD +

  • Uwe L. Korn

  • Vikramaditya Gaonkar +

  • VirosaLi +

  • W.R +

  • Warren White +

  • Wesley Boelrijk +

  • ウィリアム・エイド

  • Yanxian Lin +

  • Yassir Karroum +

  • Yong Kai Yi +

  • Yuanhao Geng +

  • Yury Mikhaylov +

  • Yutaro Ikeda

  • Yuya Takashina +

  • Zach Brookler +

  • Zak Kohler +

  • ZhihuiChen0903 +

  • abmyii

  • alexhtn +

  • asharma13524 +

  • attack68

  • beanan +

  • chinhwee

  • cleconte987

  • danchev +

  • ebardie +

  • edwardkong

  • elliot rampono +

  • estasney +

  • gabicca

  • geetha-rangaswamaiah +

  • ジーエフヤング

  • guru kiran

  • hardikpnsp +

  • icanhazcodeplz +

  • ivanovmg +

  • jbrockmendel

  • jeschwar

  • jnecus

  • joooeey +

  • junk +

  • krajatcl +

  • lacrosse91 +

  • leo +

  • lpkirwin +

  • lrjball

  • lucasrodes +

  • ma3da +

  • mavismonica +

  • mlondschien +

  • mzeitlin11 +

  • nguevara +

  • nrebena

  • parkdj1 +

  • パルテフ

  • パトリック

  • realead

  • rxxg +

  • samilAyoub +

  • sanderland

  • shawnbrown

  • sm1899 +

  • smartvinnetou

  • ssortman +

  • steveya +

  • taytzehao +

  • tiagohonorato +

  • timhunderwood

  • tkmz-n +

  • tnwei +

  • tpanza +

  • vineethraj510 +

  • vmdhhh +

  • xinrong-databricks +

  • yonas kassa +

  • yonashub +

  • Ádám Lippai +