2.1.0 中的新功能 (2023年8月30日)#

这是 pandas 2.1.0 中的更改。请参阅 发行说明 以获取包括其他版本 pandas 的完整更新日志。

增强功能#

PyArrow 将成为 pandas 3.0 的必需依赖项#

PyArrow 将从 pandas 3.0 开始成为 pandas 的必需依赖。这一决定是基于 PDEP 10 做出的。

这将启用对 pandas 用户非常有益的更多更改,包括但不限于:

  • 默认情况下将字符串推断为 PyArrow 支持的字符串,从而显著减少内存占用并大幅提升性能。

  • 默认情况下,通过 PyArrow 推断更复杂的 dtypes,如 Decimal列表字节结构化数据 等。

  • 与其他依赖于 Apache Arrow 的库更好的互操作性。

我们正在收集对此决定的反馈 这里

默认情况下避免使用 NumPy 对象 dtype 用于字符串#

以前,所有字符串默认存储在具有NumPy对象数据类型的列中。此版本引入了一个选项 future.infer_string,该选项推断所有字符串为具有数据类型 "string[pyarrow_numpy]" 的PyArrow支持的字符串。这是一个新的字符串数据类型实现,遵循NumPy语义进行比较操作,并将返回 np.nan 作为缺失值指示符。设置该选项还会将数据类型 "string" 推断为 StringDtype,并将存储设置为 "pyarrow_numpy",忽略选项 mode.string_storage 背后的值。

此选项仅在安装了 PyArrow 时有效。与 NumPy 对象相比,PyArrow 支持的字符串显著减少了内存占用,并提供了巨大的性能提升(GH 54430)。

该选项可以通过以下方式启用:

pd.options.future.infer_string = True

此行为将成为 pandas 3.0 的默认行为。

DataFrame 缩减保留扩展数据类型#

在 pandas 的早期版本中,DataFrame 缩减的结果(DataFrame.sum() DataFrame.mean() 等)具有 NumPy dtypes,即使 DataFrames 是扩展 dtypes。pandas 现在可以在对具有相同 dtype 的 DataFrame 列进行缩减时保留 dtypes(GH 52788)。

旧行为

In [1]: df = pd.DataFrame({"a": [1, 1, 2, 1], "b": [np.nan, 2.0, 3.0, 4.0]}, dtype="Int64")
In [2]: df.sum()
Out[2]:
a    5
b    9
dtype: int64
In [3]: df = df.astype("int64[pyarrow]")
In [4]: df.sum()
Out[4]:
a    5
b    9
dtype: int64

新行为

In [1]: df = pd.DataFrame({"a": [1, 1, 2, 1], "b": [np.nan, 2.0, 3.0, 4.0]}, dtype="Int64")

In [2]: df.sum()
Out[2]: 
a    5
b    9
dtype: Int64

In [3]: df = df.astype("int64[pyarrow]")

In [4]: df.sum()
Out[4]: 
a    5
b    9
dtype: int64[pyarrow]

请注意,现在 dtype 分别是掩码 dtype 和 PyArrow dtype,而之前它是 NumPy 整数 dtype。

为了允许 DataFrame 缩减操作保留扩展数据类型,ExtensionArray._reduce() 获得了一个新的关键字参数 keepdims。调用 ExtensionArray._reduce() 并设置 keepdims=True 应返回沿缩减轴长度为1的数组。为了保持向后兼容性,该参数不是必需的,但将来会变成必需的。如果在签名中找不到该参数,DataFrame 缩减操作将无法保留扩展数据类型。此外,如果在签名中找不到该参数,将发出一个 FutureWarning,并且像 mypy 这样的类型检查器可能会抱怨签名与 ExtensionArray._reduce() 不兼容。

