What’s new in 1.1.0 (2020年7月28日)#

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

機能強化#

locによって発生するKeyErrorsは不足しているラベルを指定します。#

以前は、.loc呼び出しでラベルが不足している場合、KeyErrorが発生し、これがサポートされなくなったことを示していました。

現在、エラーメッセージには不足しているラベルのリストも含まれています(最大10項目、表示幅80文字)。GH 34272を参照してください。

すべてのdtypeがStringDtypeに変換できるようになりました。#

以前は、StringDtypeへの宣言または変換は、データがすでにstrまたはnanのような値のみである場合にのみ可能でした(GH 31204)。StringDtypeは、astype(str)またはdtype=strが機能するすべての状況で機能するようになりました。

例えば、以下が機能するようになりました。

In [1]: ser = pd.Series([1, "abc", np.nan], dtype="string")

In [2]: ser
Out[2]: 
0       1
1     abc
2    <NA>
Length: 3, dtype: string

In [3]: ser[0]
Out[3]: '1'

In [4]: pd.Series([1, 2, np.nan], dtype="Int64").astype("string")
Out[4]: 
0       1
1       2
2    <NA>
Length: 3, dtype: string

非単調PeriodIndexの部分文字列スライス#

PeriodIndexが非単調インデックスの部分文字列スライスをサポートし、DatetimeIndexの動作をミラーリングするようになりました(GH 31096)。

例えば

In [5]: dti = pd.date_range("2014-01-01", periods=30, freq="30D")

In [6]: pi = dti.to_period("D")

In [7]: ser_monotonic = pd.Series(np.arange(30), index=pi)

In [8]: shuffler = list(range(0, 30, 2)) + list(range(1, 31, 2))

In [9]: ser = ser_monotonic.iloc[shuffler]

In [10]: ser
Out[10]: 
2014-01-01     0
2014-03-02     2
2014-05-01     4
2014-06-30     6
2014-08-29     8
              ..
2015-09-23    21
2015-11-22    23
2016-01-21    25
2016-03-21    27
2016-05-20    29
Freq: D, Length: 30, dtype: int64
In [11]: ser["2014"]
Out[11]: 
2014-01-01     0
2014-03-02     2
2014-05-01     4
2014-06-30     6
2014-08-29     8
2014-10-28    10
2014-12-27    12
2014-01-31     1
2014-04-01     3
2014-05-31     5
2014-07-30     7
2014-09-28     9
2014-11-27    11
Freq: D, Length: 13, dtype: int64

In [12]: ser.loc["May 2015"]
Out[12]: 
2015-05-26    17
Freq: D, Length: 1, dtype: int64

2つのDataFrameまたは2つのSeriesを比較し、違いを要約する#

2つのDataFrameまたは2つのSeriesを比較するためのDataFrame.compare()Series.compare()を追加しました(GH 30429)。

In [13]: df = pd.DataFrame(
   ....:     {
   ....:         "col1": ["a", "a", "b", "b", "a"],
   ....:         "col2": [1.0, 2.0, 3.0, np.nan, 5.0],
   ....:         "col3": [1.0, 2.0, 3.0, 4.0, 5.0]
   ....:     },
   ....:     columns=["col1", "col2", "col3"],
   ....: )
   ....: 

In [14]: df
Out[14]: 
  col1  col2  col3
0    a   1.0   1.0
1    a   2.0   2.0
2    b   3.0   3.0
3    b   NaN   4.0
4    a   5.0   5.0

[5 rows x 3 columns]
In [15]: df2 = df.copy()

In [16]: df2.loc[0, 'col1'] = 'c'

In [17]: df2.loc[2, 'col3'] = 4.0

In [18]: df2
Out[18]: 
  col1  col2  col3
0    c   1.0   1.0
1    a   2.0   2.0
2    b   3.0   4.0
3    b   NaN   4.0
4    a   5.0   5.0

[5 rows x 3 columns]
In [19]: df.compare(df2)
Out[19]: 
  col1       col3      
  self other self other
0    a     c  NaN   NaN
2  NaN   NaN  3.0   4.0

[2 rows x 4 columns]

詳細については、ユーザーガイドを参照してください。

groupbyキーでNAを許可#

groupbyでは、グループキーにNA値を含めることができるように、DataFrame.groupby()およびSeries.groupby()dropnaキーワードを追加しました。ユーザーは、groupbyキーにNA値を含める場合はdropnaFalseに定義できます。下位互換性を維持するため、dropnaのデフォルトはTrueに設定されています(GH 3729)。

In [20]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]

In [21]: df_dropna = pd.DataFrame(df_list, columns=["a", "b", "c"])

In [22]: df_dropna
Out[22]: 
   a    b  c
0  1  2.0  3
1  1  NaN  4
2  2  1.0  3
3  1  2.0  2

[4 rows x 3 columns]
# Default ``dropna`` is set to True, which will exclude NaNs in keys
In [23]: df_dropna.groupby(by=["b"], dropna=True).sum()
Out[23]: 
     a  c
b        
1.0  2  3
2.0  2  5

[2 rows x 2 columns]

# In order to allow NaN in keys, set ``dropna`` to False
In [24]: df_dropna.groupby(by=["b"], dropna=False).sum()
Out[24]: 
     a  c
b        
1.0  2  3
2.0  2  5
NaN  1  4

[3 rows x 2 columns]

dropna引数のデフォルト設定はTrueであり、これはNAがグループキーに含まれないことを意味します。

キーによるソート#

DataFrameSeriesのソートメソッドにkey引数を追加しました。これにはDataFrame.sort_values()DataFrame.sort_index()Series.sort_values()Series.sort_index()が含まれます。keyは、ソートが実行される前に、ソートに使用される各列に列ごとに適用される任意の呼び出し可能な関数です(GH 27237)。詳細については、キーによるsort_valuesおよびキーによるsort_indexを参照してください。

In [25]: s = pd.Series(['C', 'a', 'B'])

In [26]: s
Out[26]: 
0    C
1    a
2    B
Length: 3, dtype: object
In [27]: s.sort_values()
Out[27]: 
2    B
0    C
1    a
Length: 3, dtype: object

これが大文字を先頭にしてソートされていることに注目してください。Series.str.lower()メソッドを適用すると、以下のようになります。

In [28]: s.sort_values(key=lambda x: x.str.lower())
Out[28]: 
1    a
2    B
0    C
Length: 3, dtype: object

DataFrameに適用する場合、キーはすべての列に列ごとに適用されるか、byが指定されている場合はサブセットに適用されます。例:

In [29]: df = pd.DataFrame({'a': ['C', 'C', 'a', 'a', 'B', 'B'],
   ....:                    'b': [1, 2, 3, 4, 5, 6]})
   ....: 

In [30]: df
Out[30]: 
   a  b
0  C  1
1  C  2
2  a  3
3  a  4
4  B  5
5  B  6

[6 rows x 2 columns]
In [31]: df.sort_values(by=['a'], key=lambda col: col.str.lower())
Out[31]: 
   a  b
2  a  3
3  a  4
4  B  5
5  B  6
0  C  1
1  C  2

[6 rows x 2 columns]

詳細については、DataFrame.sort_values()Series.sort_values()、およびsort_index()の例とドキュメントを参照してください。

Timestampコンストラクタにおけるfold引数のサポート#

Timestamp:は、親のdatetime.datetimeクラスと同様に、PEP 495に従ってキーワードオンリーのfold引数をサポートするようになりました。これは、foldを初期化引数として受け入れることと、他のコンストラクタ引数からfoldを推論することの両方をサポートします(GH 25057GH 31338)。pytzはfoldをサポートしていないため、サポートはdateutilタイムゾーンに限定されます。

例えば

In [32]: ts = pd.Timestamp("2019-10-27 01:30:00+00:00")

In [33]: ts.fold
Out[33]: 0
In [34]: ts = pd.Timestamp(year=2019, month=10, day=27, hour=1, minute=30,
   ....:                   tz="dateutil/Europe/London", fold=1)
   ....: 

In [35]: ts
Out[35]: Timestamp('2019-10-27 01:30:00+0000', tz='dateutil//usr/share/zoneinfo/Europe/London')

foldの操作の詳細については、ユーザーガイドのFoldサブセクションを参照してください。

to_datetimeで異なるタイムゾーンを持つタイムゾーン対応フォーマットを解析#

to_datetime()は、タイムゾーン名(%Z)とUTCオフセット(%z)を含むフォーマットを異なるタイムゾーンから解析し、utc=Trueを設定することでUTCに変換するようになりました。utc=Trueが設定されていない場合、object dtypeのIndexが返されるのに対し、UTCタイムゾーンを持つDatetimeIndexが返されます(GH 32792)。

例えば

In [36]: tz_strs = ["2010-01-01 12:00:00 +0100", "2010-01-01 12:00:00 -0100",
   ....:            "2010-01-01 12:00:00 +0300", "2010-01-01 12:00:00 +0400"]
   ....: 

In [37]: pd.to_datetime(tz_strs, format='%Y-%m-%d %H:%M:%S %z', utc=True)
Out[37]: 
DatetimeIndex(['2010-01-01 11:00:00+00:00', '2010-01-01 13:00:00+00:00',
               '2010-01-01 09:00:00+00:00', '2010-01-01 08:00:00+00:00'],
              dtype='datetime64[ns, UTC]', freq=None)
In[37]: pd.to_datetime(tz_strs, format='%Y-%m-%d %H:%M:%S %z')
Out[37]:
Index([2010-01-01 12:00:00+01:00, 2010-01-01 12:00:00-01:00,
       2010-01-01 12:00:00+03:00, 2010-01-01 12:00:00+04:00],
      dtype='object')

Grouperとresampleがoriginおよびoffset引数をサポートするようになりました#

