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.nan と pd.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]
さらに、mean は Numba を介した実行を engine および engine_kwargs 引数でサポートしています。この機能を使用するには、Numba をオプションの依存関係としてインストールする必要があります。
その他の機能強化#
Timestamp、DatetimeIndex、Period、PeriodIndexにday_of_week(互換性エイリアスdayofweek) プロパティを追加しました (GH 9605)。Timestamp、DatetimeIndex、Period、PeriodIndexにday_of_year(互換性エイリアスdayofyear) プロパティを追加しました (GH 9605)。Series または DataFrame にテーブル全体のフラグを設定するための
set_flags()を追加しました (GH 28394)。DataFrame.applymap()はna_actionをサポートするようになりました (GH 23803)。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)。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)。DataFrame.to_parquet()は、path引数が渡されない場合にbytesオブジェクトを返すようになりました (GH 37105)。Rollingは、固定ウィンドウのclosed引数をサポートするようになりました (GH 34315)。DatetimeIndexとdatetime64またはdatetime64tzdtypes を持つSeriesがstdをサポートするようになりました (GH 37436)。Windowは、Scipy のすべてのウィンドウタイプをwin_typeでサポートし、柔軟なキーワード引数もサポートするようになりました (GH 34556)。testing.assert_index_equal()はcheck_orderパラメータを持つようになり、インデックスを順序に依存しない方法でチェックできるようになりました (GH 37478)。read_csv()は圧縮ファイルのメモリマップをサポートするようになりました (GH 37621)。DataFrame.groupby()およびDataFrame.resample()のmin、max、first、last関数に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-likeIndexサブクラスに対するIndex.sort_values()の降順ソートは安定するようになりました。これは、複数の列で DataFrame をソートする場合、重複を生成するキー関数でソートする場合、またはIndex.sort_values()を使用してソートインデックスを要求する場合にソート順序に影響します。Series.value_counts()を使用する場合、欠損値のカウントはもはや必ずしも重複カウントのリストの最後に位置するわけではありません。代わりに、元の Series 内の位置に対応します。Datetime-likeIndexサブクラスに対して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)。DataFrameとSeriesの間の比較演算での自動アラインメントは非推奨になりました。例えば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のサブクラス (DatetimeIndex、TimedeltaIndex、PeriodIndexを除く) に対する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)。floatdtype列の非 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)。floatdtypeのDataFrame.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またはPerioddtype を持つSeries.searchsorted()でのNaT値の配置が NumPy と一貫していなかったバグ (GH 36176, GH 36254)。DatetimeArray、TimedeltaArray、およびPeriodArrayの__setitem__メソッドで、文字列の配列を datetime-like スカラーにキャストするが、スカラー文字列にはキャストしないという不整合があったバグ (GH 36261)。DatetimeArray.take()で、タイムゾーンが一致しないfill_valueを誤って許可していたバグ (GH 37356)。DatetimeIndex.shiftで、空のインデックスをシフトする際に誤ってエラーが発生していたバグ (GH 14811)。TimestampとDatetimeIndexの 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()のバグにより、空のインデックスまたはシリーズのtimedelta64dtype で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()のPeriodDtypedtype とPeriodIndex.isin()のバグにより、異なるPeriodDtypeを持つ引数が常に異なるものとして考慮されない (GH 37528)Periodコンストラクタのバグにより、value引数内のナノ秒が正しく処理されなかった件が修正されました (GH 34621 および GH 17053)
Timedelta#
TimedeltaIndex、Series、およびDataFrameのバグにより、timedelta64dtypes および分母のNaTで整数除算が不正になる (GH 35529)Timedeltaおよびto_datetime()における ISO 8601 期間の解析のバグ (GH 29773, GH 36204)to_timedelta()のバグにより、読み取り専用配列で誤ってエラーが発生する (GH 34857)Timedeltaのバグにより、文字列入力のナノ秒よりも高い精度がある場合に、誤ってサブ秒部分に切り捨てられる (GH 36738)
タイムゾーン#
date_range()のバグにより、ambiguous=Falseの有効な入力に対してAmbiguousTimeErrorが発生していた (GH 35297)Timestamp.replace()のバグにより、折りたたみ情報が失われていた (GH 37610)
数値#
to_numeric()のバグにより、浮動小数点精度の誤りが発生していた (GH 31364)DataFrame.any()のバグにより、axis=1およびbool_only=Trueでbool_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の柔軟な算術メソッドのバグにより、list、tuple、またはnp.ndarrayと操作した場合の戻り値の名前が不正になる (GH 36760)IntegerArrayとtimedeltaおよびnp.timedelta64オブジェクトの乗算のバグ (GH 36870)MultiIndexとタプルの比較のバグにより、タプルが誤って配列ライクとして扱われる (GH 21517)DataFrame.diff()のバグにより、datetime64dtypes がNaT値を含む場合に、NaTの結果を正しく埋められない (GH 32441)IntervalArrayとSeriesの比較のバグにより、Series が返されない (GH 36908)DataFrameのバグにより、配列ライクのリストとの算術演算が未定義の結果で許可されていた。この動作はValueErrorを発生させるように変更されました (GH 36702)DataFrame.std()のバグにより、timedelta64dtype とskipna=Falseで不正な値が返される (GH 37392)DataFrame.min()およびDataFrame.max()のバグにより、datetime64dtype と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)
文字列#
Series.to_string()、DataFrame.to_string()、およびDataFrame.to_latex()のバグにより、index=Falseの場合に先頭にスペースが追加される (GH 24980)to_numeric()のバグにより、数値文字列とNAのみを含む文字列 dtype Series を変換しようとするとTypeErrorが発生していた (GH 37262)
Interval#
DataFrame.replace()およびSeries.replace()のバグにより、Intervaldtypes がオブジェクト 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()のバグにより、MultiIndexでCategoricaldtype のレベルに欠損値がある入力に対して誤って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()のバグにより、インデックスがobjectdtype で、与えられた数値ラベルがインデックス内に存在する場合にエラーが発生する (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()のバグにより、toleranceがNoneでないか、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()のバグにより、同じ長さのobjectSeries にリストライクなnp.array、list、またはtupleを挿入する際にValueErrorが発生していた (GH 37748, GH 37486)Series.loc()およびSeries.iloc()のバグにより、objectSeries のすべての値がリストライクなExtensionArrayの値で置き換えられ、挿入されなかった (GH 38271)
欠損値#
SeriesGroupBy.transform()のバグにより、dropna=Falseの欠損値が正しく処理されなかった件が修正されました (GH 35014)Series.nunique()のバグにより、dropna=TrueでNAとNoneの両方の欠損値が存在する場合に不正な結果が返される (GH 37566)Series.interpolate()のバグにより、メソッドpadおよびbackfillを使用した場合に kwarglimit_areaとlimit_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()のバグにより、modeにbが含まれるファイル名と組み合わせて呼び出すと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_keyとverboseが削除されました。これらは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.replace()およびSeries.replace()のバグにより、Perioddtypes がオブジェクト dtypes に変換される (GH 34871)
プロット#
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']])) により、属性axis、dropna、group_keys、level、mutated、sort、およびsqueezeがデフォルト値にリセットされる (GH 9959)DataFrameGroupBy.tshift()のバグにより、グループのインデックスの頻度が推論できない場合にValueErrorが発生しない (GH 35937)DataFrame.groupby()のバグにより、any、all、bfill、ffill、shiftで列インデックス名が常に維持されない (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)。RollingがPeriodIndexを使用する際に誤ったウィンドウサイズを生成するバグ (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_periodsがwindowより大きい場合に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 にキャストされ、float64dtype が返されない (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=Falseでastype()を適用した場合に新しいオブジェクトを返すバグを修正 (GH 28488)。複数の出力を伴う NumPy ufunc を
IntegerArrayに適用した場合にNoneを返すバグを修正 (GH 36913)。PeriodArrayの__init__シグネチャがDatetimeArrayおよびTimedeltaArrayのシグネチャと一貫性がなかったバグを修正 (GH 37289)。BooleanArray、Categorical、DatetimeArray、FloatingArray、IntegerArray、PeriodArray、TimedeltaArray、および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 ではなくobjectdtype にキャストされる (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 +