写时复制改进#

  • Series.transform()func 就地修改 Series 时不尊重写时复制 (GH 53747)

  • 调用 Index.values() 现在将返回一个只读的 NumPy 数组 (GH 53704)

  • Series 设置到 DataFrame 中现在会创建一个惰性副本而不是深拷贝 (GH 53142)

  • 当从 Index 对象的字典构造 DataFrame 并指定 copy=False 时,DataFrame 构造函数现在将对这些 Index 对象使用延迟复制作为 DataFrame 的列 (GH 52947)

  • 对 Series 或 DataFrame 的浅拷贝 (df.copy(deep=False)) 现在也会返回行/列 Index 对象的浅拷贝,而不仅仅是数据的浅拷贝,即结果的索引不再相同(df.copy(deep=False).index is df.index 不再是 True)(GH 53721)

  • DataFrame.head()DataFrame.tail() 现在将返回深层副本 (GH 54011)

  • DataFrame.eval() 添加惰性复制机制 (GH 53746)

  • 尝试在临时列选择上就地操作(例如,df["a"].fillna(100, inplace=True))现在在启用写时复制时总是会引发警告。在这种模式下,像这样就地操作永远不会起作用,因为选择行为表现为临时副本。这适用于:

    • DataFrame.update / Series.update

    • DataFrame.fillna / Series.fillna

    • DataFrame.replace / Series.replace

    • DataFrame.clip / Series.clip

    • DataFrame.where / Series.where

    • DataFrame.mask / Series.mask

    • DataFrame.interpolate / Series.interpolate

    • DataFrame.ffill / Series.ffill

    • DataFrame.bfill / Series.bfill

新的 DataFrame.map() 方法和对 ExtensionArrays 的支持#

已添加 DataFrame.map() 并弃用 DataFrame.applymap()DataFrame.map() 具有与 DataFrame.applymap() 相同的功能,但新名称更好地传达了这是 DataFrame 版本的 Series.map() (GH 52353)。

当给定一个可调用对象时,Series.map() 将该可调用对象应用于 Series 的所有元素。类似地,DataFrame.map() 将该可调用对象应用于 DataFrame 的所有元素,而 Index.map() 将该可调用对象应用于 Index 的所有元素。

通常,不希望将可调用对象应用于数组中的类似 NaN 的值,为了避免这样做,可以调用 map 方法并使用 na_action="ignore",即 ser.map(func, na_action="ignore")。然而,许多 ExtensionArrayIndex 类型未实现 na_action="ignore",并且除了可空数值类型(即具有 dtype Int64 等)之外,na_action="ignore" 对任何 ExtensionArray 子类都无法正确工作。

na_action="ignore" 现在适用于所有数组类型 (GH 52219, GH 51645, GH 51809, GH 51936, GH 52033; GH 52096)。

以前的行为:

In [1]: ser = pd.Series(["a", "b", np.nan], dtype="category")
In [2]: ser.map(str.upper, na_action="ignore")
NotImplementedError
In [3]: df = pd.DataFrame(ser)
In [4]: df.applymap(str.upper, na_action="ignore")  # worked for DataFrame
     0
0    A
1    B
2  NaN
In [5]: idx = pd.Index(ser)
In [6]: idx.map(str.upper, na_action="ignore")
TypeError: CategoricalIndex.map() got an unexpected keyword argument 'na_action'

新行为:

In [5]: ser = pd.Series(["a", "b", np.nan], dtype="category")

In [6]: ser.map(str.upper, na_action="ignore")
Out[6]: 
0      A
1      B
2    NaN
dtype: category
Categories (2, object): ['A', 'B']

In [7]: df = pd.DataFrame(ser)

In [8]: df.map(str.upper, na_action="ignore")
Out[8]: 
     0
0    A
1    B
2  NaN

In [9]: idx = pd.Index(ser)

In [10]: idx.map(str.upper, na_action="ignore")
Out[10]: CategoricalIndex(['A', 'B', nan], categories=['A', 'B'], ordered=False, dtype='category')

此外,请注意 Categorical.map() 隐式地将其 na_action 默认设置为 "ignore"。这已被弃用,并且 Categorical.map() 的默认值将更改为 na_action=None,与其他所有数组类型一致。

新的 DataFrame.stack() 实现#

