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値を含める場合はdropnaをFalseに定義できます。下位互換性を維持するため、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がグループキーに含まれないことを意味します。
キーによるソート#
DataFrameとSeriesのソートメソッドに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 25057、GH 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引数をサポートするようになりました#
GrouperとDataFrame.resample()は、originとoffset引数をサポートするようになりました。これにより、ユーザーはグループ化を調整するタイムスタンプを制御できます。(GH 31809)
グループ化のビンは、時系列の開始時点の日の開始に基づいて調整されます。これは、日の倍数である頻度(30Dなど)や、日を分割する頻度(90sや1minなど)ではうまく機能します。しかし、この基準を満たさない一部の頻度では一貫性がなくなる可能性があります。この動作を変更するために、origin引数で固定されたタイムスタンプを指定できるようになりました。
2つの引数は非推奨になりました(DataFrame.resample()のドキュメントに詳細情報があります)
baseはoffsetに置き換えられるべきです。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()がdatetime64dtypeをサポートするようになりました(GH 32538)。IntegerArrayがsum操作を実装するようになりました(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 30164、GH 34798)。Stylerは、複数のセルが同じスタイルを持つ場合にCSSをより効率的にレンダリングできるようになりました(GH 30876)。highlight_null()がsubset引数を受け入れるようになりました(GH 31345)。sqlite接続に直接書き込む場合、
DataFrame.to_sql()がmultiメソッドをサポートするようになりました(GH 29921)。pandas.errors.OptionErrorがpandas.errorsで公開されるようになりました(GH 27553)。api.extensions.ExtensionArray.argmax()とapi.extensions.ExtensionArray.argmin()を追加しました(GH 24382)。timedelta_range()は、start、stop、およびperiodsが渡されたときに周波数を推論するようになりました(GH 32377)。IntervalIndexの位置スライスがstep > 1のスライスをサポートするようになりました(GH 31658)。Series.strにfullmatchメソッドが追加されました。これは、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 33206、GH 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()の動作をミラーリングし、dictやlistなど、Seriesに強制できるオブジェクトを受け入れるようになりました(GH 33215)。DataFrameGroupBy.transform()とDataFrameGroupBy.aggregate()にengineとengine_kwargs引数が追加され、Numbaで関数を実行できるようになりました(GH 32854、GH 33388)。Resampler.interpolate()がSciPy補間メソッドscipy.interpolate.CubicSplineをメソッドcubicsplineとしてサポートするようになりました(GH 33670)。DataFrameGroupByとSeriesGroupByが、グループ内のランダムサンプリングを行うための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ファイルライターであるStataWriter、StataWriter117、およびStataWriterUTF8にも追加されました(GH 26599)。HDFStore.put()がtrack_timesパラメータを受け入れるようになりました。このパラメータはPyTablesのcreate_tableメソッドに渡されます(GH 32682)。Series.plot()とDataFrame.plot()が、x軸とy軸にラベルを表示するためのxlabelとylabelパラメータを受け入れるようになりました(GH 9093)。RollingとExpandingがイテラブルになりました(GH 11704)。option_contextをcontextlib.ContextDecoratorにし、関数全体にデコレータとして使用できるようにしました(GH 34253)。DataFrame.to_csv()とSeries.to_csv()がerrors引数を受け入れるようになりました(GH 22610)。DataFrameGroupBy.groupby.transform()がfuncをpad、backfill、cumcountにできるようになりました(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 33607、GH 34339、GH 34095)。read_gbq()がプログレスバーを無効にできるようになりました(GH 33360)。read_gbq()がpandas-gbqのmax_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)。ExponentialMovingWindowがtimes引数をサポートするようになりました。これにより、times内のタイムスタンプで間隔が空けられた観測値でmeanを計算できます(GH 34839)。DataFrame.agg()とSeries.agg()が、出力列/インデックスの名前を変更するための名前付き集約を受け入れるようになりました。(GH 26513)compute.use_numbaが、利用可能な場合にnumbaエンジンを利用する設定オプションとして存在するようになりました(GH 33966、GH 35374)。Series.plot()が非対称誤差棒をサポートするようになりました。以前は、Series.plot()がyerrおよび/またはxerrに誤差値を含む「2xN」配列を受け取ると、左/下側の値(最初の行)がミラーリングされ、右/上側の値(2番目の行)は無視されていました。現在、最初の行は左/下側の誤差値を表し、2番目の行は右/上側の誤差値を表します。(GH 9536)
注目すべきバグ修正#
これらは、注目すべき動作変更をもたらす可能性のあるバグ修正です。
MultiIndex.get_indexerはmethod引数を正しく解釈します。#
これにより、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]])
dfをmi_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]
そして、dfをmi_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=TrueでDataFrame.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=FalseでDataFrame.groupby()を使用し、関数idxmax、idxmin、mad、nunique、sem、skew、またはstdを使用すると、グループ化列が変更されていました。現在は、他の集約と同様に、グループ化列は変更されません。(GH 21090、GH 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=FalseのDataFrameGroupby.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 33718、GH 29766、GH 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()でsuffixesをsetとして提供することは非推奨です。代わりにタプルを提供してください(GH 33740、GH 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)。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)。
パフォーマンス改善#
内部インデックスメソッド
_shallow_copy()は、キャッシュされた属性を新しいインデックスにコピーするようになり、新しいインデックスでこれらを再度作成することを回避します。これにより、既存のインデックスのコピーを作成する多くの操作が高速化されます(GH 28584、GH 32640、GH 32669)。DataFrame.sparse.from_spmatrix()コンストラクタを使用してscipy.sparse行列から疎な値を持つDataFrameを作成する際の著しいパフォーマンス改善(GH 32821、GH 32825、GH 32826、GH 32856、GH 32858)。groupbyメソッド
Groupby.first()およびGroupby.last()のパフォーマンス改善(GH 34178)。nullable(整数およびブール)dtypeの
factorize()におけるパフォーマンス改善(GH 33064)。Categoricalオブジェクトの構築におけるパフォーマンス改善(GH 33921)pandas.qcut()とpandas.cut()におけるパフォーマンスリグレッションを修正しました(GH 33921)。nullable(整数およびブール)dtypeの集約(
sum、prod、min、max)におけるパフォーマンス改善(GH 30982、GH 33261、GH 33442)。RollingGroupbyのパフォーマンス改善(GH 34052)。MultiIndexにおける算術演算(sub、add、mul、div)の性能改善(GH 34297)。bool_indexerがlistの場合の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)Indexコンストラクタにカテゴリカルデータとdtype=objectを渡すと、誤ってobject-dtypeIndexではなくCategoricalIndexが返されるバグを修正しました(GH 32167)Categorical比較演算子__ne__が、いずれかの要素が欠落している場合に誤ってFalseと評価されるバグを修正しました(GH 32276)Categorical.fillna()がCategorical型のother引数を受け入れるようになりました(GH 32420)Categoricalのreprがintとstrを区別していなかったバグを修正しました(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)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の演算で、timedelta64dtypeの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__()が、int64dtypeの値をサイレントにキャストすることを誤って許可していたバグを修正しました(GH 33717)PeriodからTimedeltaIndexを減算する際に、成功すべき場合に誤ってTypeErrorを発生させ、TypeErrorを発生させるべき場合にIncompatibleFrequencyを発生させていたバグを修正しました(GH 33883)読み取り専用NumPy配列から非ナノ秒分解能で
SeriesまたはIndexを構築する際に、タイムスタンプの範囲内であればdatetime64[ns]dtypeに強制変換される代わりにobject dtypeに変換されていたバグを修正しました(GH 34843)。Period、date_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またはNoneをTimedeltaで除算する際に、誤ってNaTを返していたバグを修正しました(GH 31869)Timedeltaオブジェクトとtimedelta64dtypeの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)Timedeltaとpandas.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=Falseとdatetime64dtypeまたは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オブジェクトと
datetime64dtypeオブジェクト間のDataFrameおよびSeriesの加算と減算のバグを修正しました(GH 33824)Index.difference()でFloat64IndexとobjectIndexを比較する際に誤った結果を返していたバグを修正しました(GH 35217)DataFrameの縮約(例:df.min(),df.max())でExtensionArraydtypesを持つ場合にバグがありました(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)
変換#
ビッグエンディアン
datetime64dtypeのNumPy配列からのSeries構築におけるバグを修正しました(GH 29684)DataFrameコンストラクタは、DataFrameオブジェクトのリストを受け入れなくなりました。NumPyの変更により、DataFrameオブジェクトは一貫して2Dオブジェクトとして扱われるため、DataFrameオブジェクトのリストは3Dと見なされ、DataFrameコンストラクタには受け入れられなくなりました(GH 32289)。DataFrameで、リストを使用してフレームを初期化し、MultiIndexにネストされたリストでcolumnsを割り当てる際のバグを修正しました(GH 32173)新しいインデックスを作成する際のリストの無効な構築に対するエラーメッセージを改善しました(GH 35190)
文字列#
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-dtypeIndexに対して整数キーでインデックス付けする際のバグを修正しました(GH 31905)重複する列を持つ
DataFrameでDataFrame.iloc.__setitem__()が、一致するすべての列の値を誤って設定していたバグを修正しました(GH 15686, GH 22036)DataFrame.loc()とSeries.loc()で、DatetimeIndex、TimedeltaIndex、または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.ndarray、Index、Seriesインデクサでは欠損ラベルを許可するが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)
欠損値#
空の
Seriesでfillna()を呼び出すと、正しくシャローコピーされたオブジェクトを返すようになりました。Index、DataFrame、および空ではない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()が正しい軸の規則を使用するようになりました。以前は、列に沿った補間がインデックスに沿った補間につながり、その逆も同様でした。さらに、pad、ffill、bfill、backfillメソッドによる補間は、これらのメソッドを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#
setをpandas.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()は、headerとprefixの両方の引数が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=Noneとcommentキーワードを組み合わせて使用した場合に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 のlistをSeriesに読み込む際に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_columnsにcolumn引数が指定されていない場合にエラーが発生するようになりました (GH 28156)。read_json()は、linesとchunksizeが設定されている場合に、ファイル URL から行区切り JSON ファイルを読み込めるようになりました。DataFrame.to_sql()のバグにより、MySQL で-np.infエントリを持つ DataFrame を読み込む際に、より明確なValueErrorが発生するようになりました (GH 34431)。大文字のファイル拡張子が read_* 関数によって解凍されないバグが修正されました (GH 35164)。
read_excel()のバグにより、header=Noneでindex_colがlistとして与えられた場合に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()のバグにより、medianprops、whiskerprops、capprops、boxpropsの色属性が失われる問題が発生していました (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.BaseIndexerをcount、min、max、median、skew、cov、corrとともに使用すると、任意の単調な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()のバグにより、marginがTrueでcolumnのみが定義されている場合に問題が発生しました (GH 31016)。DataFrame.pivot()でcolumnsがNoneに設定されている場合の誤ったエラーメッセージが修正されました (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に変換する際、またはExtensionArraydtype にキャストする際に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 32624、GH 24729、GH 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()のバグにより、重複するキーを持つDataFrameとSeriesの結合が許可されない問題が発生していました (GH 33654)。cut()のバグにより、引数labelsに重複が含まれている場合にエラーが発生していました (GH 33141)。Dataframe.aggregate()およびSeries.aggregate()のバグにより、一部のケースで再帰ループが発生していました (GH 34224)。melt()のバグが修正され、col_level > 0のMultiIndex列をメルティングする際にid_varsでKeyErrorが発生する問題が解決されました (GH 34129)。Series.where()のバグにより、空のSeriesと非ブール型 dtype の空のcondで問題が発生していました (GH 34592)。DataFrame.apply()がSdtype の要素で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)。空の
DataFrameをSparseDtypeにキャストできないバグが修正されました (GH 33113)。arrays.SparseArray()のバグにより、疎な DataFrame を反復可能なものでインデックス付けした場合に誤った型が返されていました (GH 34526, GH 34540)。
ExtensionArray#
Series.value_counts()がInt64dtype の空の入力で例外を発生させるバグが修正されました (GH 33317)。concat()のバグが修正され、重ならない列を持つDataFrameオブジェクトを結合する際に、拡張 dtype を保持する代わりにオブジェクト dtype 列になる問題が解決されました (GH 27692, GH 33027)。StringArray.isna()が、pandas.options.mode.use_inf_as_naがTrueに設定されている場合に NA 値に対してFalseを返すバグが修正されました (GH 33655)。EA dtype とインデックスを持つがデータがないか、スカラデータがない
Seriesの構築が失敗するバグが修正されました (GH 26469)。要素が多次元配列である拡張型の
Series.__repr__()がクラッシュするバグが修正されました (GH 33770)。Series.update()が、欠損値を持つExtensionArraydtypes で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_dtypeがFalseの場合に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 +