GrouperDataFrame.resample()は、originoffset引数をサポートするようになりました。これにより、ユーザーはグループ化を調整するタイムスタンプを制御できます。(GH 31809

グループ化のビンは、時系列の開始時点の日の開始に基づいて調整されます。これは、日の倍数である頻度(30Dなど)や、日を分割する頻度(90s1minなど)ではうまく機能します。しかし、この基準を満たさない一部の頻度では一貫性がなくなる可能性があります。この動作を変更するために、origin引数で固定されたタイムスタンプを指定できるようになりました。

2つの引数は非推奨になりました(DataFrame.resample()のドキュメントに詳細情報があります)

  • baseoffsetに置き換えられるべきです。

  • loffsetは、リサンプルされた後にインデックスDataFrameに直接オフセットを追加することで置き換えられるべきです。

originの使用例

In [38]: start, end = '2000-10-01 23:30:00', '2000-10-02 00:30:00'

In [39]: middle = '2000-10-02 00:00:00'

In [40]: rng = pd.date_range(start, end, freq='7min')

In [41]: ts = pd.Series(np.arange(len(rng)) * 3, index=rng)

In [42]: ts
Out[42]: 
2000-10-01 23:30:00     0
2000-10-01 23:37:00     3
2000-10-01 23:44:00     6
2000-10-01 23:51:00     9
2000-10-01 23:58:00    12
2000-10-02 00:05:00    15
2000-10-02 00:12:00    18
2000-10-02 00:19:00    21
2000-10-02 00:26:00    24
Freq: 7min, Length: 9, dtype: int64

デフォルトの動作'start_day'(originは2000-10-01 00:00:00)でリサンプル

In [43]: ts.resample('17min').sum()
Out[43]: 
2000-10-01 23:14:00     0
2000-10-01 23:31:00     9
2000-10-01 23:48:00    21
2000-10-02 00:05:00    54
2000-10-02 00:22:00    24
Freq: 17min, Length: 5, dtype: int64

In [44]: ts.resample('17min', origin='start_day').sum()
Out[44]: 
2000-10-01 23:14:00     0
2000-10-01 23:31:00     9
2000-10-01 23:48:00    21
2000-10-02 00:05:00    54
2000-10-02 00:22:00    24
Freq: 17min, Length: 5, dtype: int64

固定されたoriginを使用してリサンプル

In [45]: ts.resample('17min', origin='epoch').sum()
Out[45]: 
2000-10-01 23:18:00     0
2000-10-01 23:35:00    18
2000-10-01 23:52:00    27
2000-10-02 00:09:00    39
2000-10-02 00:26:00    24
Freq: 17min, Length: 5, dtype: int64

In [46]: ts.resample('17min', origin='2000-01-01').sum()
Out[46]: 
2000-10-01 23:24:00     3
2000-10-01 23:41:00    15
2000-10-01 23:58:00    45
2000-10-02 00:15:00    45
Freq: 17min, Length: 4, dtype: int64

必要に応じて、offset引数(Timedelta)でビンを調整できます。これはデフォルトのoriginに追加されます。

完全な例については、ビン開始を調整するためにoriginまたはoffsetを使用するを参照してください。

ファイルシステム処理にfsspecが使用されるようになりました#

ローカル以外のファイルシステムへの読み書きやHTTP(S)からの読み込みには、オプションの依存関係であるfsspecが操作をディスパッチするために使用されるようになりました(GH 33452)。これにより、すでにサポートされていたS3およびGCSストレージの機能は変更されませんが、Azure DatalakeとBlob、SSH、FTP、dropbox、githubなど、他のいくつかのストレージ実装のサポートも追加されます。ドキュメントと機能については、fsspec docsを参照してください。

fsspecが以前と同じパッケージを取り込むため、S3およびGCSとインターフェースするための既存の機能はこの変更の影響を受けません。

その他の機能強化#

  • matplotlib 3.3.0との互換性(GH 34850

  • IntegerArray.astype()datetime64 dtypeをサポートするようになりました(GH 32538)。

  • IntegerArraysum操作を実装するようになりました(GH 33172)。

  • pandas.errors.InvalidIndexErrorを追加しました(GH 34570)。

  • DataFrame.value_counts()を追加しました(GH 5377)。

  • rolling操作中に前方参照ウィンドウをサポートするためのpandas.api.indexers.FixedForwardWindowIndexer()クラスを追加しました。

  • 非固定オフセットを持つrolling操作をサポートするためにpandas.api.indexers.VariableOffsetWindowIndexer()クラスを追加しました(GH 34994)。

  • describe()に、datetime列の集計方法を制御するdatetime_is_numericキーワードが追加されました(GH 30164GH 34798)。

  • Stylerは、複数のセルが同じスタイルを持つ場合にCSSをより効率的にレンダリングできるようになりました(GH 30876)。

  • highlight_null()subset引数を受け入れるようになりました(GH 31345)。

  • sqlite接続に直接書き込む場合、DataFrame.to_sql()multiメソッドをサポートするようになりました(GH 29921)。

  • pandas.errors.OptionErrorpandas.errorsで公開されるようになりました(GH 27553)。

  • api.extensions.ExtensionArray.argmax()api.extensions.ExtensionArray.argmin()を追加しました(GH 24382)。

  • timedelta_range()は、startstop、およびperiodsが渡されたときに周波数を推論するようになりました(GH 32377)。

  • IntervalIndexの位置スライスがstep > 1のスライスをサポートするようになりました(GH 31658)。

  • Series.strfullmatchメソッドが追加されました。これは、re.fullmatchと同様に、Seriesの各行の文字列全体に対して正規表現をマッチさせます(GH 32806)。

  • DataFrame.sample()が、配列ライクなオブジェクトとBitGeneratorオブジェクトをrandom_stateにシードとして渡すことを許可するようになりました(GH 32503)。

  • Index.union()は、MultiIndexオブジェクトの内部がソート不能な場合、RuntimeWarningを発生させるようになりました。この警告を抑制するにはsort=Falseを渡してください(GH 33015)。

  • ISO 8601カレンダーに従って計算された年、週、日を含むDataFrameを返すSeries.dt.isocalendar()およびDatetimeIndex.isocalendar()を追加しました(GH 33206GH 34392)。

  • DataFrame.to_feather()メソッドが、pyarrow 0.17で追加された追加のキーワード引数(圧縮設定など)をサポートするようになりました(GH 33422)。

  • cut()orderedパラメータをデフォルトordered=Trueで受け入れるようになりました。ordered=Falseでラベルが提供されない場合、エラーが発生します(GH 33141)。

  • DataFrame.to_csv()DataFrame.to_pickle()、およびDataFrame.to_json()が、gzipおよびbz2プロトコルを使用する際に圧縮引数のdictを渡すことをサポートするようになりました。これは、カスタム圧縮レベルを設定するために使用できます。例:df.to_csv(path, compression={'method': 'gzip', 'compresslevel': 1}GH 33196)。

  • melt()ignore_index(デフォルトTrue)引数が追加されました。これをFalseに設定すると、メソッドがインデックスを削除するのを防ぎます(GH 17440)。

  • Series.update()が、DataFrame.update()の動作をミラーリングし、dictlistなど、Seriesに強制できるオブジェクトを受け入れるようになりました(GH 33215)。

  • DataFrameGroupBy.transform()DataFrameGroupBy.aggregate()engineengine_kwargs引数が追加され、Numbaで関数を実行できるようになりました(GH 32854GH 33388)。

  • Resampler.interpolate()がSciPy補間メソッドscipy.interpolate.CubicSplineをメソッドcubicsplineとしてサポートするようになりました(GH 33670)。

  • DataFrameGroupBySeriesGroupByが、グループ内のランダムサンプリングを行うためのsampleメソッドを実装するようになりました(GH 31775)。

  • DataFrame.to_numpy()が、出力配列のNAセンチネルを制御するためのna_valueキーワードをサポートするようになりました(GH 33820)。

  • Series.equals()と同様に、拡張配列インターフェースにapi.extension.ExtensionArray.equalsを追加しました(GH 27081)。

  • read_stata()StataReaderにおけるサポートされるdtaの最小バージョンが105に増加しました(GH 26667)。

  • to_stata()compressionキーワード引数を使用した圧縮をサポートします。圧縮は推論することも、メソッドと圧縮ライブラリに渡される追加引数の両方を含む文字列または辞書を使用して明示的に設定することもできます。圧縮は、低レベルのStataファイルライターであるStataWriterStataWriter117、およびStataWriterUTF8にも追加されました(GH 26599)。

  • HDFStore.put()track_timesパラメータを受け入れるようになりました。このパラメータはPyTablescreate_tableメソッドに渡されます(GH 32682)。

  • Series.plot()DataFrame.plot()が、x軸とy軸にラベルを表示するためのxlabelylabelパラメータを受け入れるようになりました(GH 9093)。

  • RollingExpandingがイテラブルになりました(GH 11704)。

  • option_contextcontextlib.ContextDecoratorにし、関数全体にデコレータとして使用できるようにしました(GH 34253)。

  • DataFrame.to_csv()Series.to_csv()errors引数を受け入れるようになりました(GH 22610)。

  • DataFrameGroupBy.groupby.transform()funcpadbackfillcumcountにできるようになりました(GH 31269)。

  • read_json()nrowsパラメータを受け入れるようになりました。(GH 33916)。

  • DataFrame.hist()Series.hist()core.groupby.DataFrameGroupBy.hist()、およびcore.groupby.SeriesGroupBy.hist()legend引数が追加されました。ヒストグラムに凡例を表示するにはTrueに設定します。(GH 6279

  • concat()append()が拡張dtypeを保持するようになりました。たとえば、nullableな整数列とnumpy整数列を結合しても、object dtypeではなく整数dtypeが保持されます(GH 33607GH 34339GH 34095)。

  • read_gbq()がプログレスバーを無効にできるようになりました(GH 33360)。

  • read_gbq()pandas-gbqmax_resultsキーワード引数をサポートするようになりました(GH 34639)。

  • DataFrame.cov()Series.cov()が、対応するnumpyメソッドと同様に自由度デルタをサポートする新しいパラメータddofをサポートするようになりました(GH 34611)。

  • DataFrame.to_html()およびDataFrame.to_string()col_spaceパラメータが、特定の列の幅のみを変更するためのリストまたはdictを受け入れるようになりました(GH 28917)。

  • DataFrame.to_excel()がOpenOfficeスプレッドシート(.ods)ファイルも書き込めるようになりました(GH 27222)。

  • explode()が、pd.concat()DataFrame.sort_values()と同様に、インデックスをリセットするためのignore_indexを受け入れるようになりました(GH 34932)。

  • DataFrame.to_markdown()Series.to_markdown()が、tabulateのshowindexのエイリアスとしてindex引数を受け入れるようになりました(GH 32667)。

  • read_csv()が、「0」、「0.0」、「1」、「1.0」のような文字列値をnullable Boolean dtypeに変換できるようになった(GH 34859)。

  • ExponentialMovingWindowtimes引数をサポートするようになりました。これにより、times内のタイムスタンプで間隔が空けられた観測値でmeanを計算できます(GH 34839)。

  • DataFrame.agg()Series.agg()が、出力列/インデックスの名前を変更するための名前付き集約を受け入れるようになりました。(GH 26513

  • compute.use_numbaが、利用可能な場合にnumbaエンジンを利用する設定オプションとして存在するようになりました(GH 33966GH 35374)。

  • Series.plot()が非対称誤差棒をサポートするようになりました。以前は、Series.plot()yerrおよび/またはxerrに誤差値を含む「2xN」配列を受け取ると、左/下側の値(最初の行)がミラーリングされ、右/上側の値(2番目の行)は無視されていました。現在、最初の行は左/下側の誤差値を表し、2番目の行は右/上側の誤差値を表します。(GH 9536

注目すべきバグ修正#

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

MultiIndex.get_indexermethod引数を正しく解釈します。#

これにより、method='backfill'またはmethod='pad'を使用したMultiIndex.get_indexer()の動作が、pandas 0.23.0以前の動作に復元されます。特に、MultiIndexはタプルのリストとして扱われ、これらのタプルのリストの順序に関してパディングまたはバックフィルが行われます(GH 29896)。

この例として、次が与えられた場合

In [47]: df = pd.DataFrame({
   ....:     'a': [0, 0, 0, 0],
   ....:     'b': [0, 2, 3, 4],
   ....:     'c': ['A', 'B', 'C', 'D'],
   ....: }).set_index(['a', 'b'])
   ....: 

In [48]: mi_2 = pd.MultiIndex.from_product([[0], [-1, 0, 1, 3, 4, 5]])

dfmi_2でリインデックスし、method='backfill'を使用した場合の違いを以下に示します。

pandas >= 0.23, < 1.1.0:

In [1]: df.reindex(mi_2, method='backfill')
Out[1]:
      c
0 -1  A
   0  A
   1  D
   3  A
   4  A
   5  C

pandas <0.23, >= 1.1.0

In [49]: df.reindex(mi_2, method='backfill')
Out[49]: 
        c
0 -1    A
   0    A
   1    B
   3    C
   4    D
   5  NaN

[6 rows x 1 columns]

そして、dfmi_2でリインデックスし、method='pad'を使用した場合の違いを以下に示します。

pandas >= 0.23, < 1.1.0

In [1]: df.reindex(mi_2, method='pad')
Out[1]:
        c
0 -1  NaN
   0  NaN
   1    D
   3  NaN
   4    A
   5    C

pandas < 0.23, >= 1.1.0

In [50]: df.reindex(mi_2, method='pad')
Out[50]: 
        c
0 -1  NaN
   0    A
   1    A
   3    C
   4    D
   5    D

[6 rows x 1 columns]

ラベルベースの検索の失敗は常にKeyErrorを発生させます#

ラベルルックアップseries[key]series.loc[key]、およびframe.loc[key]は、以前はキーの型とIndexの型に応じてKeyErrorまたはTypeErrorのいずれかを発生させていました。これらは一貫してKeyErrorを発生させるようになりました(GH 31867)。

In [51]: ser1 = pd.Series(range(3), index=[0, 1, 2])

In [52]: ser2 = pd.Series(range(3), index=pd.date_range("2020-02-01", periods=3))

以前の動作:

In [3]: ser1[1.5]
...
TypeError: cannot do label indexing on Int64Index with these indexers [1.5] of type float

In [4] ser1["foo"]
...
KeyError: 'foo'

In [5]: ser1.loc[1.5]
...
TypeError: cannot do label indexing on Int64Index with these indexers [1.5] of type float

In [6]: ser1.loc["foo"]
...
KeyError: 'foo'

In [7]: ser2.loc[1]
...
TypeError: cannot do label indexing on DatetimeIndex with these indexers [1] of type int

In [8]: ser2.loc[pd.Timestamp(0)]
...
KeyError: Timestamp('1970-01-01 00:00:00')

新しい動作:

In [3]: ser1[1.5]
...
KeyError: 1.5

In [4] ser1["foo"]
...
KeyError: 'foo'

In [5]: ser1.loc[1.5]
...
KeyError: 1.5

In [6]: ser1.loc["foo"]
...
KeyError: 'foo'

In [7]: ser2.loc[1]
...
KeyError: 1

In [8]: ser2.loc[pd.Timestamp(0)]
...
KeyError: Timestamp('1970-01-01 00:00:00')

同様に、DataFrame.at()Series.at()は、互換性のないキーが渡された場合はValueErrorの代わりにTypeErrorを発生させ、不足しているキーが渡された場合はKeyErrorを発生させ、.loc[]の動作と一致します(GH 31722)。

MultiIndexでの整数検索の失敗はKeyErrorを発生させます。#

整数型の最初のレベルを持つMultiIndexでの整数によるインデックス付けは、1つ以上の整数キーがインデックスの最初のレベルに存在しない場合、誤ってKeyErrorを発生させませんでした(GH 33539)。

In [53]: idx = pd.Index(range(4))

In [54]: dti = pd.date_range("2000-01-03", periods=3)

In [55]: mi = pd.MultiIndex.from_product([idx, dti])

In [56]: ser = pd.Series(range(len(mi)), index=mi)

以前の動作:

In [5]: ser[[5]]
Out[5]: Series([], dtype: int64)

新しい動作:

In [5]: ser[[5]]
...
KeyError: '[5] not in index'

DataFrame.merge()は右側のフレームの行順序を保持します#

DataFrame.merge()は、右マージを実行する際に右側のフレームの行順序を保持するようになりました(GH 27453)。

In [57]: left_df = pd.DataFrame({'animal': ['dog', 'pig'],
   ....:                        'max_speed': [40, 11]})
   ....: 

In [58]: right_df = pd.DataFrame({'animal': ['quetzal', 'pig'],
   ....:                         'max_speed': [80, 11]})
   ....: 

In [59]: left_df
Out[59]: 
  animal  max_speed
0    dog         40
1    pig         11

[2 rows x 2 columns]

In [60]: right_df
Out[60]: 
    animal  max_speed
0  quetzal         80
1      pig         11

[2 rows x 2 columns]

以前の動作:

>>> left_df.merge(right_df, on=['animal', 'max_speed'], how="right")
    animal  max_speed
0      pig         11
1  quetzal         80

新しい動作:

In [61]: left_df.merge(right_df, on=['animal', 'max_speed'], how="right")
Out[61]: 
    animal  max_speed
0  quetzal         80
1      pig         11

[2 rows x 2 columns]

一部の列が存在しない場合のDataFrameの複数列への割り当て#

以前は、DataFrameの複数列への割り当てにおいて、一部の列が存在しない場合、値は最後の列に割り当てられていました。現在では、新しい列が正しい値で構築されます。(GH 13658

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

In [63]: df
Out[63]: 
   a  b
0  0  3
1  1  4
2  2  5

[3 rows x 2 columns]

以前の動作:

In [3]: df[['a', 'c']] = 1
In [4]: df
Out[4]:
   a  b
0  1  1
1  1  1
2  1  1

新しい動作:

In [64]: df[['a', 'c']] = 1

In [65]: df
Out[65]: 
   a  b  c
0  1  3  1
1  1  4  1
2  1  5  1

[3 rows x 3 columns]

groupby集約間の一貫性#

as_index=TrueDataFrame.groupby()を使用し、集約nuniqueを実行すると、結果の列にグループ化列が含まれていました。現在は、他の集約と同様に、グループ化列はインデックスにのみ表示されます。(GH 32579

In [66]: df = pd.DataFrame({"a": ["x", "x", "y", "y"], "b": [1, 1, 2, 3]})

In [67]: df
Out[67]: 
   a  b
0  x  1
1  x  1
2  y  2
3  y  3

[4 rows x 2 columns]

以前の動作:

In [3]: df.groupby("a", as_index=True).nunique()
Out[4]:
   a  b
a
x  1  1
y  1  2

新しい動作:

In [68]: df.groupby("a", as_index=True).nunique()
Out[68]: 
   b
a   
x  1
y  2

[2 rows x 1 columns]

as_index=FalseDataFrame.groupby()を使用し、関数idxmaxidxminmadnuniquesemskew、またはstdを使用すると、グループ化列が変更されていました。現在は、他の集約と同様に、グループ化列は変更されません。(GH 21090GH 10355

以前の動作:

In [3]: df.groupby("a", as_index=False).nunique()
Out[4]:
   a  b
0  1  1
1  1  2

新しい動作:

In [69]: df.groupby("a", as_index=False).nunique()
Out[69]: 
   a  b
0  x  1
1  y  2

[2 rows x 2 columns]

以前は、DataFrameGroupBy.size()メソッドはas_index=Falseを無視していました。現在では、グループ化列が列として返され、結果はSeriesではなくDataFrameとなります。(GH 32599

以前の動作:

In [3]: df.groupby("a", as_index=False).size()
Out[4]:
a
x    2
y    2
dtype: int64

新しい動作:

In [70]: df.groupby("a", as_index=False).size()
Out[70]: 
   a  size
0  x     2
1  y     2

[2 rows x 2 columns]

列を再ラベル付けする際に、as_index=FalseDataFrameGroupby.agg()が結果を失いました#

以前は、DataFrameGroupby.agg()は、as_indexオプションがFalseに設定され、結果列が再ラベル付けされた場合に結果列を失っていました。この場合、結果値は以前のインデックスに置き換えられました(GH 32240)。

In [71]: df = pd.DataFrame({"key": ["x", "y", "z", "x", "y", "z"],
   ....:                    "val": [1.0, 0.8, 2.0, 3.0, 3.6, 0.75]})
   ....: 

In [72]: df
Out[72]: 
  key   val
0   x  1.00
1   y  0.80
2   z  2.00
3   x  3.00
4   y  3.60
5   z  0.75

[6 rows x 2 columns]

以前の動作:

In [2]: grouped = df.groupby("key", as_index=False)
In [3]: result = grouped.agg(min_val=pd.NamedAgg(column="val", aggfunc="min"))
In [4]: result
Out[4]:
     min_val
 0   x
 1   y
 2   z

新しい動作:

In [73]: grouped = df.groupby("key", as_index=False)

In [74]: result = grouped.agg(min_val=pd.NamedAgg(column="val", aggfunc="min"))

In [75]: result
Out[75]: 
  key  min_val
0   x     1.00
1   y     0.80
2   z     0.75

[3 rows x 2 columns]

DataFrame上のapplyとapplymapは最初の行/列のみを一度評価します#

In [76]: df = pd.DataFrame({'a': [1, 2], 'b': [3, 6]})

In [77]: def func(row):
   ....:     print(row)
   ....:     return row
   ....: 

以前の動作:

In [4]: df.apply(func, axis=1)
a    1
b    3
Name: 0, dtype: int64
a    1
b    3
Name: 0, dtype: int64
a    2
b    6
Name: 1, dtype: int64
Out[4]:
   a  b
0  1  3
1  2  6

新しい動作:

In [78]: df.apply(func, axis=1)
a    1
b    3
Name: 0, Length: 2, dtype: int64
a    2
b    6
Name: 1, Length: 2, dtype: int64
Out[78]: 
   a  b
0  1  3
1  2  6

[2 rows x 2 columns]

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

check_freq引数をtesting.assert_frame_equalおよびtesting.assert_series_equalに追加しました#

check_freq引数はpandas 1.1.0でtesting.assert_frame_equal()testing.assert_series_equal()に追加され、デフォルトはTrueです。testing.assert_frame_equal()testing.assert_series_equal()は、インデックスの周波数が同じでない場合、AssertionErrorを発生させるようになりました。pandas 1.1.0以前は、インデックスの周波数はチェックされていませんでした。

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

依存関係の最小サポートバージョンが更新されました(GH 33718GH 29766GH 29723、pytables >= 3.4.3)。インストールされている場合、以下の要件を満たす必要があります。

パッケージ

最小バージョン

必須

変更済み

numpy

1.15.4

X

X

pytz

2015.4

X

python-dateutil

2.7.3

X

X

bottleneck

1.2.1

numexpr

2.6.2

pytest (開発)

4.0.2

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

パッケージ

最小バージョン

変更済み

beautifulsoup4

4.6.0

fastparquet

0.3.2

fsspec

0.7.4

gcsfs

0.6.0

X

lxml

3.8.0

matplotlib

2.2.2

numba

0.46.0

openpyxl

2.5.7

pyarrow

0.13.0

pymysql

0.7.1

pytables

3.4.3

X

s3fs

0.4.0

X

scipy

1.2.0

X

sqlalchemy

1.1.4

xarray

0.8.2

xlrd

1.1.0

xlsxwriter

0.9.8

xlwt

1.2.0

pandas-gbq

1.2.0

X

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

開発変更#

  • Cythonの最小バージョンは、最新のバグ修正バージョン(0.29.16)になりました(GH 33334)。

非推奨#

  • スライスを含む単一項目リスト(例: ser[[slice(0, 4)]])を使用したSeriesのルックアップは非推奨となり、将来のバージョンでエラーを発生させるようになります。リストをタプルに変換するか、スライスを直接渡してください(GH 31333)。

  • numeric_only=Noneを持つDataFrame.mean()DataFrame.median()は、将来のバージョンでdatetime64およびdatetime64tz列を含むようになります(GH 29941)。

  • 位置スライスを使用した.locによる値の設定は非推奨となり、将来のバージョンでエラーを発生させるようになります。代わりにラベルを使用した.locまたは位置を使用した.ilocを使用してください(GH 31840)。

  • DataFrame.to_dict()は、orientの短い名前を受け入れることが非推奨となり、将来のバージョンでエラーを発生させるようになります(GH 32515)。

  • Categorical.to_dense()は非推奨となり、将来のバージョンで削除されます。代わりにnp.asarray(cat)を使用してください(GH 32639)。

  • SingleBlockManagerコンストラクタのfastpathキーワードは非推奨となり、将来のバージョンで削除されます(GH 33092)。

  • pandas.merge()suffixessetとして提供することは非推奨です。代わりにタプルを提供してください(GH 33740GH 34741)。

  • [:, None]のような多次元インデクサでSeriesをインデックス付けしてndarrayを返す場合、FutureWarningが発生するようになりました。代わりに、インデックス付けする前にNumPy配列に変換してください(GH 27837)。

  • Index.is_mixed()は非推奨となり、将来のバージョンで削除されます。代わりにindex.inferred_typeを直接確認してください(GH 32922)。

  • read_html()に最初の引数以外の引数を位置引数として渡すことは非推奨です。他のすべての引数はキーワード引数として与えるべきです(GH 27573)。

  • read_json()path_or_buf(最初の引数)以外の引数を位置引数として渡すことは非推奨です。他のすべての引数はキーワード引数として与えるべきです(GH 27573)。

  • read_excel()に最初の2つの引数以外の引数を位置引数として渡すことは非推奨です。他のすべての引数はキーワード引数として与えるべきです(GH 27573)。

  • pandas.api.types.is_categorical()は非推奨となり、将来のバージョンで削除されます。代わりにpandas.api.types.is_categorical_dtype()を使用してください(GH 33385)。

  • Index.get_value()は非推奨となり、将来のバージョンで削除されます(GH 19728)。

  • Series.dt.week()Series.dt.weekofyear()は非推奨となり、将来のバージョンで削除されます。代わりにSeries.dt.isocalendar().week()を使用してください(GH 33595)。

  • DatetimeIndex.week()DatetimeIndex.weekofyearは非推奨となり、将来のバージョンで削除されます。代わりにDatetimeIndex.isocalendar().weekを使用してください(GH 33595)。

  • DatetimeArray.week()DatetimeArray.weekofyearは非推奨となり、将来のバージョンで削除されます。代わりにDatetimeArray.isocalendar().weekを使用してください(GH 33595)。

  • DateOffset.__call__()は非推奨となり、将来のバージョンで削除されます。代わりにoffset + otherを使用してください(GH 34171)。

  • apply_index()は非推奨となり、将来のバージョンで削除されます。代わりにoffset + otherを使用してください(GH 34580)。

  • DataFrame.tshift()Series.tshift()は非推奨となり、将来のバージョンで削除されます。代わりにDataFrame.shift()Series.shift()を使用してください(GH 11631)。

  • Indexオブジェクトを浮動小数点キーでインデックス付けすることは非推奨となり、将来的にIndexErrorを発生させるようになります。代わりに手動で整数キーに変換することができます(GH 34191)。

  • groupby()squeezeキーワードは非推奨となり、将来のバージョンで削除されます(GH 32380)。

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

  • DatetimeIndex.to_perioddelta()は非推奨となり、将来のバージョンで削除されます。代わりにindex - index.to_period(freq).to_timestamp()を使用してください(GH 34853)。

  • DataFrame.melt()が既存のvalue_nameを受け入れることは非推奨となり、将来のバージョンで削除されます(GH 34731)。

  • DataFrame.expanding()関数のcenterキーワードは非推奨となり、将来のバージョンで削除されます(GH 20647)。

パフォーマンス改善#

  • Timedeltaコンストラクタの性能改善(GH 30543

  • Timestampコンストラクタの性能改善(GH 30543

  • DataFrameSeriesの間でのaxis=0でのflex算術演算のパフォーマンス改善(GH 31296

  • DataFrameSeriesの間のaxis=1での算術演算のパフォーマンス改善(GH 33600

  • 内部インデックスメソッド_shallow_copy()は、キャッシュされた属性を新しいインデックスにコピーするようになり、新しいインデックスでこれらを再度作成することを回避します。これにより、既存のインデックスのコピーを作成する多くの操作が高速化されます(GH 28584GH 32640GH 32669)。

  • DataFrame.sparse.from_spmatrix()コンストラクタを使用してscipy.sparse行列から疎な値を持つDataFrameを作成する際の著しいパフォーマンス改善(GH 32821GH 32825GH 32826GH 32856GH 32858)。

  • groupbyメソッドGroupby.first()およびGroupby.last()のパフォーマンス改善(GH 34178)。

  • nullable(整数およびブール)dtypeのfactorize()におけるパフォーマンス改善(GH 33064)。

  • Categoricalオブジェクトの構築におけるパフォーマンス改善(GH 33921

  • pandas.qcut()pandas.cut()におけるパフォーマンスリグレッションを修正しました(GH 33921)。

  • nullable(整数およびブール)dtypeの集約(sumprodminmax)におけるパフォーマンス改善(GH 30982GH 33261GH 33442)。

  • 2つのDataFrameオブジェクト間の算術演算における性能改善(GH 32779)。

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

  • MultiIndexにおける算術演算(subaddmuldiv)の性能改善(GH 34297)。

  • bool_indexerlistの場合のDataFrame[bool_indexer]のパフォーマンス改善(GH 33924)。

  • io.formats.style.Styler.apply()io.formats.style.Styler.applymap()io.formats.style.Styler.bar()など、さまざまな方法で追加されたスタイルを持つio.formats.style.Styler.render()の著しいパフォーマンス改善(GH 19917)。

バグ修正#

カテゴリカル#

  • Categorical.take()に無効なfill_valueを渡した場合、TypeErrorではなくValueErrorが発生するようになりました(GH 33660)。

  • Categorical(整数カテゴリと欠損値を含む)とfloat dtype列をconcat()append()のような操作で結合すると、object dtype列ではなくfloat列が生成されるようになりました(GH 33607

  • merge()が非ユニークなカテゴリカルインデックスで結合できなかったバグを修正しました(GH 28189

  • Indexコンストラクタにカテゴリカルデータとdtype=objectを渡すと、誤ってobject-dtype IndexではなくCategoricalIndexが返されるバグを修正しました(GH 32167

  • Categorical比較演算子__ne__が、いずれかの要素が欠落している場合に誤ってFalseと評価されるバグを修正しました(GH 32276

  • Categorical.fillna()Categorical型のother引数を受け入れるようになりました(GH 32420

  • Categoricalのreprがintstrを区別していなかったバグを修正しました(GH 33676

日付時刻ライク#

  • int64以外の整数dtypeをnp.array(period_index, dtype=...)に渡すと、誤ってint64を使用する代わりにTypeErrorが発生するようになりました(GH 32255

  • Series.to_timestamp()は、軸がPeriodIndexでない場合にTypeErrorを発生させるようになりました。以前はAttributeErrorが発生していました(GH 33327

  • Series.to_period()は、軸がDatetimeIndexでない場合にTypeErrorを発生させるようになりました。以前はAttributeErrorが発生していました(GH 33327

  • Periodfreq引数にタプルを受け入れなくなりました(GH 34658

  • Timestampで、あいまいなエポックタイムからTimestampを構築し、再度コンストラクタを呼び出すとTimestamp.value()プロパティが変更されるバグを修正しました(GH 24329

  • DatetimeArray.searchsorted()TimedeltaArray.searchsorted()PeriodArray.searchsorted()がpandas以外のスカラを認識せず、誤ってTypeErrorの代わりにValueErrorを発生させていたバグを修正しました(GH 30950

  • Timestampで、dateutilタイムゾーンを持つTimestampを冬時間から夏時間への夏時間切り替えの128ナノ秒未満前に構築すると、存在しない時刻になるバグを修正しました(GH 31043

  • Period.to_timestamp()Period.start_time()で、マイクロ秒の頻度を持つ場合に正しい時刻より1ナノ秒早いタイムスタンプを返すバグを修正しました(GH 31475

  • Timestampで、年、月、または日が欠落している場合に紛らわしいエラーメッセージを発生させていたバグを修正しました(GH 31200

  • DatetimeIndexコンストラクタがbool-dtype入力を受け入れていたバグを修正しました(GH 32668

  • DatetimeIndex.searchsorted()が引数としてlistまたはSeriesを受け入れていなかったバグを修正しました(GH 32762

  • PeriodIndex()が文字列のSeriesが渡された場合にエラーを発生させていたバグを修正しました(GH 26109

  • Timestampの演算で、timedelta64 dtypeのnp.ndarrayを追加または減算する際にバグがありました(GH 33296

  • DatetimeIndex.to_period()が引数なしで呼び出されたときに頻度を推測しなかったバグを修正しました(GH 33358

  • DatetimeIndex.tz_localize()が、元のfreqが無効になった場合でもfreqを誤って保持していたバグを修正しました(GH 30511

  • DatetimeIndex.intersection()が、場合によってはfreqとタイムゾーンを失っていたバグを修正しました(GH 33604

  • DatetimeIndex.get_indexer()が、混在したdatetimeのようなターゲットに対して誤った出力を返していたバグを修正しました(GH 33741

  • DatetimeIndexの加算と減算で、一部のDateOffsetオブジェクト型の場合に、無効なfreq属性を誤って保持していたバグを修正しました(GH 33779

  • DatetimeIndexで、インデックスのfreq属性を設定すると、同じデータを参照する別のインデックスのfreq属性がサイレントに変更される可能性があったバグを修正しました(GH 33552

  • DataFrame.min()DataFrame.max()が、空のpd.to_datetime()で初期化されたオブジェクトに対して呼び出されたときに、Series.min()およびSeries.max()と一貫した結果を返さなかったバグを修正しました

  • DatetimeIndex.intersection()およびTimedeltaIndex.intersection()で、結果に正しいname属性がなかったバグを修正しました(GH 33904

  • DatetimeArray.__setitem__()TimedeltaArray.__setitem__()PeriodArray.__setitem__()が、int64 dtypeの値をサイレントにキャストすることを誤って許可していたバグを修正しました(GH 33717

  • PeriodからTimedeltaIndexを減算する際に、成功すべき場合に誤ってTypeErrorを発生させ、TypeErrorを発生させるべき場合にIncompatibleFrequencyを発生させていたバグを修正しました(GH 33883

  • 読み取り専用NumPy配列から非ナノ秒分解能でSeriesまたはIndexを構築する際に、タイムスタンプの範囲内であればdatetime64[ns] dtypeに強制変換される代わりにobject dtypeに変換されていたバグを修正しました(GH 34843)。

  • Perioddate_range()period_range()pd.tseries.frequencies.to_offset()freqキーワードはタプルを許可しなくなりました。代わりに文字列として渡してください(GH 34703

  • DataFrame.append()で、スカラのtz対応Timestampを含むSeriesを空のDataFrameに追加すると、datetime64[ns, tz] dtypeではなくobject列になっていたバグを修正しました(GH 35038

  • OutOfBoundsDatetimeは、タイムスタンプが実装範囲外である場合に、より分かりやすいエラーメッセージを発行するようになりました。(GH 32967

  • AbstractHolidayCalendar.holidays()で、ルールが定義されていない場合にバグがありました(GH 31415

  • Tickの比較で、timedeltaのようなオブジェクトと比較する際にTypeErrorを発生させていたバグを修正しました(GH 34088

  • Tickの乗算で、floatで乗算する際にTypeErrorを発生させていたバグを修正しました(GH 34486

Timedelta#

  • 高精度整数でTimedeltaを構築する際に、Timedeltaコンポーネントが丸められていたバグを修正しました(GH 31354

  • np.nanまたはNoneTimedeltaで除算する際に、誤ってNaTを返していたバグを修正しました(GH 31869

  • Timedeltaが、マイクロ秒の識別子としてµsを理解するようになりました(GH 32899

  • Timedeltaの文字列表現に、ナノ秒がゼロでない場合にナノ秒が含まれるようになりました(GH 9309

  • Timedeltaオブジェクトとtimedelta64 dtypeのnp.ndarrayを比較する際に、すべてのエントリを不等と誤って見ていたバグを修正しました(GH 33441

  • timedelta_range()がエッジケースで余分な点を生成していたバグを修正しました(GH 30353, GH 33498

  • DataFrame.resample()がエッジケースで余分な点を生成していたバグを修正しました(GH 30353, GH 13022, GH 33498

  • DataFrame.resample()がtimedeltaを扱う際にloffset引数を無視していたバグを修正しました(GH 7687, GH 33498

  • Timedeltapandas.to_timedelta()が文字列入力のunit引数を無視していたバグを修正しました(GH 12136

タイムゾーン#

  • to_datetime()infer_datetime_format=Trueの場合にタイムゾーン名(例: UTC)が正しく解析されないバグを修正しました(GH 33133

数値#

  • DataFrame.floordiv()axis=0の場合にゼロ除算をSeries.floordiv()のように扱わなかったバグを修正しました(GH 31271

  • to_numeric()で文字列引数"uint64"errors="coerce"がサイレントに失敗していたバグを修正しました(GH 32394

  • to_numeric()downcast="unsigned"が空のデータで失敗していたバグを修正しました(GH 32493

  • DataFrame.mean()numeric_only=Falsedatetime64 dtypeまたはPeriodDtype列の場合に誤ってTypeErrorを発生させていたバグを修正しました(GH 32426

  • DataFrame.count()level="foo"と、NaNを含むインデックスレベル"foo"の場合にセグメンテーション違反が発生していたバグを修正しました(GH 21824

  • DataFrame.diff()axis=1の場合に、混在したdtypeで誤った結果を返していたバグを修正しました(GH 32995

  • DataFrame.corr()およびDataFrame.cov()で、pandas.NAを含むnull許容整数列を処理する際にエラーを発生させていたバグを修正しました(GH 33803

  • 重複するラベルを持つ非重複列を持つDataFrameオブジェクト間の算術演算で、無限ループを引き起こすバグを修正しました(GH 35194

  • object-dtypeオブジェクトとdatetime64 dtypeオブジェクト間のDataFrameおよびSeriesの加算と減算のバグを修正しました(GH 33824

  • Index.difference()Float64Indexとobject Indexを比較する際に誤った結果を返していたバグを修正しました(GH 35217

  • DataFrameの縮約(例: df.min(), df.max())でExtensionArray dtypesを持つ場合にバグがありました(GH 34520, GH 32651

  • Series.interpolate()DataFrame.interpolate()は、limit_direction'forward'または'both'method'backfill'または'bfill'の場合、またはlimit_direction'backward'または'both'method'pad'または'ffill'の場合にValueErrorを発生させるようになりました(GH 34746

変換#

  • ビッグエンディアンdatetime64 dtypeのNumPy配列からのSeries構築におけるバグを修正しました(GH 29684

  • 大きなナノ秒キーワード値を持つTimedelta構築におけるバグを修正しました(GH 32402

  • DataFrame構築で、エラーを発生させる代わりにセットが複製されるバグを修正しました(GH 32582

  • DataFrameコンストラクタは、DataFrameオブジェクトのリストを受け入れなくなりました。NumPyの変更により、DataFrameオブジェクトは一貫して2Dオブジェクトとして扱われるため、DataFrameオブジェクトのリストは3Dと見なされ、DataFrameコンストラクタには受け入れられなくなりました(GH 32289)。

  • DataFrameで、リストを使用してフレームを初期化し、MultiIndexにネストされたリストでcolumnsを割り当てる際のバグを修正しました(GH 32173

  • 新しいインデックスを作成する際のリストの無効な構築に対するエラーメッセージを改善しました(GH 35190

文字列#

  • astype()メソッドで「string」dtypeデータをnull許容整数dtypeに変換する際のバグを修正しました(GH 32450)。

  • StringArrayまたはStringDtype型のSeriesminまたはmaxを取るとエラーが発生する問題を修正しました。(GH 31746

  • Series.str.cat()が、otherがIndex型であった場合にNaN出力を返していたバグを修正しました(GH 33425

  • pandas.api.dtypes.is_string_dtype()は、カテゴリカルシリーズを文字列として誤って識別しなくなりました。

Interval#

  • IntervalArrayで、値を設定する際に基になるデータを変更することを誤って許可していたバグを修正しました(GH 32782

インデックス付け#

  • DataFrame.xs()は、levelキーワードが指定され、軸がMultiIndexでない場合にTypeErrorを発生させるようになりました。以前はAttributeErrorが発生していました(GH 33610

  • DatetimeIndexのスライスで、部分的なタイムスタンプが年の終わり、四半期、または月の終わりの高分解能インデックスを削除していたバグを修正しました(GH 31064

  • PeriodIndex.get_loc()が高分解能文字列をPeriodIndex.get_value()と異なる扱いをしていたバグを修正しました(GH 31172

  • Series.at()DataFrame.at()が、Float64Indexで整数を検索する際に.locの動作と一致しなかったバグを修正しました(GH 31329

  • PeriodIndex.is_monotonic()が、先頭にNaTエントリが含まれている場合に誤ってTrueを返していたバグを修正しました(GH 31437

  • DatetimeIndex.get_loc()が、ユーザーが渡したキーではなく変換された整数キーでKeyErrorを発生させていたバグを修正しました(GH 31425

  • Series.xs()が、一部のobject-dtypeケースでdatetime64ではなくTimestampを誤って返していたバグを修正しました(GH 31630

  • DataFrame.iat()が、一部のobject-dtypeケースでdatetimeではなくTimestampを誤って返していたバグを修正しました(GH 32809

  • DataFrame.at()で、列またはインデックスが非ユニークな場合にバグがありました(GH 33041

  • Series.loc()およびDataFrame.loc()で、すべて整数ではないobject-dtype Indexに対して整数キーでインデックス付けする際のバグを修正しました(GH 31905

  • 重複する列を持つDataFrameDataFrame.iloc.__setitem__()が、一致するすべての列の値を誤って設定していたバグを修正しました(GH 15686, GH 22036

  • DataFrame.loc()Series.loc()で、DatetimeIndexTimedeltaIndex、またはPeriodIndexを使用する際に、一致しないdatetimeのようなdtypesのルックアップを誤って許可していたバグを修正しました(GH 32650

  • Series.__getitem__()が、非標準のスカラー(例: np.dtype)でインデックス付けする際にバグがありました(GH 32684

  • Indexコンストラクタで、NumPyスカラーに対して役に立たないエラーメッセージを発生させていたバグを修正しました(GH 33017

  • DataFrame.lookup()が、frame.indexまたはframe.columnsがユニークでない場合に誤ってAttributeErrorを発生させていたバグを修正しました。これは、役立つエラーメッセージとともにValueErrorを発生させるようになりました(GH 33041

  • Intervalで、Timestamp間隔からTimedeltaを追加または減算できなかったバグを修正しました(GH 32023

  • DataFrame.copy()が、コピー後に_item_cacheを無効にしなかったために、コピー後の値の更新が反映されないバグを修正しました(GH 31784

  • DataFrame.loc()Series.loc()datetime64[ns, tz]値が指定されたときにエラーをスローしていた回帰バグを修正しました(GH 32395

  • Series.__getitem__()で、整数キーと先頭に整数レベルを持つMultiIndexを使用する際に、キーが最初のレベルに存在しない場合にKeyErrorを発生させなかったバグを修正しました(GH 33355

  • DataFrame.iloc()で、ExtensionDtypeを持つ単一列のDataFrameをスライスする際に(例: df.iloc[:, :1])、無効な結果を返していたバグを修正しました(GH 32957

  • DatetimeIndex.insert()TimedeltaIndex.insert()で、空のSeriesに要素を設定する際にインデックスのfreqが失われるバグを修正しました(GH 33573

  • Series.__setitem__()で、IntervalIndexと整数リストのようなキーを使用する際のバグを修正しました(GH 33473

  • Series.__getitem__()が、np.ndarrayIndexSeriesインデクサでは欠損ラベルを許可するがlistでは許可しなかったバグを修正しました。これらはすべてKeyErrorを発生させるようになりました(GH 33646

  • DataFrame.truncate()Series.truncate()で、インデックスが単調増加と仮定されていたバグを修正しました(GH 33756

  • datetimeを表す文字列のリストによるインデックス付けが、DatetimeIndexまたはPeriodIndexで失敗していたバグを修正しました(GH 11278

  • Series.at()MultiIndexとともに使用された場合に、有効な入力で例外を発生させていたバグを修正しました(GH 26989

  • DataFrame.loc()で値の辞書を使用すると、dtypeがintの列がfloatに変更されるバグを修正しました(GH 34573

  • Series.loc()MultiIndexとともに使用された場合に、None値にアクセスする際にIndexingErrorを発生させていたバグを修正しました(GH 34318

  • DataFrame.reset_index()およびSeries.reset_index()が、空のDataFrameまたはMultiIndexを持つSeriesでデータ型を保持しなかったバグを修正しました(GH 19602

  • SeriesおよびDataFrameのインデックス付けで、NaTエントリを持つDatetimeIndexに対してtimeキーを使用する際のバグを修正しました(GH 35114

欠損値#

  • 空のSeriesfillna()を呼び出すと、正しくシャローコピーされたオブジェクトを返すようになりました。IndexDataFrame、および空ではないSeriesと動作が一致しました(GH 32543)。

  • Series.replace()で、引数to_replaceがdict/list型で、<NA>を含むSeriesで使用された場合にTypeErrorを発生させていたバグを修正しました。このメソッドは、置換のための比較を行う際に<NA>値を無視することで、この問題を処理するようになりました(GH 32621

  • any()all()が、null許容ブールdtypeとskipna=Falseを使用した場合に、すべてFalseまたはすべてTrueの値に対して誤って<NA>を返していたバグを修正しました(GH 33253

  • method=akimaを用いたinterpolateのドキュメントを明確化しました。derパラメータはスカラまたはNoneである必要があります(GH 33426

  • DataFrame.interpolate()が正しい軸の規則を使用するようになりました。以前は、列に沿った補間がインデックスに沿った補間につながり、その逆も同様でした。さらに、padffillbfillbackfillメソッドによる補間は、これらのメソッドをDataFrame.fillna()で使用する場合と同一です(GH 12918, GH 29146

  • DataFrame.interpolate()が、文字列型の列名を持つDataFrameで呼び出されたときにValueErrorをスローしていたバグを修正しました。このメソッドは、列名の型に依存しなくなりました(GH 33956

  • NAをフォーマット指定子を使用してフォーマット文字列に渡すことができるようになりました。たとえば、以前は"{:.1f}".format(pd.NA)はValueErrorを発生させましたが、今後は文字列"<NA>"を返します(GH 34740

  • Series.map()が、無効なna_actionでエラーを発生させなかったバグを修正しました(GH 32815

MultiIndex#

  • DataFrame.swaplevels()は、軸がMultiIndexでない場合にTypeErrorを発生させるようになりました。以前はAttributeErrorがスローされていました(GH 31126

  • Dataframe.loc()MultiIndexとともに使用された際にバグがありました。返される値が与えられた入力と同じ順序ではなかったことです(GH 22797

In [79]: df = pd.DataFrame(np.arange(4),
   ....:                   index=[["a", "a", "b", "b"], [1, 2, 1, 2]])
   ....: 

# Rows are now ordered as the requested keys
In [80]: df.loc[(['b', 'a'], [2, 1]), :]
Out[80]: 
     0
b 2  3
  1  2
a 2  1
  1  0

[4 rows x 1 columns]
  • MultiIndex.intersection()sort=Falseの場合に順序を保持することが保証されなかったバグを修正しました。(GH 31325

  • DataFrame.truncate()MultiIndex名を削除していたバグを修正しました。(GH 34564

In [81]: left = pd.MultiIndex.from_arrays([["b", "a"], [2, 1]])

In [82]: right = pd.MultiIndex.from_arrays([["a", "b", "c"], [1, 2, 3]])

# Common elements are now guaranteed to be ordered by the left side
In [83]: left.intersection(right, sort=False)
Out[83]: 
MultiIndex([('b', 2),
            ('a', 1)],
           )
  • 異なる列を持つレベルを指定せずに2つのMultiIndexを結合する際のバグを修正しました。return-indexersパラメータが無視されていました。(GH 34074

IO#

  • setpandas.read_csv()pandas.read_table()、またはpandas.read_fwf()names引数として渡すと、ValueError: Names should be an ordered collection.が発生するようになりました(GH 34946

  • display.precisionがゼロの場合の出力に関するバグを修正しました。(GH 20359

  • read_json()で、jsonに大きな数値の文字列が含まれている場合に整数オーバーフローが発生していたバグを修正しました。(GH 30320

  • read_csv()は、headerprefixの両方の引数がNoneでない場合にValueErrorを発生させるようになりました。(GH 27394

  • DataFrame.to_json()が、path_or_bufがS3 URIであった場合にNotFoundErrorを発生させていたバグを修正しました(GH 28375

  • DataFrame.to_parquet()がpyarrowのcoerce_timestampsのデフォルトを上書きしていたバグを修正しました。pyarrowのデフォルトに従うことで、version="2.0"でナノ秒タイムスタンプを書き込むことができるようになりました(GH 31652)。

  • read_csv()が、sep=Nonecommentキーワードを組み合わせて使用した場合にTypeErrorを発生させていたバグを修正しました(GH 31396

  • HDFStore のバグにより、Python 2 で書き込まれた固定形式のファイルを Python 3 で読み込む際に、datetime64 列の dtype が int64 に設定される問題が発生しました (GH 31750)。

  • read_sas() は、Timestamp.max よりも大きい日付と日時を、datetime.datetime オブジェクトとして返すようになりました (GH 20927)。

  • DataFrame.to_json() のバグにより、date_format="iso" を指定した場合に Timedelta オブジェクトが正しくシリアライズされない問題が発生しました (GH 28256)。

  • read_csv() は、parse_dates に渡された列名が Dataframe に存在しない場合に ValueError を発生させるようになりました (GH 31251)。

  • read_excel() のバグにより、高サロゲートを含む UTF-8 文字列がセグメンテーション違反を引き起こす可能性がありました (GH 23809)。

  • read_csv() のバグにより、空のファイルでファイル記述子リークが発生していました (GH 31488)。

  • read_csv() のバグにより、ヘッダーとデータ行の間に空白行がある場合にセグメンテーションフォールトが発生していました (GH 28071)。

  • read_csv() のバグにより、パーミッションの問題で誤解を招く例外が発生していました (GH 23784)。

  • read_csv() のバグにより、header=None で 2 つの余分なデータ列がある場合に IndexError が発生していました。

  • read_sas() のバグにより、Google Cloud Storage からファイルを読み込む際に AttributeError が発生していました (GH 33069)。

  • DataFrame.to_sql() のバグにより、範囲外の日付を保存する際に AttributeError が発生していました (GH 26761)。

  • read_excel() のバグにより、OpenDocument テキストセル内の複数の埋め込みスペースが正しく処理されませんでした (GH 32207)。

  • read_json() のバグにより、Boolean の listSeries に読み込む際に TypeError が発生していました (GH 31464)。

  • pandas.io.json.json_normalize() のバグにより、record_path で指定された場所が配列を指していない場合に問題が発生しました (GH 26284)。

  • pandas.read_hdf() は、サポートされていない HDF ファイルを読み込む際に、より明確なエラーメッセージを表示するようになりました (GH 9539)。

  • read_feather() のバグにより、s3 または http ファイルパスを読み込む際に ArrowIOError が発生していました (GH 29055)。

  • to_excel() のバグにより、列名 render を処理できず、KeyError が発生していました (GH 34331)。

  • execute() のバグにより、SQL ステートメントに % 文字が含まれており、パラメータが存在しない場合に、一部の DB-API ドライバーで ProgrammingError が発生していました (GH 34211)。

  • StataReader() のバグにより、イテレーターを使用してデータを読み込む際に、異なる dtype のカテゴリ変数が生成されていました (GH 31544)。

  • HDFStore.keys() には、すべてのネイティブ HDF5 テーブル名を取得できるオプションの include パラメータが追加されました (GH 29916)。

  • read_csv() および read_table() によって発生する TypeError 例外は、予期しないキーワード引数が渡された場合に parser_f として表示されていました (GH 25648)。

  • ODS ファイルに対する read_excel() のバグにより、0.0 の値が削除されていました (GH 27222)。

  • ujson.encode() のバグにより、sys.maxsize よりも大きい数値で OverflowError が発生していました (GH 34395)。

  • HDFStore.append_to_multiple() のバグにより、min_itemsize パラメータが設定されている場合に ValueError が発生していました (GH 11238)。

  • create_table() のバグにより、入力で data_columnscolumn 引数が指定されていない場合にエラーが発生するようになりました (GH 28156)。

  • read_json() は、lineschunksize が設定されている場合に、ファイル URL から行区切り JSON ファイルを読み込めるようになりました。

  • DataFrame.to_sql() のバグにより、MySQL で -np.inf エントリを持つ DataFrame を読み込む際に、より明確な ValueError が発生するようになりました (GH 34431)。

  • 大文字のファイル拡張子が read_* 関数によって解凍されないバグが修正されました (GH 35164)。

  • read_excel() のバグにより、header=Noneindex_collist として与えられた場合に TypeError が発生していました (GH 31783)。

  • read_excel() のバグにより、MultiIndex のヘッダーで datetime 値が使用された場合に問題が発生していました (GH 34748)。

  • read_excel() は、**kwds 引数を取らなくなりました。これにより、キーワード引数 chunksize を渡すと TypeError (以前は NotImplementedError) が発生し、キーワード引数 encoding を渡すと TypeError が発生するようになりました (GH 34464)。

  • DataFrame.to_records() のバグにより、タイムゾーン対応の datetime64 列のタイムゾーン情報が誤って失われる問題が発生していました (GH 32535)。

プロット#

  • 線/棒グラフの DataFrame.plot() は、辞書による色指定を受け付けるようになりました (GH 8193)。

  • DataFrame.plot.hist() のバグにより、複数の列で重みが機能しない問題が発生していました (GH 33173)。

  • DataFrame.boxplot() および DataFrame.plot.boxplot() のバグにより、medianpropswhiskerpropscappropsboxprops の色属性が失われる問題が発生していました (GH 30346)。

  • DataFrame.hist() のバグにより、column 引数の順序が無視される問題が発生していました (GH 29235)。

  • DataFrame.plot.scatter() のバグにより、異なる cmap で複数のプロットを追加した場合、カラーバーが常に最初の cmap を使用する問題が発生していました (GH 33389)。

  • DataFrame.plot.scatter() のバグにより、引数 c が色名を含む列に割り当てられている場合でも、プロットにカラーバーが追加される問題が発生していました (GH 34316)。

  • pandas.plotting.bootstrap_plot() のバグにより、軸が混雑し、ラベルが重なる問題が発生していました (GH 34905)。

  • DataFrame.plot.scatter() のバグにより、可変マーカーサイズをプロットする際にエラーが発生していました (GH 32904)。

GroupBy/resample/rolling#

  • pandas.api.indexers.BaseIndexercountminmaxmedianskewcovcorr とともに使用すると、任意の単調な pandas.api.indexers.BaseIndexer の子孫に対して正しい結果を返すようになりました (GH 32865)。

  • DataFrameGroupby.mean() および SeriesGroupby.mean() (同様に median()std()var()) は、許容されないキーワード引数が渡された場合に TypeError を発生させるようになりました。以前は UnsupportedFunctionCall が発生していました (median()min_count が渡された場合は AssertionError) (GH 31485)。

  • DataFrameGroupBy.apply() および SeriesGroupBy.apply() のバグにより、by 軸がソートされておらず、重複があり、適用された func が渡されたオブジェクトを変更しない場合に ValueError が発生していました (GH 30667)。

  • DataFrameGroupBy.transform() のバグにより、変換関数で誤った結果が生成されていました (GH 30918)。

  • DataFrameGroupBy.transform() および SeriesGroupBy.transform() のバグにより、カテゴリカルなキーと非カテゴリカルなキーが混在する複数のキーでグループ化した場合に誤った結果が返されていました (GH 32494)。

  • DataFrameGroupBy.count() および SeriesGroupBy.count() のバグにより、グループ化された列に NaN が含まれている場合にセグメンテーションフォールトが発生していました (GH 32841)。

  • DataFrame.groupby() および Series.groupby() のバグにより、ブール型 Series を集計する際に型が不整合になる問題が発生していました (GH 32894)。

  • DataFrameGroupBy.sum() および SeriesGroupBy.sum() のバグにより、nullable 整数 dtype の非 null 値の数が min_count 未満の場合に大きな負の数が返される問題が発生していました (GH 32861)。

  • SeriesGroupBy.quantile() のバグにより、nullable 整数で例外が発生していました (GH 33136)。

  • DataFrame.resample() のバグにより、結果のタイムゾーン対応 DatetimeIndex が深夜に DST 移行がある場合に AmbiguousTimeError が発生する可能性がありました (GH 25758)。

  • DataFrame.groupby() のバグにより、読み取り専用カテゴリを持つカテゴリカル列でグループ化し、sort=False の場合に ValueError が発生する可能性がありました (GH 33410)。

  • DataFrameGroupBy.agg()SeriesGroupBy.agg()DataFrameGroupBy.transform()SeriesGroupBy.transform()DataFrameGroupBy.resample()、および SeriesGroupBy.resample() のバグにより、サブクラスが保持されない問題が発生していました (GH 28330)。

  • SeriesGroupBy.agg() のバグにより、以前は SeriesGroupBy の名前付き集計で任意の列名が受け入れられていました。この動作は、str と呼び出し可能オブジェクトのみを許可し、それ以外の場合は TypeError を発生させるようになりました (GH 34422)。

  • DataFrame.groupby() のバグにより、agg キーのいずれかが空のリストを参照している場合に、Index の名前が失われる問題が発生していました (GH 32580)。

  • Rolling.apply() のバグにより、engine='numba' が指定されている場合に center=True が無視される問題が発生していました (GH 34784)。

  • DataFrame.ewm.cov() のバグにより、MultiIndex 入力で AssertionError が発生していました (GH 34440)。

  • core.groupby.DataFrameGroupBy.quantile() のバグにより、非数値型の場合に列を削除する代わりに TypeError が発生していました (GH 27892)。

  • core.groupby.DataFrameGroupBy.transform() のバグにより、func='nunique' で列が datetime64 型の場合、結果が int64 ではなく datetime64 型になる問題が発生していました (GH 35109)。

  • DataFrame.groupby() のバグにより、列を選択し、as_index=False で集計した場合に AttributeError が発生していました (GH 35246)。

  • DataFrameGroupBy.first() および DataFrameGroupBy.last() のバグにより、複数の Categoricals でグループ化した場合に不要な ValueError が発生する可能性がありました (GH 34951)。

再整形#

  • すべての数値およびブール還元メソッドがサブクラス化されたデータ型を返さないバグが修正されました (GH 25596)。

  • DataFrame.pivot_table() のバグにより、MultiIndexed 列のみが設定されている場合に問題が発生しました (GH 17038)。

  • DataFrame.unstack() および Series.unstack() のバグにより、MultiIndexed データ内のタプル名を受け取れるようになりました (GH 19966)。

  • DataFrame.pivot_table() のバグにより、marginTruecolumn のみが定義されている場合に問題が発生しました (GH 31016)。

  • DataFrame.pivot()columnsNone に設定されている場合の誤ったエラーメッセージが修正されました (GH 30924)。

  • crosstab() のバグにより、入力が 2 つの Series でタプル名を持っている場合、出力がダミーの MultiIndex を列として保持する問題が発生していました (GH 18321)。

  • DataFrame.pivot() は、index および columns 引数にリストを受け取れるようになりました (GH 21425)。

  • concat() のバグにより、copy=True の場合に結果のインデックスがコピーされない問題が発生していました (GH 29879)。

  • SeriesGroupBy.aggregate() のバグにより、同じ名前を共有する集計が上書きされる問題が発生していました (GH 30880)。

  • Index.astype() のバグにより、Float64Index から Int64Index に変換する際、または ExtensionArray dtype にキャストする際に name 属性が失われる問題が発生していました (GH 32013)。

  • Series.append() は、DataFrame または DataFrame を含むシーケンスが渡された場合に TypeError を発生させるようになりました (GH 31413)。

  • DataFrame.replace() および Series.replace() は、to_replace が予期される型でない場合に TypeError を発生させるようになりました。以前は replace は黙って失敗していました (GH 18634)。

  • Series のインプレース操作のバグにより、元々削除された DataFrame に列が追加される問題が発生していました (inplace=True を使用) (GH 30484)。

  • DataFrame.apply() のバグにより、raw=True が要求されたにもかかわらず、コールバックが Series パラメータで呼び出される問題が発生していました (GH 32423)。

  • DataFrame.pivot_table() のバグにより、タイムゾーン対応 dtype の列から MultiIndex レベルを作成する際にタイムゾーン情報が失われる問題が発生していました (GH 32558)。

  • concat() のバグにより、objs として非辞書マッピングを渡した場合に TypeError が発生する問題が発生していました (GH 32863)。

  • DataFrame.agg() は、存在しない列を集計しようとした場合に、より詳細な SpecificationError メッセージを提供するようになりました (GH 32755)。

  • DataFrame.unstack() のバグにより、MultiIndex 列と MultiIndex 行が使用された場合に問題が発生していました (GH 32624GH 24729GH 28306)。

  • DataFrame に辞書を追記する際に ignore_index=True を渡さない場合、TypeError: Can only append a dict if ignore_index=True が発生するようになりました (以前は TypeError: Can only append a :class:`Series` if ignore_index=True or if the :class:`Series` has a name) (GH 30871)。

  • DataFrame.corrwith()DataFrame.memory_usage()DataFrame.dot()DataFrame.idxmin()DataFrame.idxmax()DataFrame.duplicated()DataFrame.isin()DataFrame.count()Series.explode()Series.asof()、および DataFrame.asof() がサブクラス化された型を返さないバグが修正されました (GH 31331)。

  • concat() のバグにより、重複するキーを持つ DataFrameSeries の結合が許可されない問題が発生していました (GH 33654)。

  • cut() のバグにより、引数 labels に重複が含まれている場合にエラーが発生していました (GH 33141)。

  • eval() で名前付き関数のみが使用されるように修正されました (GH 32460)。

  • Dataframe.aggregate() および Series.aggregate() のバグにより、一部のケースで再帰ループが発生していました (GH 34224)。

  • melt() のバグが修正され、col_level > 0MultiIndex 列をメルティングする際に id_varsKeyError が発生する問題が解決されました (GH 34129)。

  • Series.where() のバグにより、空の Series と非ブール型 dtype の空の cond で問題が発生していました (GH 34592)。

  • DataFrame.apply()S dtype の要素で ValueError を発生させる回帰バグが修正されました (GH 34529)。

スパース#

  • タイムゾーン対応 dtype から SparseArray を作成する際に、黙ってタイムゾーン情報を削除するのではなく、警告を発行するようになりました (GH 32501)。

  • arrays.SparseArray.from_spmatrix() のバグにより、scipy sparse 行列が誤って読み込まれていました (GH 31991)。

  • SparseArray を使用する Series.sum() のバグにより、TypeError が発生していました (GH 25777)。

  • リストのようなものでインデックス付けされた場合に、NaN で埋められたすべて疎な SparseArray を含む DataFrame が問題を引き起こすバグが修正されました (GH 27781, GH 29563)。

  • SparseDtype の repr に fill_value 属性の repr が含まれるようになりました。以前は fill_value の文字列表現を使用していました (GH 34352)。

  • 空の DataFrameSparseDtype にキャストできないバグが修正されました (GH 33113)。

  • arrays.SparseArray() のバグにより、疎な DataFrame を反復可能なものでインデックス付けした場合に誤った型が返されていました (GH 34526, GH 34540)。

ExtensionArray#

  • Series.value_counts()Int64 dtype の空の入力で例外を発生させるバグが修正されました (GH 33317)。

  • concat() のバグが修正され、重ならない列を持つ DataFrame オブジェクトを結合する際に、拡張 dtype を保持する代わりにオブジェクト dtype 列になる問題が解決されました (GH 27692, GH 33027)。

  • StringArray.isna() が、pandas.options.mode.use_inf_as_naTrue に設定されている場合に NA 値に対して False を返すバグが修正されました (GH 33655)。

  • EA dtype とインデックスを持つがデータがないか、スカラデータがない Series の構築が失敗するバグが修正されました (GH 26469)。

  • 要素が多次元配列である拡張型の Series.__repr__() がクラッシュするバグが修正されました (GH 33770)。

  • Series.update() が、欠損値を持つ ExtensionArray dtypes で ValueError を発生させるバグが修正されました (GH 33980)。

  • StringArray.memory_usage() が実装されていなかったバグが修正されました (GH 33963)。

  • DataFrameGroupBy() が、nullable Boolean dtypes の集計で min_count 引数を無視するバグが修正されました (GH 34051)。

  • dtype='string' を持つ DataFrame のコンストラクタが失敗するバグが修正されました (GH 27953, GH 33623)。

  • DataFrame 列がスカラ拡張型に設定されている場合、拡張型ではなくオブジェクト型と見なされるバグが修正されました (GH 34832)。

  • IntegerArray.astype() がマスクも正しくコピーするように修正されました (GH 34931)。

その他#

  • オブジェクト dtype の Index に対する集合演算が、常にオブジェクト dtype の結果を返すようになりました (GH 31401)。

  • pandas.testing.assert_series_equal() が、check_series_type=True の場合に left 引数が異なるサブクラスである場合に正しく例外を発生させるように修正されました (GH 32670)。

  • DataFrame.query() または DataFrame.eval() 文字列で存在しない属性を取得すると、正しい AttributeError が発生するようになりました (GH 32408)。

  • pandas.testing.assert_series_equal() のバグが修正され、check_dtypeFalse の場合に Interval および ExtensionArray オペランドの dtype がチェックされる問題が解決されました (GH 32747)。

  • DataFrame.__dir__() のバグにより、列名に Unicode サロゲートを使用するとセグメンテーションフォールトが発生していました (GH 25509)。

  • DataFrame.equals() および Series.equals() がサブクラスを等しいとみなすことを許可するバグが修正されました (GH 34402)。

貢献者#

このリリースには合計368名の方々がパッチを貢献してくださいました。「+」の付いている方々は今回初めてパッチを貢献してくださいました。

  • 3vts +

  • A Brooks +

  • Abbie Popa +

  • Achmad Syarif Hidayatullah +

  • Adam W Bagaskarta +

  • Adrian Mastronardi +

  • Aidan Montare +

  • Akbar Septriyan +

  • Akos Furton +

  • Alejandro Hall +

  • Alex Hall +

  • Alex Itkes +

  • Alex Kirko

  • Ali McMaster +

  • Alvaro Aleman +

  • Amy Graham +

  • Andrew Schonfeld +

  • Andrew Shumanskiy +

  • Andrew Wieteska +

  • Angela Ambroz

  • Anjali Singh +

  • Anna Daglis

  • Anthony Milbourne +

  • Antony Lee +

  • Ari Sosnovsky +

  • Arkadeep Adhikari +

  • Arunim Samudra +

  • Ashkan +

  • Ashwin Prakash Nalwade +

  • Ashwin Srinath +

  • Atsushi Nukariya +

  • Ayappan +

  • Ayla Khan +

  • Bart +

  • Bart Broere +

  • Benjamin Beier Liu +

  • Benjamin Fischer +

  • Bharat Raghunathan

  • Bradley Dice +

  • Brendan Sullivan +

  • Brian Strand +

  • Carsten van Weelden +

  • Chamoun Saoma +

  • ChrisRobo +

  • Christian Chwala

  • クリストファー・ウィーラン

  • Christos Petropoulos +

  • Chuanzhu Xu

  • CloseChoice +

  • Clément Robert +

  • CuylenE +

  • DanBasson +

  • ダニエル・サクストン

  • Danilo Horta +

  • DavaIlhamHaeruzaman +

  • Dave Hirschfeld

  • Dave Hughes

  • David Rouquet +

  • David S +

  • Deepyaman Datta

  • Dennis Bakhuis +

  • Derek McCammond +

  • Devjeet Roy +

  • Diane Trout

  • Dina +

  • Dom +

  • Drew Seibert +

  • EdAbati

  • Emiliano Jordan +

  • Erfan Nariman +

  • Eric Groszman +

  • Erik Hasse +

  • Erkam Uyanik +

  • Evan D +

  • Evan Kanter +

  • Fangchen Li +

  • Farhan Reynaldo +

  • Farhan Reynaldo Hutabarat +

  • Florian Jetter +

  • Fred Reiss +

  • GYHHAHA +

  • Gabriel Moreira +

  • Gabriel Tutui +

  • Galuh Sahid

  • Gaurav Chauhan +

  • George Hartzell +

  • Gim Seng +

  • Giovanni Lanzani +

  • Gordon Chen +

  • Graham Wetzler +

  • Guillaume Lemaitre

  • Guillem Sánchez +

  • HH-MWB +

  • Harshavardhan Bachina

  • How Si Wei

  • Ian Eaves

  • Iqrar Agalosi Nureyza +

  • アーブ・ラスティッグ

  • Iva Laginja +

  • JDkuba

  • Jack Greisman +

  • Jacob Austin +

  • Jacob Deppen +

  • Jacob Peacock +

  • Jake Tae +

  • Jake Vanderplas +

  • James Cobon-Kerr

  • Jan Červenka +

  • Jan Škoda

  • Jane Chen +

  • Jean-Francois Zinque +

  • Jeanderson Barros Candido +

  • ジェフ・リーバック

  • Jered Dominguez-Trujillo +

  • ジェレミー・シェンデル

  • Jesse Farnham

  • Jiaxiang

  • Jihwan Song +

  • Joaquim L. Viegas +

  • Joel Nothman

  • John Bodley +

  • John Paton +

  • Jon Thielen +

  • Joris Van den Bossche

  • Jose Manuel Martí +

  • Joseph Gulian +

  • Josh Dimarsky

  • Joy Bhalla +

  • João Veiga +

  • Julian de Ruiter +

  • Justin Essert +

  • ジャスティン・ジェン

  • KD-dev-lab +

  • Kaiqi Dong

  • Karthik Mathur +

  • Kaushal Rohit +

  • Kee Chong Tan

  • Ken Mankoff +

  • ケンドール・マッセ

  • Kenny Huynh +

  • Ketan +

  • Kevin Anderson +

  • Kevin Bowey +

  • ケビン・シェパード

  • Kilian Lieret +

  • Koki Nishihara +

  • Krishna Chivukula +

  • KrishnaSai2020 +

  • Lesley +

  • Lewis Cowles +

  • Linda Chen +

  • Linxiao Wu +

  • Lucca Delchiaro Costabile +

  • MBrouns +

  • Mabel Villalba

  • Mabroor Ahmed +

  • Madhuri Palanivelu +

  • Mak Sze Chun

  • Malcolm +

  • Marc Garcia

  • マルコ・ゴレリ

  • Marian Denes +

  • Martin Bjeldbak Madsen +

  • Martin Durant +

  • Martin Fleischmann +

  • Martin Jones +

  • Martin Winkel

  • Martina Oefelein +

  • Marvzinc +

  • María Marino +

  • Matheus Cardoso +

  • Mathis Felardos +

  • Matt Roeschke

  • Matteo Felici +

  • Matteo Santamaria +

  • Matthew Roeschke

  • Matthias Bussonnier

  • Max Chen

  • Max Halford +

  • Mayank Bisht +

  • Megan Thong +

  • Michael Marino +

  • Miguel Marques +

  • Mike Kutzma

  • Mohammad Hasnain Mohsin Rajan +

  • Mohammad Jafar Mashhadi +

  • MomIsBestFriend

  • モニカ +

  • ナタリー・ジャン

  • ネイト・アームストロング +

  • ナサニエル +

  • ニック・ニューマン +

  • ニコ・シュレーマー +

  • ニクラス・ウェーバー +

  • オブリービアスパラダイム +

  • オルガ・リャシェフスカ +

  • オリビエ・ルーグ +

  • Pandas Development Team

  • パラレルズ +

  • パトリック +

  • パトリック・カンド +

  • ポール・リリー +

  • ポール・サンダース +

  • ピアースキーザー +

  • ペドロ・ラロイ +

  • ペドロ・レイズ

  • ピーター・ブル +

  • ピーター・スタインバッハ +

  • ファン・ドゥク・ニャット・ミン +

  • フィル・カーリン +

  • ピエール=イヴ・ブルギニョン +

  • ピオトル・カスプシク +

  • ピオトル・ニエワツニー +

  • プラカル・パンディ

  • プラシャント・アナンド +

  • プニーサ・パイ +

  • クアン・グエン +

  • ラファエル・ハイメス III +

  • ラフィフ +

  • ライサDZ +

  • ラクシット・ナイドゥ +

  • ラム・ラチュム +

  • レッド +

  • リカルド・アラニス +

  • リチャード・シャドラック +

  • リク・デ・コート

  • Robert de Vries

  • ロビン・トゥ・ロクセル +

  • ロジャー・エレンス +

  • ロヒース295 +

  • ローマン・ユルチャック

  • ロア +

  • ルシャブ・ヴァサニ

  • ライアン

  • Ryan Nazareth

  • サイ・スラヴァン・メディチェルラ +

  • シュブ・チャタジー +

  • サム・コーハン

  • サミラ-g-js +

  • サンドゥ・ウルス +

  • サン・アグン +

  • サントシュバラ18 +

  • サシダール・カストゥリ +

  • サティシュクマール・モハン +

  • ソール・シャナブルック

  • スコット・ジガンテ +

  • セバスチャン・ベルク +

  • セバスチャン・ヴァンレル

  • セルゲイ・チピガ +

  • セルゲイ +

  • シルパスガン +

  • サイモン・ギボンズ

  • Simon Hawkins

  • サイモン・レグナー +

  • ソーハム・ティワリ +

  • ソン・ウェンハオ +

  • ソウヴィク・マンダル

  • スペンサー・クラーク

  • ステファン・レーベルク +

  • ステファン・シュミッツ +

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

  • ステファン・タルジャール

  • スルタン・オラズバエフ +

  • スマナウ・サリーン

  • スラージH1 +

  • スヴァユ・アリ +

  • テルジ・ピーターセン

  • トーマス・J・ファン +

  • Thomas Li

  • トーマス・スミス +

  • Tim Swast

  • トビアス・ピッテルス +

  • トム +

  • Tom Augspurger

  • Uwe L. Korn

  • ヴァレンティン・イオヴェネ +

  • ヴァンダナ・アイヤー +

  • ベンカテシュ・ダッタ +

  • ヴィジャイ・サイ・ムティアラ +

  • ヴィカス・パンディ

  • ヴィプル・ライ +

  • ヴィシュワム・パンディ +

  • ウラジミール・ベルクートフ +

  • Will Ayd

  • Will Holmgren

  • ウィリアム +

  • ウィリアム・エイド

  • ヤゴ・ゴンサレス +

  • 小林洋介 +

  • ザカリー・ローレンス +

  • ザキ・ビルファギ +

  • ゼブ・ニコルス +

  • alimcmaster1

  • alm +

  • andhikayusup +

  • andresmcneill +

  • avinashpancham +

  • benabel +

  • bernie gray +

  • biddwan09 +

  • brock +

  • クリス・B1

  • cleconte987 +

  • dan1261 +

  • david-cortes +

  • davidwales +

  • dequadras +

  • dhuettenmoser +

  • dilex42 +

  • elmonsomiat +

  • epizzigoni +

  • fjetter

  • gabrielvf1 +

  • gdex1 +

  • ジーエフヤング

  • guru kiran +

  • h-vishal

  • iamshwin

  • jamin-aws-ospo +

  • jbrockmendel

  • jfcorbett +

  • jnecus +

  • kernc

  • kota matsuoka +

  • kylekeppler +

  • leandermaben +

  • link2xt +

  • manoj_koneni +

  • marydmit +

  • masterpiga +

  • maxime.song +

  • mglasder +

  • moaraccounts +

  • mproszewska

  • neilkg

  • nrebena

  • ossdev07 +

  • paihu

  • pan Jacek +

  • partev +

  • patrick +

  • pedrooa +

  • pizzathief +

  • proost

  • pvanhauw +

  • rbenes

  • レベッカ-パーマー

  • rhshadrach +

  • rjfs +

  • s-scherrer +

  • sage +

  • sagungrp +

  • salem3358 +

  • saloni30 +

  • smartswdeveloper +

  • smartvinnetou +

  • themien +

  • timhunderwood +

  • tolhassianipar +

  • tonywu1999

  • tsvikas

  • tv3141

  • venkateshdatta1993 +

  • vivikelapoutre +

  • willbowditch +

  • willpeppo +

  • za +

  • zaki-indra +