pandas 重新实现了 DataFrame.stack()。要使用新的实现,请传递参数 future_stack=True。这将成为 pandas 3.0 中的唯一选项。

之前的实现有两个主要的行为缺陷。

  1. 之前的实现会不必要地引入NA值到结果中。用户可以通过传递 ``dropna=True``(默认值)来自动删除NA值,但这样做也可能从结果中删除存在于输入中的NA值。请参见下面的示例。

  2. 使用 ``sort=True``(默认值)的前一个实现有时会对部分结果索引进行排序,有时则不会。如果输入的列 不是 MultiIndex,那么结果索引永远不会被排序。如果列是 MultiIndex,那么在大多数情况下,结果索引中来自堆叠列级别的级别会被排序。在极少数情况下,这些级别会根据列的创建方式以非标准顺序排序。

新的实现 (future_stack=True) 在堆叠多个层级时将不再不必要地引入NA值,并且永远不会排序。因此,参数 dropnasort 不再使用,并且在使用 future_stack=True 时必须保持未指定。这些参数将在下一个主要版本中被移除。

In [11]: columns = pd.MultiIndex.from_tuples([("B", "d"), ("A", "c")])

In [12]: df = pd.DataFrame([[0, 2], [1, 3]], index=["z", "y"], columns=columns)

In [13]: df
Out[13]: 
   B  A
   d  c
z  0  2
y  1  3

在之前的版本 (future_stack=False) 中,dropna=True 的默认值会移除不必要引入的 NA 值,但在此过程中仍会将 dtype 强制转换为 float64。在新版本中,不会引入 NA 值,因此不会强制转换 dtype。

In [14]: df.stack([0, 1], future_stack=False, dropna=True)
Out[14]: 
z  A  c    2.0
   B  d    0.0
y  A  c    3.0
   B  d    1.0
dtype: float64

In [15]: df.stack([0, 1], future_stack=True)
Out[15]: 
z  B  d    0
   A  c    2
y  B  d    1
   A  c    3
dtype: int64

如果输入包含 NA 值,之前的版本会在 dropna=True 时也会丢弃那些值,或者在 dropna=False 时引入新的 NA 值。新版本保留输入中的所有值。

In [16]: df = pd.DataFrame([[0, 2], [np.nan, np.nan]], columns=columns)

In [17]: df
Out[17]: 
     B    A
     d    c
0  0.0  2.0
1  NaN  NaN

In [18]: df.stack([0, 1], future_stack=False, dropna=True)
Out[18]: 
0  A  c    2.0
   B  d    0.0
dtype: float64

In [19]: df.stack([0, 1], future_stack=False, dropna=False)
Out[19]: 
0  A  d    NaN
      c    2.0
   B  d    0.0
      c    NaN
1  A  d    NaN
      c    NaN
   B  d    NaN
      c    NaN
dtype: float64

In [20]: df.stack([0, 1], future_stack=True)
Out[20]: 
0  B  d    0.0
   A  c    2.0
1  B  d    NaN
   A  c    NaN
dtype: float64

其他增强功能#

向后不兼容的 API 更改#

增加了 Python 的最小版本要求#

pandas 2.1.0 支持 Python 3.9 及以上版本。

增加了依赖项的最小版本要求#

一些依赖项的最低支持版本已更新。如果已安装,我们现在要求:

最低版本

必需的

Changed

numpy

1.22.4

X

X

mypy (dev)

1.4.1

X

beautifulsoup4

4.11.1

X

瓶颈

1.3.4

X

dataframe-api-compat

0.1.7

X

fastparquet

0.8.1

X

fsspec

2022.05.0

X

hypothesis

6.46.1

X

gcsfs

2022.05.0

X

jinja2

3.1.2

X

lxml

4.8.0

X

numba

0.55.2

X

numexpr

2.8.0

X

openpyxl

3.0.10

X

pandas-gbq

0.17.5

X

psycopg2

2.9.3

X

pyreadstat

1.1.5

X

pyqt5

5.15.6

X

pytables

3.7.0

X

pytest

7.3.2

X

python-snappy

0.6.1

X

pyxlsb

1.0.9

X

s3fs

2022.05.0

X

scipy

1.8.1

X

sqlalchemy

1.4.36

X

tabulate

0.8.10

X

xarray

2022.03.0

X

xlsxwriter

3.0.3

X

zstandard

0.17.0

X

对于 可选库 ,一般建议使用最新版本。

更多信息请参见 依赖项可选依赖项

其他 API 更改#

  • arrays.PandasArray 已重命名为 NumpyExtensionArray ,并且附带的 dtype 名称从 PandasDtype 改为 NumpyEADtype ;导入 PandasArray 仍然有效,直到下一个主要版本 (GH 53694)

弃用#

在类似 setitem 的 Series 操作中弃用静默向上转换#

PDEP-6: https://pandas.pydata.org/pdeps/0006-ban-upcasting.html

对 Series(或 DataFrame 列)的类似 setitem 操作,这些操作会静默地向上转换数据类型,已被弃用并显示警告。受影响的操作示例有:

  • ser.fillna('foo', inplace=True)

  • ser.where(ser.isna(), 'foo', inplace=True)

  • ser.iloc[indexer] = 'foo'

  • ser.loc[indexer] = 'foo'

  • df.iloc[indexer, 0] = 'foo'

  • df.loc[indexer, 'a'] = 'foo'

  • ser[indexer] = 'foo'

其中 ser 是一个 Seriesdf 是一个 DataFrame,而 indexer 可以是一个切片、一个掩码、一个单值、一个值列表或数组,或任何其他允许的索引器。

在未来的版本中,这些将引发错误,你应该首先转换为通用数据类型。

以前的行为:

In [1]: ser = pd.Series([1, 2, 3])

In [2]: ser
Out[2]:
0    1
1    2
2    3
dtype: int64

In [3]: ser[0] = 'not an int64'

In [4]: ser
Out[4]:
0    not an int64
1               2
2               3
dtype: object

新行为:

In [1]: ser = pd.Series([1, 2, 3])

In [2]: ser
Out[2]:
0    1
1    2
2    3
dtype: int64

In [3]: ser[0] = 'not an int64'
FutureWarning:
  Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas.
  Value 'not an int64' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.

In [4]: ser
Out[4]:
0    not an int64
1               2
2               3
dtype: object

为了保持当前的行为,在上述情况下,你可以先将 ser 转换为 object dtype:

In [21]: ser = pd.Series([1, 2, 3])

In [22]: ser = ser.astype('object')

In [23]: ser[0] = 'not an int64'

In [24]: ser
Out[24]: 
0    not an int64
1               2
2               3
dtype: object

根据使用情况,可能更适合转换为不同的数据类型。例如,在下面,我们转换为 float64

In [25]: ser = pd.Series([1, 2, 3])

In [26]: ser = ser.astype('float64')

In [27]: ser[0] = 1.1

In [28]: ser
Out[28]: 
0    1.1
1    2.0
2    3.0
dtype: float64

欲了解更多信息,请参阅 https://pandas.pydata.org/pdeps/0006-ban-upcasting.html

不推荐使用混合时区解析日期时间#

使用混合时区解析日期时间是已弃用的,除非用户传递 utc=Trueto_datetime() (GH 50887),否则会显示警告。

以前的行为:

In [7]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]

In [8]:  pd.to_datetime(data, utc=False)
Out[8]:
Index([2020-01-01 00:00:00+06:00, 2020-01-01 00:00:00+01:00], dtype='object')

新行为:

In [9]: pd.to_datetime(data, utc=False)
FutureWarning:
  In a future version of pandas, parsing datetimes with mixed time zones will raise
  a warning unless `utc=True`. Please specify `utc=True` to opt in to the new behaviour
  and silence this warning. To create a `Series` with mixed offsets and `object` dtype,
  please use `apply` and `datetime.datetime.strptime`.
Index([2020-01-01 00:00:00+06:00, 2020-01-01 00:00:00+01:00], dtype='object')

为了消除此警告并在未来版本的 pandas 中避免错误,请指定 utc=True

In [29]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]

In [30]: pd.to_datetime(data, utc=True)
Out[30]: DatetimeIndex(['2019-12-31 18:00:00+00:00', '2019-12-31 23:00:00+00:00'], dtype='datetime64[s, UTC]', freq=None)

要创建一个包含混合偏移量和 object 数据类型的 Series ,请使用 applydatetime.datetime.strptime

In [31]: import datetime as dt

In [32]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]

In [33]: pd.Series(data).apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S%z'))
Out[33]: 
0    2020-01-01 00:00:00+06:00
1    2020-01-01 00:00:00+01:00
dtype: object

其他弃用#

性能提升#

错误修复#

Categorical#

Datetimelike#

  • DatetimeIndex.map() 使用 na_action="ignore" 现在按预期工作 (GH 51644)

  • DatetimeIndex.slice_indexer() 现在对于非单调索引,如果任何一个切片边界不在索引中,则会引发 KeyError;此行为之前已被弃用,但处理不一致 (GH 53983)

  • DateOffset 中的一个错误,当将 DateOffset 对象乘以一个常数时,其行为不一致 (GH 47953)

  • freq 是一个包含 nanosecondsDateOffset 时,date_range() 中的 Bug (GH 46877)

  • 在将包含 PyArrow 时间戳的 arrays.ArrowExtensionArraySeriesDataFrame 转换为 numpy 日期时间时存在错误 (GH 52545)

  • DatetimeArray.map()DatetimeIndex.map() 中的错误,其中提供的可调用对象以数组方式操作而不是元素方式操作 (GH 51977)

  • DataFrame.to_sql() 中出现的错误,对于 PyArrow 支持的类似日期的数据类型引发 ValueError (GH 53854)

  • Timestamp.date(), Timestamp.isocalendar(), Timestamp.timetuple(), 和 Timestamp.toordinal() 中的错误对于 Python 标准库的 datetime 模块不支持的输入返回了不正确的结果 (GH 53668)

  • Timestamp.round() 中存在一个错误,当值接近实现边界时,返回不正确的结果而不是引发 OutOfBoundsDatetime (GH 51494)

  • 从 datetime 或 timedelta 标量构造 SeriesDataFrame 时总是推断纳秒分辨率,而不是从输入推断 (GH 52212)

  • 从表示时间的字符串构造 Timestamp 时没有推断出错误的单位 (GH 54097) 的错误

  • 使用 ts_input=pd.NA 构造 Timestamp 时引发 TypeError 的错误 (GH 45481)

  • 解析带有工作日但没有日期的日期时间字符串时出现错误,例如“2023 Sept Thu”,错误地引发 AttributeError 而不是 ValueError (GH 52659)

  • 当 dtype 是具有非纳秒分辨率的时区感知 datetime 时,Series 的 repr 中的 Bug 引发 OutOfBoundsDatetime (GH 54623)

Timedelta#

  • TimedeltaIndex 的除法或乘法中的错误导致 .freq 为 “0 Days” 而不是 None (GH 51575)

  • Timedelta 中与 NumPy timedelta64 对象相关的错误未能正确引发 ValueError (GH 52806)

  • 在将包含 pyarrow.durationArrowDtypeSeriesDataFrame 转换为 NumPy timedelta64 时出现错误 (GH 54298)

  • Timedelta.__hash__() 中的错误,在某些较大的秒分辨率值上引发 OutOfBoundsTimedelta (GH 54037)

  • 在接近实现边界值的情况下,Timedelta.round() 中的错误返回不正确的结果,而不是引发 OutOfBoundsTimedelta (GH 51494)

  • Bug in TimedeltaIndex.map() with na_action="ignore" (GH 51644)

  • arrays.TimedeltaArray.map()TimedeltaIndex.map() 中的错误,其中提供的可调用对象以数组方式操作而不是元素方式操作 (GH 51977)

时区#

  • infer_freq() 中存在的错误,对于时区感知的 Series 时间戳会引发 TypeError (GH 52456)

  • DatetimeTZDtype.base() 中的错误,总是返回一个具有纳秒分辨率的 NumPy dtype (GH 52705)

Numeric#

转换#

字符串#

Interval#

索引#

  • 在将 DataFrame 设置到重复列时,DataFrame.__setitem__() 中的错误会丢失 dtype (GH 53143)

  • 在使用布尔掩码的 DataFrame.__setitem__() 和混合非数字数据类型且值不是 NaNDataFrame.putmask() 时,错误地引发 TypeError 的错误 (GH 53291)

  • 当仅使用 nan 作为唯一元素时,DataFrame.iloc() 中的错误 (GH 52234)

  • Series.loc() 中存在一个错误,当在 object dtype 的 Series 的预定义索引处分配 Series 时,会将 Series 转换为 np.dnarray (GH 48933)

缺失#

MultiIndex#

I/O#

周期#

  • PeriodDtype 构造函数在未传递参数或传递 None 时未能引发 TypeError 的错误 (GH 27388)

  • PeriodDtype 构造函数中的错误,对于不同的 DateOffset freq 输入返回相同的 normalize (GH 24121)

  • 在传递无效类型时,PeriodDtype 构造函数引发 ValueError 而不是 TypeError 的错误 (GH 51790)

  • PeriodDtype 中的一个错误,当对象被删除时可能仍然保持活动状态 (GH 54184)

  • read_csv() 中的错误,未将空字符串作为空值处理,使用 engine="pyarrow" (GH 52087)

  • read_csv() 中存在一个错误,当使用 engine="pyarrow" 时,返回的是 object 数据类型的列,而不是 float64 数据类型的列,这些列在 engine="pyarrow" 下全是空值 (GH 52087)

  • Period.now() 中存在一个错误,不接受 freq 参数作为关键字参数 (GH 53369)

  • Bug in PeriodIndex.map() with na_action="ignore" (GH 51644) 的中文翻译为:

  • arrays.PeriodArray.map()PeriodIndex.map() 中的错误,其中提供的可调用对象以数组方式操作而不是元素方式操作 (GH 51977)

  • 在错误地允许使用 CustomBusinessDay freq 构建 PeriodPeriodDtype 的错误;请改用 BusinessDay (GH 52534)

绘图#

分组/重采样/滚动#

Reshaping#

Sparse#

  • SparseDtype 构造函数在给定其子类型的不兼容 dtype 时未能引发 TypeError 的错误,该子类型必须是 NumPy dtype (GH 53160)

  • arrays.SparseArray.map() 中的错误允许填充值包含在稀疏值中 (GH 52095)

ExtensionArray#

  • ArrowStringArray 构造函数中的错误在处理字典类型的字符串时会引发 ValueError (GH 54074)

  • DataFrame 构造函数中的错误,当在字典中给出时,未复制具有扩展数据类型的 Series (GH 53744)

  • ArrowExtensionArray 中的错误,将 pandas 非纳秒时间对象从非零值转换为零值 (GH 53171)

  • Series.quantile() 中,PyArrow 时间类型引发 ArrowInvalid 的错误 (GH 52678)

  • Series.rank() 中存在一个错误,对于 Float64 数据类型的小值返回了错误的顺序 (GH 52471)

  • 在包含 NA 值的布尔 ArrowDtypeSeries.unique() 的错误 (GH 54667)

  • __iter__()__getitem__() 中返回非纳秒 dtypes 的 python datetime 和 timedelta 对象的 Bug (GH 53326)

  • factorize() 中的错误,对于包含多个块的 pyarrow.dictionary 类型的 pyarrow.chunked_array 返回了不正确的唯一值 (GH 54844)

  • 当传递一个 ExtensionArray 子类给 dtype 关键字时出现错误。现在这将引发一个 UserWarning 以鼓励传递一个实例 (GH 31356, GH 54592)

  • 当某一列具有带有 pyarrow.ExtensionDtypeArrowDtype 时,DataFrame repr 无法工作的错误 (GH 54063)

  • 在 masked ExtensionDtypes 的 __from_arrow__ 方法(例如 Float64Dtype, BooleanDtype)中存在一个错误,该方法不接受类型为 pyarrow.null() 的 PyArrow 数组 (GH 52223)

Styler#

  • Styler 的子类中调用被重写的方法时,Styler._copy() 中的错误 (GH 52728)

元数据#

其他#

贡献者#

总共有266人为此版本贡献了补丁。名字后面带有“+”的人是第一次贡献补丁。

  • AG +

  • Aarni Koskela

  • Adrian D’Alessandro +

  • Adrien RUAULT +

  • Ahmad +

  • Aidos Kanapyanov +

  • Alex Malins

  • Alexander Seiler +

  • Ali Asgar +

  • Allison Kwan

  • Amanda Bizzinotto +

  • Andres Algaba +

  • Angela Seo +

  • Anirudh Hegde +

  • Antony Evmorfopoulos +

  • Anushka Bishnoi

  • ArnaudChanoine +

  • Artem Vorobyev +

  • Arya Sarkar +

  • Ashwin Srinath

  • Austin Au-Yeung +

  • Austin Burnett +

  • Bear +

  • Ben Mangold +

  • Bernardo Gameiro +

  • Boyd Kane +

  • Brayan Alexander Muñoz B +

  • Brock

  • Chetan0402 +

  • Chris Carini

  • ChristofKaufmann

  • Clark-W +

  • Conrad Mcgee Stocks

  • Corrie Bartelheimer +

  • Coulton Theuer +

  • D067751 +

  • Daniel Isaac

  • Daniele Nicolodi +

  • David Samuel +

  • David Seifert +

  • Dea Leon +

  • Dea María Léon

  • Deepyaman Datta

  • Denis Sapozhnikov +

  • Dharani Akurathi +

  • DimiGrammatikakis +

  • Dirk Ulbricht +

  • Dmitry Shemetov +

  • Dominik Berger

  • Efkan S. Goktepe +

  • Ege Özgüroğlu

  • Eli Schwartz

  • Erdi +

  • Fabrizio Primerano +

  • Facundo Batista +

  • Fangchen Li

  • Felipe Maion +

  • Francis +

  • Future Programmer +

  • Gabriel Kabbe +

  • Gaétan Ramet +

  • Gianluca Ficarelli

  • Godwill Agbehonou +

  • Guillaume Lemaitre

  • Guo Ci

  • Gustavo Vargas +

  • Hamidreza Sanaee +

  • HappyHorse +

  • Harald Husum +

  • Hugo van Kemenade

  • Ido Ronen +

  • Irv Lustig

  • JHM Darbyshire

  • JHM Darbyshire (iMac)

  • JJ +

  • Jarrod Millman

  • Jay +

  • Jeff Reback

  • Jessica Greene +

  • Jiawei Zhang +

  • Jinli Xiao +

  • Joanna Ge +

  • Jona Sassenhagen +

  • Jonas Haag

  • Joris Van den Bossche

  • Joshua Shew +

  • Julian Badillo

  • Julian Ortiz +

  • Julien Palard +

  • Justin Tyson +

  • Justus Magin

  • Kabiir Krishna +

  • Kang Su Min

  • Ketu Patel +

  • Kevin +

  • Kevin Anderson

  • Kevin Jan Anker

  • Kevin Klein +

  • Kevin Sheppard

  • Kostya Farber

  • LM +

  • Lars Lien Ankile +

  • Lawrence Mitchell

  • Liwei Cai +

  • Loic Diridollou

  • Luciana Solorzano +

  • Luke Manley

  • Lumberbot (aka Jack)

  • Marat Kopytjuk +

  • Marc Garcia

  • Marco Edward Gorelli

  • MarcoGorelli

  • Maria Telenczuk +

  • MarvinGravert +

  • Mateusz Sokół +

  • Matt Richards

  • Matthew Barber +

  • Matthew Roeschke

  • Matus Valo +

  • Mia Reimer +

  • Michael Terry +

  • Michael Tiemann +

  • Milad Maani Jou +

  • Miles Cranmer +

  • MirijaH +

  • Miyuu +

  • Natalia Mokeeva

  • Nathan Goldbaum +

  • Nicklaus Roach +

  • Nicolas Camenisch +

  • Nikolay Boev +

  • Nirav

  • Nishu Choudhary

  • Noa Tamir

  • Noy Hanan +

  • Numan +

  • Numan Ijaz +

  • Omar Elbaz +

  • Pandas Development Team

  • Parfait Gasana

  • Parthi

  • Patrick Hoefler

  • Patrick Schleiter +

  • Pawel Kranzberg +

  • Philip

  • Philip Meier +

  • Pranav Saibhushan Ravuri

  • PrathumP +

  • Rahul Siloniya +

  • Rajasvi Vinayak +

  • Rajat Subhra Mukherjee +

  • Ralf Gommers

  • RaphSku

  • Rebecca Chen +

  • Renato Cotrim Maciel +

  • Reza (Milad) Maanijou +

  • Richard Shadrach

  • Rithik Reddy +

  • Robert Luce +

  • Ronalido +

  • Rylie Wei +

  • SOUMYADIP MAL +

  • Sanjith Chockan +

  • Sayed Qaiser Ali +

  • Scott Harp +

  • Se +

  • Shashwat Agrawal

  • Simar Bassi +

  • Simon Brugman +

  • Simon Hawkins

  • Simon Høxbro Hansen

  • Snorf Yang +

  • Sortofamudkip +

  • Stefan Krawczyk

  • Stefanie Molin

  • Stefanie Senger

  • Stelios Petrakis +

  • Stijn Van Hoey

  • Sven

  • Sylvain MARIE

  • Sylvain Marié

  • Terji Petersen

  • Thierry Moisan

  • Thomas

  • Thomas A Caswell

  • Thomas Grainger

  • Thomas Li

  • Thomas Vranken +

  • Tianye Song +

  • Tim Hoffmann

  • Tim Loderhose +

  • Tim Swast

  • Timon Jurschitsch +

  • Tolker-KU +

  • Tomas Pavlik +

  • Toroi +

  • Torsten Wörtwein

  • Travis Gibbs +

  • Umberto Fasci +

  • Valerii +

  • VanMyHu +

  • Victor Momodu +

  • Vijay Vaidyanathan +

  • VomV +

  • William Andrea

  • William Ayd

  • Wolf Behrenhoff +

  • Xiao Yuan

  • Yao Xiao

  • Yasin Tatar

  • Yaxin Li +

  • Yi Wei +

  • Yulia +

  • Yusharth Singh +

  • Zach Breger +

  • Zhengbo Wang

  • abokey1 +

  • ahmad2901 +

  • assafam +

  • auderson

  • august-tengland +

  • bunardsheng +

  • cmmck +

  • cnguyen-03 +

  • coco +

  • dependabot[bot]

  • giplessis +

  • github-actions[bot]

  • gmaiwald +

  • gmollard +

  • jbrockmendel

  • kathleenhang

  • kevx82 +

  • lia2710 +

  • liang3zy22 +

  • ltartaro +

  • lusolorz +

  • m-ganko +

  • mKlepsch +

  • mattkeanny +

  • mrastgoo +

  • nabdoni +

  • omar-elbaz +

  • paulreece +

  • penelopeysm +

  • potap75 +

  • pre-commit-ci[bot] +

  • raanasn +

  • raj-thapa +

  • ramvikrams +

  • rebecca-palmer

  • reddyrg1 +

  • rmhowe425 +

  • segatrade +

  • shteken +

  • sweisss +

  • taytzehao

  • tntmatthews +

  • tpaxman +

  • tzehaoo +

  • v-mcoutinho +

  • wcgonzal +

  • yonashub

  • yusharth +

  • Ádám Lippai

  • Štěpán Műller +