1.3.0 版本新特性 (2021年7月2日)#
以下是 pandas 1.3.0 中的更改。有关完整的更改日志,包括其他版本的 pandas,请参阅发行说明。
警告
读取新的 Excel 2007+ (.xlsx
) 文件时,read_excel()
的默认参数 engine=None
现在将在选项 io.excel.xlsx.reader
设置为 "auto"
的所有情况下使用 openpyxl 引擎。之前,有些情况下会改用 xlrd 引擎。有关此更改的背景信息,请参阅1.2.0 版本新特性。
改进#
读取 csv 或 json 文件时自定义 HTTP(s) 头部#
当从 fsspec 未处理的远程 URL(例如 HTTP 和 HTTPS)读取时,传递给 storage_options
的字典将用于创建请求中包含的头部。这可用于控制 User-Agent 头部或发送其他自定义头部(GH 36688)。例如:
In [1]: headers = {"User-Agent": "pandas"}
In [2]: df = pd.read_csv(
...: "https://download.bls.gov/pub/time.series/cu/cu.item",
...: sep="\t",
...: storage_options=headers
...: )
读写 XML 文档#
我们添加了 I/O 支持,可以使用 read_xml()
和 DataFrame.to_xml()
读取和渲染 XML 文档的浅层版本。使用 lxml 作为解析器,支持 XPath 1.0 和 XSLT 1.0。(GH 27554)
In [1]: xml = """<?xml version='1.0' encoding='utf-8'?>
...: <data>
...: <row>
...: <shape>square</shape>
...: <degrees>360</degrees>
...: <sides>4.0</sides>
...: </row>
...: <row>
...: <shape>circle</shape>
...: <degrees>360</degrees>
...: <sides/>
...: </row>
...: <row>
...: <shape>triangle</shape>
...: <degrees>180</degrees>
...: <sides>3.0</sides>
...: </row>
...: </data>"""
In [2]: df = pd.read_xml(xml)
In [3]: df
Out[3]:
shape degrees sides
0 square 360 4.0
1 circle 360 NaN
2 triangle 180 3.0
In [4]: df.to_xml()
Out[4]:
<?xml version='1.0' encoding='utf-8'?>
<data>
<row>
<index>0</index>
<shape>square</shape>
<degrees>360</degrees>
<sides>4.0</sides>
</row>
<row>
<index>1</index>
<shape>circle</shape>
<degrees>360</degrees>
<sides/>
</row>
<row>
<index>2</index>
<shape>triangle</shape>
<degrees>180</degrees>
<sides>3.0</sides>
</row>
</data>
更多信息请参见用户指南中关于 IO 工具的编写 XML章节。
Styler 改进#
我们对 Styler
进行了一些重点开发。另请参见已经修订和改进的Styler 文档(GH 39720、GH 39317、GH 40493)。
方法
Styler.set_table_styles()
现在可以接受更自然的 CSS 语言作为参数,例如'color:red;'
而不是[('color', 'red')]
(GH 39563)。方法
Styler.highlight_null()
、Styler.highlight_min()
和Styler.highlight_max()
现在允许使用自定义 CSS 高亮显示,而不是默认的背景着色(GH 40242)。
Styler.apply()
现在可以接受在axis=None
时返回ndarray
的函数,使其与axis=0
和axis=1
的行为一致(GH 39359)。当通过
Styler.apply()
或Styler.applymap()
提供了格式不正确的 CSS 时,现在会在渲染时引发错误(GH 39660)。
Styler.format()
现在接受关键字参数escape
,用于可选的 HTML 和 LaTeX 转义(GH 40388、GH 41619)。
Styler.background_gradient()
增加了参数gmap
,用于提供特定的渐变映射以进行着色(GH 22727)。
Styler.clear()
现在也会清除Styler.hidden_index
和Styler.hidden_columns
(GH 40484)。增加了方法
Styler.highlight_between()
(GH 39821)。增加了方法
Styler.highlight_quantile()
(GH 40926)。增加了方法
Styler.text_gradient()
(GH 41098)。增加了方法
Styler.set_tooltips()
以允许悬停工具提示;这可用于增强交互式显示(GH 21266、GH 40284)。为方法
Styler.format()
添加了参数precision
,用于控制浮点数的显示(GH 40134)。
Styler
渲染的 HTML 输出现在遵循 w3 HTML Style Guide(GH 39626)。通过使用新的 styler 选项对索引或列进行单独稀疏化,可以更好地控制显示,这些选项也可通过
option_context()
使用(GH 41142)。添加了选项
styler.render.max_elements
,以避免在样式化大型 DataFrame 时浏览器过载(GH 40712)。增加了方法
Styler.to_latex()
(GH 21673、GH 42320),该方法也允许有限的 CSS 转换(GH 40731)。增加了方法
Styler.to_html()
(GH 13379)。增加了方法
Styler.set_sticky()
,使索引和列头在可滚动的 HTML 框架中永久可见(GH 29072)。
DataFrame 构造函数在使用 dict 时遵守 copy=False
#
当向 DataFrame
传递字典并设置 copy=False
时,将不再进行复制(GH 32960)。
In [1]: arr = np.array([1, 2, 3])
In [2]: df = pd.DataFrame({"A": arr, "B": arr.copy()}, copy=False)
In [3]: df
Out[3]:
A B
0 1 1
1 2 2
2 3 3
df["A"]
仍是 arr
的一个视图
In [4]: arr[0] = 0
In [5]: assert df.iloc[0, 0] == 0
不传递 copy
时的默认行为保持不变,即会进行复制。
PyArrow 支持的字符串数据类型#
我们增强了 StringDtype
,这是一种专门用于字符串数据的扩展类型。(GH 39908)
现在可以为 StringDtype
指定关键字选项 storage
。可以使用 pandas 选项或通过 dtype='string[pyarrow]'
指定 dtype,使 StringArray 由 PyArrow 数组而不是 Python 对象的 NumPy 数组支持。
PyArrow 支持的 StringArray 需要安装 pyarrow 1.0.0 或更高版本。
警告
string[pyarrow]
目前被认为是实验性的。实现和部分 API 可能会在没有警告的情况下更改。
In [6]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype(storage="pyarrow"))
Out[6]:
0 abc
1 <NA>
2 def
dtype: string
您也可以使用别名 "string[pyarrow]"
。
In [7]: s = pd.Series(['abc', None, 'def'], dtype="string[pyarrow]")
In [8]: s
Out[8]:
0 abc
1 <NA>
2 def
dtype: string
您还可以使用 pandas 选项创建由 PyArrow 支持的字符串数组。
In [9]: with pd.option_context("string_storage", "pyarrow"):
...: s = pd.Series(['abc', None, 'def'], dtype="string")
...:
In [10]: s
Out[10]:
0 abc
1 <NA>
2 def
dtype: string
通常的字符串 accessor 方法都可用。在适当的情况下,Series 或 DataFrame 列的返回类型也将是字符串 dtype。
In [11]: s.str.upper()
Out[11]:
0 ABC
1 <NA>
2 DEF
dtype: string
In [12]: s.str.split('b', expand=True).dtypes
Out[12]:
0 string[pyarrow]
1 string[pyarrow]
dtype: object
返回整数的字符串 accessor 方法将返回具有 Int64Dtype
的值
In [13]: s.str.count("a")
Out[13]:
0 1
1 <NA>
2 0
dtype: Int64
居中的 datetime-like 滚动窗口#
在对具有 datetime-like 索引的 DataFrame 和 Series 对象执行滚动计算时,现在可以使用居中的 datetime-like 窗口(GH 38780)。例如:
In [14]: df = pd.DataFrame(
....: {"A": [0, 1, 2, 3, 4]}, index=pd.date_range("2020", periods=5, freq="1D")
....: )
....:
In [15]: df
Out[15]:
A
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
In [16]: df.rolling("2D", center=True).mean()
Out[16]:
A
2020-01-01 0.5
2020-01-02 1.5
2020-01-03 2.5
2020-01-04 3.5
2020-01-05 4.0
其他改进#
DataFrame.rolling()
、Series.rolling()
、DataFrame.expanding()
和Series.expanding()
现在支持带有'table'
选项的method
参数,该选项可以在整个DataFrame
上执行窗口操作。有关性能和功能优势,请参见窗口概述(GH 15095、GH 38995)。ExponentialMovingWindow
现在支持online
方法,可以以在线方式执行mean
计算。参见窗口概述(GH 41673)。增加了
MultiIndex.dtypes()
(GH 37062)。在
DataFrame.resample()
的origin
参数中增加了end
和end_day
选项(GH 37804)。改进了
read_csv()
且engine="c"
时,usecols
和names
不匹配时的错误消息(GH 29042)。read_sql_query()
现在接受dtype
参数,用于根据用户输入转换 SQL 数据库中的列数据(GH 10285)。当未指定
usecols
时,如果头部或给定名称的长度与数据长度不匹配,read_csv()
现在会引发ParserWarning
(GH 21768)。改进了在使用
DataFrame.to_sql()
时从 pandas 到 SQLAlchemy 的整数类型映射(GH 35076)。to_numeric()
现在支持对可空的ExtensionDtype
对象进行 downcasting(向下转换)(GH 33013)。在
MultiIndex.set_names
和MultiIndex.rename
中添加了对 dict-like 名称的支持(GH 20421)。read_excel()
现在可以自动检测 .xlsb 文件和较旧的 .xls 文件(GH 35416、GH 41225)。ExcelWriter
现在接受参数if_sheet_exists
,用于控制写入现有工作表时的追加模式行为(GH 40230)。Rolling.sum()
、Expanding.sum()
、Rolling.mean()
、Expanding.mean()
、ExponentialMovingWindow.mean()
、Rolling.median()
、Expanding.median()
、Rolling.max()
、Expanding.max()
、Rolling.min()
和Expanding.min()
现在支持使用engine
关键字进行 Numba 执行(GH 38895、GH 41267)。DataFrame.apply()
现在可以将 NumPy 一元运算符作为字符串接受,例如df.apply("sqrt")
,这在Series.apply()
中已经支持(GH 39116)。DataFrame.apply()
现在可以将不可调用的 DataFrame 属性作为字符串接受,例如df.apply("size")
,这在Series.apply()
中已经支持(GH 39116)。DataFrame.applymap()
现在可以接受 kwargs,以传递给用户提供的func
(GH 39987)。现在不允许将
DataFrame
索引器传递给iloc
,用于Series.__getitem__()
和DataFrame.__getitem__()
(GH 39004)。Series.apply()
现在可以接受不是列表或字典的类似列表或类似字典的参数,例如ser.apply(np.array(["sum", "mean"]))
,这在DataFrame.apply()
中已经支持(GH 39140)。DataFrame.plot.scatter()
现在可以接受用于参数c
的分类列(GH 12380、GH 31357)。当 Series 具有
MultiIndex
且索引器维度过多时,Series.loc()
现在会引发有用的错误消息(GH 35349)。read_stata()
现在支持从压缩文件中读取数据(GH 26599)。增加了对
FloatingArray
中一元运算符的支持(GH 38749)。RangeIndex
现在可以直接传递range
对象来构造,例如pd.RangeIndex(range(3))
(GH 12067)。Series.round()
和DataFrame.round()
现在支持可空的整数和浮点 dtypes(GH 38844)。read_csv()
和read_json()
暴露了参数encoding_errors
用于控制如何处理编码错误 (GH 39450)DataFrameGroupBy.any()
、SeriesGroupBy.any()
、DataFrameGroupBy.all()
和SeriesGroupBy.all()
对可空数据类型使用 Kleene 逻辑 (GH 37506)DataFrameGroupBy.any()
、SeriesGroupBy.any()
、DataFrameGroupBy.all()
和SeriesGroupBy.all()
对于包含可空数据类型的列返回BooleanDtype
(GH 33449)DataFrameGroupBy.any()
、SeriesGroupBy.any()
、DataFrameGroupBy.all()
和SeriesGroupBy.all()
在包含pd.NA
的object
数据上(即使设置了skipna=True
)引发异常 (GH 37501)DataFrameGroupBy.rank()
和SeriesGroupBy.rank()
现在支持 object-dtype 数据 (GH 38278)使用非 NumPy
ndarray
且包含 NumPy 标量的 Python 可迭代对象作为data
参数构造DataFrame
或Series
时,现在将得到一个精度为 NumPy 标量最大精度的 dtype;当data
是 NumPyndarray
时,这已经是默认行为 (GH 40908)为
pivot_table()
添加关键字参数sort
,允许结果不进行排序 (GH 39143)为
DataFrame.value_counts()
添加关键字参数dropna
,允许对包含NA
值的行进行计数 (GH 41325)Series.replace()
现在尽可能将结果转换为PeriodDtype
,而不是object
dtype (GH 41526)改进了
Rolling
、Expanding
和ExponentialMovingWindow
的corr
和cov
方法中,当other
不是DataFrame
或Series
时的错误消息 (GH 41741)Series.between()
的inclusive
参数现在可以接受left
或right
,以便仅包含左边界或右边界 (GH 40245)DataFrame.explode()
现在支持展开多列。其column
参数现在也接受一个字符串列表或元组列表,以便同时展开多列 (GH 39240)DataFrame.sample()
现在接受ignore_index
参数以在采样后重置索引,类似于DataFrame.drop_duplicates()
和DataFrame.sort_values()
(GH 38581)
显著的 Bug 修复#
这些 Bug 修复可能会导致行为上的显著改变。
Categorical.unique
现在总是保持与原始数据相同的 dtype#
之前,在使用分类数据调用 Categorical.unique()
时,新数组中未使用的类别会被移除,导致新数组的 dtype 与原始数据不同 (GH 18291)
举个例子,假设有
In [17]: dtype = pd.CategoricalDtype(['bad', 'neutral', 'good'], ordered=True)
In [18]: cat = pd.Categorical(['good', 'good', 'bad', 'bad'], dtype=dtype)
In [19]: original = pd.Series(cat)
In [20]: unique = original.unique()
旧的行为:
In [1]: unique
['good', 'bad']
Categories (2, object): ['bad' < 'good']
In [2]: original.dtype == unique.dtype
False
新的行为:
In [21]: unique
Out[21]:
['good', 'bad']
Categories (3, object): ['bad' < 'neutral' < 'good']
In [22]: original.dtype == unique.dtype
Out[22]: True
DataFrame.combine_first()
中保留 dtypes#
DataFrame.combine_first()
现在将保留 dtypes (GH 7509)
In [23]: df1 = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=[0, 1, 2])
In [24]: df1
Out[24]:
A B
0 1 1
1 2 2
2 3 3
In [25]: df2 = pd.DataFrame({"B": [4, 5, 6], "C": [1, 2, 3]}, index=[2, 3, 4])
In [26]: df2
Out[26]:
B C
2 4 1
3 5 2
4 6 3
In [27]: combined = df1.combine_first(df2)
旧的行为:
In [1]: combined.dtypes
Out[2]:
A float64
B float64
C float64
dtype: object
新的行为:
In [28]: combined.dtypes
Out[28]:
A float64
B int64
C float64
dtype: object
Groupby 方法 agg 和 transform 不再改变可调用对象的返回 dtype#
之前,当参数 func
是可调用对象时,方法 DataFrameGroupBy.aggregate()
、SeriesGroupBy.aggregate()
、DataFrameGroupBy.transform()
和 SeriesGroupBy.transform()
可能会转换结果的 dtype,可能导致不期望的结果 (GH 21240)。如果结果是数值类型并且通过 np.allclose
衡量转换回输入 dtype 不改变任何值时,就会发生转换。现在不再发生这种转换。
In [29]: df = pd.DataFrame({'key': [1, 1], 'a': [True, False], 'b': [True, True]})
In [30]: df
Out[30]:
key a b
0 1 True True
1 1 False True
旧的行为:
In [5]: df.groupby('key').agg(lambda x: x.sum())
Out[5]:
a b
key
1 True 2
新的行为:
In [31]: df.groupby('key').agg(lambda x: x.sum())
Out[31]:
a b
key
1 1 2
float
结果 for DataFrameGroupBy.mean()
、DataFrameGroupBy.median()
和 GDataFrameGroupBy.var()
、SeriesGroupBy.mean()
、SeriesGroupBy.median()
和 SeriesGroupBy.var()
#
之前,这些方法的结果 dtype 可能取决于输入值。现在,这些方法将总是返回 float dtype。 (GH 41137)
In [32]: df = pd.DataFrame({'a': [True], 'b': [1], 'c': [1.0]})
旧的行为:
In [5]: df.groupby(df.index).mean()
Out[5]:
a b c
0 True 1 1.0
新的行为:
In [33]: df.groupby(df.index).mean()
Out[33]:
a b c
0 1.0 1.0 1.0
使用 loc
和 iloc
设置值时尝试原地操作#
当使用 loc
或 iloc
设置整列时,pandas 将尝试将值插入现有数据中,而不是创建一个全新的数组。
In [34]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")
In [35]: values = df.values
In [36]: new = np.array([5, 6, 7], dtype="int64")
In [37]: df.loc[[0, 1, 2], "A"] = new
在新旧行为中,values
中的数据都被覆盖,但在旧行为中 df["A"]
的 dtype 改变为 int64
。
旧的行为:
In [1]: df.dtypes
Out[1]:
A int64
dtype: object
In [2]: np.shares_memory(df["A"].values, new)
Out[2]: False
In [3]: np.shares_memory(df["A"].values, values)
Out[3]: False
在 pandas 1.3.0 中,df
继续与 values
共享数据
新的行为:
In [38]: df.dtypes
Out[38]:
A float64
dtype: object
In [39]: np.shares_memory(df["A"], new)
Out[39]: False
In [40]: np.shares_memory(df["A"], values)
Out[40]: True
设置 frame[keys] = values
时永远不进行原地操作#
当使用 frame[keys] = values
设置多列时,新数组将替换这些键对应的现有数组,现有数组*不会*被覆盖 (GH 39510)。因此,这些列将保留 values
的 dtype(s),不会转换为现有数组的 dtype。
In [41]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")
In [42]: df[["A"]] = 5
在旧行为中,5
被转换为 float64
并插入到 df
后面的现有数组中
旧的行为:
In [1]: df.dtypes
Out[1]:
A float64
在新行为中,我们得到一个新数组,并保留一个整数 dtype 的 5
新的行为:
In [43]: df.dtypes
Out[43]:
A int64
dtype: object
向布尔 Series 设置值时保持一致的类型转换#
向 dtype=bool
的 Series
设置非布尔值时,现在会一致地转换为 dtype=object
(GH 38709)
In [1]: orig = pd.Series([True, False])
In [2]: ser = orig.copy()
In [3]: ser.iloc[1] = np.nan
In [4]: ser2 = orig.copy()
In [5]: ser2.iloc[1] = 2.0
旧的行为:
In [1]: ser
Out [1]:
0 1.0
1 NaN
dtype: float64
In [2]:ser2
Out [2]:
0 True
1 2.0
dtype: object
新的行为:
In [1]: ser
Out [1]:
0 True
1 NaN
dtype: object
In [2]:ser2
Out [2]:
0 True
1 2.0
dtype: object
DataFrameGroupBy.rolling 和 SeriesGroupBy.rolling 不再在返回值中包含分组列#
分组列现在将从 groupby.rolling
操作的结果中被移除 (GH 32262)
In [44]: df = pd.DataFrame({"A": [1, 1, 2, 3], "B": [0, 1, 2, 3]})
In [45]: df
Out[45]:
A B
0 1 0
1 1 1
2 2 2
3 3 3
旧的行为:
In [1]: df.groupby("A").rolling(2).sum()
Out[1]:
A B
A
1 0 NaN NaN
1 2.0 1.0
2 2 NaN NaN
3 3 NaN NaN
新的行为:
In [46]: df.groupby("A").rolling(2).sum()
Out[46]:
B
A
1 0 NaN
1 1.0
2 2 NaN
3 3 NaN
移除了滚动方差和标准差中的人为截断#
Rolling.std()
和 Rolling.var()
不再将小于 ~1e-8
和 ~1e-15
的结果人为地截断为零 (GH 37051, GH 40448, GH 39872)。
然而,在对较大的值进行滚动计算时,结果中现在可能存在浮点数误差。
In [47]: s = pd.Series([7, 5, 5, 5])
In [48]: s.rolling(3).var()
Out[48]:
0 NaN
1 NaN
2 1.333333
3 0.000000
dtype: float64
带有 MultiIndex 的 DataFrameGroupBy.rolling 和 SeriesGroupBy.rolling 不再在结果中丢弃级别#
DataFrameGroupBy.rolling()
和 SeriesGroupBy.rolling()
不再在结果中丢弃带有 MultiIndex
的 DataFrame
的级别。这可能导致结果 MultiIndex
中出现感知的级别重复,但此更改恢复了 1.1.3 版本中的行为 (GH 38787, GH 38523)。
In [49]: index = pd.MultiIndex.from_tuples([('idx1', 'idx2')], names=['label1', 'label2'])
In [50]: df = pd.DataFrame({'a': [1], 'b': [2]}, index=index)
In [51]: df
Out[51]:
a b
label1 label2
idx1 idx2 1 2
旧的行为:
In [1]: df.groupby('label1').rolling(1).sum()
Out[1]:
a b
label1
idx1 1.0 2.0
新的行为:
In [52]: df.groupby('label1').rolling(1).sum()
Out[52]:
a b
label1 label1 label2
idx1 idx1 idx2 1.0 2.0
向后不兼容的 API 变更#
提高依赖项的最低版本要求#
某些依赖项的最低支持版本已更新。如果已安装,现在要求
包 |
最低版本 |
必需 |
已变更 |
---|---|---|---|
numpy |
1.17.3 |
X |
X |
pytz |
2017.3 |
X |
|
python-dateutil |
2.7.3 |
X |
|
bottleneck |
1.2.1 |
||
numexpr |
2.7.0 |
X |
|
pytest (dev) |
6.0 |
X |
|
mypy (dev) |
0.812 |
X |
|
setuptools |
38.6.0 |
X |
对于可选库,通常建议使用最新版本。下表列出了 pandas 开发过程中当前正在测试的每个库的最低版本。低于最低测试版本的可选库可能仍然可用,但不被视为支持。
包 |
最低版本 |
已变更 |
---|---|---|
beautifulsoup4 |
4.6.0 |
|
fastparquet |
0.4.0 |
X |
fsspec |
0.7.4 |
|
gcsfs |
0.6.0 |
|
lxml |
4.3.0 |
|
matplotlib |
2.2.3 |
|
numba |
0.46.0 |
|
openpyxl |
3.0.0 |
X |
pyarrow |
0.17.0 |
X |
pymysql |
0.8.1 |
X |
pytables |
3.5.1 |
|
s3fs |
0.4.0 |
|
scipy |
1.2.0 |
|
sqlalchemy |
1.3.0 |
X |
tabulate |
0.8.7 |
X |
xarray |
0.12.0 |
|
xlrd |
1.2.0 |
|
xlsxwriter |
1.0.2 |
|
xlwt |
1.3.0 |
|
pandas-gbq |
0.12.0 |
有关更多信息,请参阅 Dependencies 和 Optional dependencies。
其他 API 变更#
部分初始化(即
categories=None
)的CategoricalDtype
对象将不再与完全初始化的 dtype 对象比较相等 (GH 38516)在
DataFrame
上访问_constructor_expanddim
和在Series
上访问_constructor_sliced
现在会引发AttributeError
。之前引发的是NotImplementedError
(GH 38782)为
DataFrame.to_sql()
添加了新的engine
和**engine_kwargs
参数,以支持未来其他的“SQL 引擎”。目前我们仍然只在底层使用SQLAlchemy
,但计划支持更多引擎,例如 turbodbc (GH 36893)移除了
PeriodIndex
字符串表示中的冗余freq
(GH 41653)对于
ExtensionDtype
子类,ExtensionDtype.construct_array_type()
现在是必需的方法,而不是可选的方法 (GH 24860)对不可哈希的 pandas 对象调用
hash
现在将引发带有内置错误消息(例如unhashable type: 'Series'
)的TypeError
。之前会引发自定义消息,例如'Series' objects are mutable, thus they cannot be hashed
。此外,isinstance(<Series>, abc.collections.Hashable)
现在将返回False
(GH 40013)Styler.from_custom_template()
现在新增了两个模板名称参数,并移除了旧的name
参数,这是因为引入了模板继承以更好地进行解析 (GH 42053)。还需要对 Styler 属性的子类进行修改。
构建#
.pptx
和.pdf
格式的文档不再包含在 wheel 包或源码分发中。(GH 30741)
废弃#
DataFrame reductions 和 DataFrameGroupBy 操作中丢弃无关列的行为已废弃#
在 numeric_only=None
(默认值)的 DataFrame
上调用 reduction 方法(例如 .min
、.max
、.sum
)时,reduction 操作会引发 TypeError
的列会被静默忽略并从结果中丢弃。
此行为已废弃。在未来的版本中,将引发 TypeError
,用户需要在调用函数之前仅选择有效的列。
例如
In [53]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})
In [54]: df
Out[54]:
A B
0 1 2016-01-01
1 2 2016-01-02
2 3 2016-01-03
3 4 2016-01-04
旧的行为:
In [3]: df.prod()
Out[3]:
Out[3]:
A 24
dtype: int64
未来的行为:
In [4]: df.prod()
...
TypeError: 'DatetimeArray' does not implement reduction 'prod'
In [5]: df[["A"]].prod()
Out[5]:
A 24
dtype: int64
类似地,将函数应用于 DataFrameGroupBy
时,函数会引发 TypeError
的列目前会被静默忽略并从结果中丢弃。
此行为已废弃。在未来的版本中,将引发 TypeError
,用户需要在调用函数之前仅选择有效的列。
例如
In [55]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})
In [56]: gb = df.groupby([1, 1, 2, 2])
旧的行为:
In [4]: gb.prod(numeric_only=False)
Out[4]:
A
1 2
2 12
未来的行为:
In [5]: gb.prod(numeric_only=False)
...
TypeError: datetime64 type does not support prod operations
In [6]: gb[["A"]].prod(numeric_only=False)
Out[6]:
A
1 2
2 12
其他废弃#
允许将标量传递给
Categorical
构造函数的行为已废弃 (GH 38433)在构造
CategoricalIndex
时未传递类列表数据的行为已废弃 (GH 38944)Index
构造函数中允许使用特定子类的关键字参数的行为已废弃,请直接使用特定的子类代替 (GH 14093, GH 21311, GH 22315, GH 26974)将 datetimelike (
timedelta64[ns]
,datetime64[ns]
,Datetime64TZDtype
,PeriodDtype
) 的astype()
方法转换为整数 dtypes 的行为已废弃,请改用values.view(...)
(GH 38544)。此废弃在 pandas 1.4.0 中已恢复。MultiIndex.is_lexsorted()
和MultiIndex.lexsort_depth()
已废弃,请改用MultiIndex.is_monotonic_increasing()
(GH 32259)Series.where()
、Series.mask()
、DataFrame.where()
、DataFrame.mask()
中的关键字参数try_cast
已废弃;如果需要,请手动转换结果 (GH 38836)Timestamp
对象与datetime.date
对象的比较已废弃。例如, вместоts <= mydate
使用ts <= pd.Timestamp(mydate)
或ts.date() <= mydate
(GH 36131)Rolling.win_type
返回"freq"
的行为已废弃 (GH 38963)Rolling.is_datetimelike
已废弃 (GH 38963)Series.__setitem__()
和DataFrame.__setitem__()
的DataFrame
索引器已废弃 (GH 39004)ExponentialMovingWindow.vol()
已废弃 (GH 39220)使用
.astype
在datetime64[ns]
dtype 和DatetimeTZDtype
之间进行转换已废弃,并将在未来版本中引发错误,请改用obj.tz_localize
或obj.dt.tz_localize
(GH 38622)在
DataFrame.unstack()
、DataFrame.shift()
、Series.shift()
和DataFrame.reindex()
中使用datetime.date
对象作为fill_value
并将其转换为datetime64
的行为已废弃,请改用pd.Timestamp(dateobj)
(GH 39767)Styler.set_na_rep()
和Styler.set_precision()
已废弃,请优先使用Styler.format()
方法,其中na_rep
为现有参数,precision
为新增参数 (GH 40134, GH 40425)Styler.where()
已废弃,请优先使用Styler.applymap()
的替代形式 (GH 40821)废弃了在
Series.transform()
和DataFrame.transform()
中,当func
为列表状或字典状且引发除TypeError
以外的任何异常时,允许部分失败的行为;在未来的版本中,func
引发除TypeError
以外的任何异常将导致异常被抛出 (GH 40211)废弃了
read_csv()
和read_table()
中的参数error_bad_lines
和warn_bad_lines
,改用参数on_bad_lines
(GH 15122)废弃了在
DataFrame
构造函数中对np.ma.mrecords.MaskedRecords
的支持,改用传递{name: data[name] for name in data.dtype.names}
(GH 40363)废弃了在不同层级数量上使用
merge()
、DataFrame.merge()
和DataFrame.join()
(GH 34862)废弃了在
ExcelWriter
中使用**kwargs
;改用关键字参数engine_kwargs
(GH 40430)废弃了用于
DataFrame
和Series
聚合的level
关键字;改用 groupby (GH 39983)废弃了
Categorical.remove_categories()
、Categorical.add_categories()
、Categorical.reorder_categories()
、Categorical.rename_categories()
、Categorical.set_categories()
的inplace
参数,并将在未来版本中移除 (GH 37643)废弃了设置
Categorical._codes
,改为创建带有所需 codes 的新Categorical
(GH 40606)废弃了
read_excel()
和ExcelFile.parse()
中的可选参数convert_float
(GH 41127)废弃了
DatetimeIndex.union()
处理混合时区的行为;在未来版本中,两者都将转换为 UTC 而非 object dtype (GH 39328)废弃了对
engine="c"
的read_csv()
使用带有越界索引的usecols
(GH 25623)废弃了在
DataFrame
构造函数中,对第一个元素是 Categorical 的列表进行特殊处理;改为传递如pd.DataFrame({col: categorical, ...})
的形式 (GH 38845)废弃了在传递了
dtype
但数据无法转换为该 dtype 时DataFrame
构造函数的行为。在未来版本中,这将会引发异常而非被静默忽略 (GH 24435)废弃了
Timestamp.freq
属性。对于使用它的属性(is_month_start
、is_month_end
、is_quarter_start
、is_quarter_end
、is_year_start
、is_year_end
),当有freq
时,例如使用freq.is_month_start(ts)
(GH 15146)废弃了使用
DatetimeTZDtype
数据和datetime64[ns]
dtype 构造Series
或DataFrame
。改用Series(data).dt.tz_localize(None)
(GH 41555, GH 33401)废弃了使用大整数值和小整数 dtype 构造
Series
时静默溢出的行为;改用Series(data).astype(dtype)
(GH 41734)废弃了使用浮点数据和整数 dtype 构造
DataFrame
时即使损失数据也进行转换的行为;在未来版本中,这将保持浮点类型,与Series
行为一致 (GH 41770)废弃了在构造
Series
时,当传递包含字符串的数据且未传递dtype
时,推断timedelta64[ns]
、datetime64[ns]
或DatetimeTZDtype
dtype 的行为 (GH 33558)在未来版本中,使用
datetime64[ns]
数据和DatetimeTZDtype
构造Series
或DataFrame
时,将把数据视为挂钟时间而非 UTC 时间(与 DatetimeIndex 行为一致)。要将数据视为 UTC 时间,请使用pd.Series(data).dt.tz_localize("UTC").dt.tz_convert(dtype.tz)
或pd.Series(data.view("int64"), dtype=dtype)
(GH 33401)废弃了将列表作为
key
传递给DataFrame.xs()
和Series.xs()
(GH 41760)废弃了
Series.between()
中inclusive
的布尔参数,以便将{"left", "right", "neither", "both"}
作为标准参数值 (GH 40628)废弃了以下所有函数/方法将参数作为位置参数传递的行为,注意例外情况 (GH 41485)
concat()
(除了objs
)read_csv()
(除了filepath_or_buffer
)read_table()
(除了filepath_or_buffer
)DataFrame.clip()
和Series.clip()
(除了upper
和lower
)DataFrame.drop_duplicates()
(除了subset
)、Series.drop_duplicates()
、Index.drop_duplicates()
和MultiIndex.drop_duplicates()
DataFrame.drop()
(除了labels
) 和Series.drop()
DataFrame.ffill()
、Series.ffill()
、DataFrame.bfill()
和Series.bfill()
DataFrame.fillna()
和Series.fillna()
(除了value
)DataFrame.interpolate()
和Series.interpolate()
(除了method
)DataFrame.mask()
和Series.mask()
(除了cond
和other
)DataFrame.reset_index()
(除了level
) 和Series.reset_index()
DataFrame.set_axis()
和Series.set_axis()
(除了labels
)DataFrame.set_index()
(除了keys
)DataFrame.sort_values()
(除了by
) 和Series.sort_values()
DataFrame.where()
和Series.where()
(除了cond
和other
)Index.set_names()
和MultiIndex.set_names()
(除了names
)MultiIndex.codes()
(除了codes
)MultiIndex.set_levels()
(除了levels
)Resampler.interpolate()
(除了method
)
性能提升#
IntervalIndex.isin()
的性能提升 (GH 38353)Series.mean()
对于可空数据类型的性能提升 (GH 34814)Series.isin()
对于可空数据类型的性能提升 (GH 38340)DataFrame.fillna()
使用method="pad"
或method="backfill"
对于可空浮点和可空整数 dtype 的性能提升 (GH 39953)DataFrame.corr()
使用method=kendall
的性能提升 (GH 28329)DataFrame.corr()
使用method=spearman
的性能提升 (GH 40956, GH 41885)Rolling.corr()
和Rolling.cov()
的性能提升 (GH 39388)RollingGroupby.corr()
、ExpandingGroupby.corr()
和ExpandingGroupby.cov()
的性能提升 (GH 39591)json_normalize()
对于基本情况(包括分隔符)的性能提升 (GH 40035 GH 15621)ExpandingGroupby
聚合方法的性能提升 (GH 39664)Styler
的性能提升,渲染时间减少了 50% 以上,现在与DataFrame.to_html()
相当 (GH 39972 GH 39952, GH 40425)方法
Styler.set_td_classes()
的性能现在与Styler.apply()
和Styler.applymap()
相当,甚至在某些情况下更好 (GH 40453)ExponentialMovingWindow.mean()
使用times
的性能提升 (GH 39784)在需要 Python 回退实现时,
DataFrameGroupBy.apply()
和SeriesGroupBy.apply()
的性能提升 (GH 40176)将 PyArrow 布尔数组转换为 pandas 可空布尔数组的性能提升 (GH 41051)
对于类型为
CategoricalDtype
的数据连接性能提升 (GH 40193)DataFrameGroupBy.cummin()
、SeriesGroupBy.cummin()
、DataFrameGroupBy.cummax()
和SeriesGroupBy.cummax()
对于可空数据类型的性能提升 (GH 37493)Series.nunique()
处理 nan 值的性能提升 (GH 40865)DataFrame.transpose()
、Series.unstack()
处理DatetimeTZDtype
的性能提升 (GH 40149)Series.plot()
和DataFrame.plot()
通过入口点惰性加载的性能提升 (GH 41492)
错误修复#
Categorical#
CategoricalIndex
中的 Bug,当传递标量数据时错误地未能引发TypeError
(GH 38614)CategoricalIndex.reindex
中的 Bug,当传递的Index
不是分类类型但其值都是分类标签时失败 (GH 28690)从
date
对象的 object-dtype 数组构造Categorical
时,使用astype
进行往返转换不正确的 Bug (GH 38552)从
ndarray
和CategoricalDtype
构造DataFrame
时出现的 Bug (GH 38857)DataFrame.reindex()
中的一个错误,当新索引包含重复项而旧索引是CategoricalIndex
时,会引发IndexError
(GH 38906)Categorical.fillna()
中的一个错误,当使用非类别的元组进行填充时,带有元组类别的类别会引发NotImplementedError
而不是ValueError
(GH 41914)
日期时间类#
DataFrame
和Series
构造函数中的一个错误,在使用dtype=datetime64[ns]
(或timedelta64[ns]
) 时,有时会丢弃Timestamp
(或Timedelta
)data
的纳秒部分 (GH 38032)DataFrame.first()
和Series.first()
中的一个错误,当偏移量为一个月且第一天是该月的最后一天时,返回不正确的结果 (GH 29623)构造
DataFrame
或Series
时,datetime64
数据与timedelta64
dtype 不匹配(或反之),未能引发TypeError
的一个错误 (GH 38575, GH 38764, GH 38792)构造
Series
或DataFrame
时,datetime
对象超出datetime64[ns]
dtype 的范围,或timedelta
对象超出timedelta64[ns]
dtype 的范围时的一个错误 (GH 38792, GH 38965)DatetimeIndex.intersection()
,DatetimeIndex.symmetric_difference()
,PeriodIndex.intersection()
,PeriodIndex.symmetric_difference()
中的一个错误,与CategoricalIndex
操作时总是返回 object-dtype (GH 38741)DatetimeIndex.intersection()
中的一个错误,对于n != 1
的非 Tick 频率给出不正确的结果 (GH 42104)Series.where()
中的一个错误,不正确地将datetime64
值强制转换为int64
(GH 37682)Categorical
中的一个错误,不正确地将datetime
对象类型转换为Timestamp
(GH 38878)Timestamp
对象与纳秒datetime64
实现边界附近的datetime64
对象之间的比较错误 (GH 39221)Timestamp.round()
,Timestamp.floor()
,Timestamp.ceil()
中的一个错误,影响接近Timestamp
实现边界的值 (GH 39244)Timedelta.round()
,Timedelta.floor()
,Timedelta.ceil()
中的一个错误,影响接近Timedelta
实现边界的值 (GH 38964)date_range()
中的一个错误,在边缘情况下错误地创建包含NaT
的DatetimeIndex
,而不是引发OutOfBoundsDatetime
(GH 24124)infer_freq()
中的一个错误,如果DatetimeIndex
具有时区并跨越夏令时边界,则无法正确推断出 'H' 频率 (GH 39556)由
DatetimeArray
或TimedeltaArray
支持的Series
中的一个错误,有时未能将其数组的freq
设置为None
(GH 41425)
时间差#
从
np.timedelta64
对象构造Timedelta
时的一个错误,其中非纳秒单位超出了timedelta64[ns]
的范围 (GH 38965)构造
TimedeltaIndex
时的一个错误,错误地接受np.datetime64("NaT")
对象 (GH 39462)TimedeltaIndex
和to_timedelta()
中的一个错误,当传递非纳秒timedelta64
数组时未能引发错误,该数组在转换为timedelta64[ns]
时会溢出 (GH 40008)
时区#
数值#
DataFrame.quantile()
,DataFrame.sort_values()
中的一个错误,导致后续索引行为不正确 (GH 38351)DataFrame.sort_values()
中的一个错误,对于空的by
引发IndexError
(GH 40258)DataFrame.select_dtypes()
中的一个错误,使用include=np.number
会丢弃数值型ExtensionDtype
列 (GH 35340)DataFrame.mode()
和Series.mode()
中的一个错误,对于空输入未保持一致的整数Index
(GH 33321)DataFrame.rank()
中的一个错误,当 DataFrame 包含np.inf
时 (GH 32593)DataFrame.rank()
中的一个错误,当axis=0
且列包含不可比较的类型时引发IndexError
(GH 38932)Series.rank()
,DataFrame.rank()
,DataFrameGroupBy.rank()
和SeriesGroupBy.rank()
中的一个错误,将最小的负int64
值视为缺失值 (GH 32859)DataFrame.select_dtypes()
中的一个错误,在 Windows 和 Linux 上使用include="int"
时行为不同 (GH 36596)DataFrame.apply()
和DataFrame.agg()
中的一个错误,当传递参数func="size"
时,会操作整个DataFrame
而非行或列 (GH 39934)DataFrame.transform()
中的一个错误,当传递字典且列缺失时会引发SpecificationError
;现在将改为引发KeyError
(GH 40004)DataFrameGroupBy.rank()
和SeriesGroupBy.rank()
中的一个错误,当pct=True
且连续组之间存在相等值时给出不正确的结果 (GH 40518)Series.count()
中的一个错误,当参数level=None
时,在 32 位平台上会导致int32
结果 (GH 40908)Series
和DataFrame
中的一个错误,使用方法any
和all
对对象数据进行约减时未返回布尔结果 (GH 12863, GH 35450, GH 27709)Series.clip()
中的一个错误,如果 Series 包含 NA 值且数据类型是可空整数或浮点数,则会失败 (GH 40851)UInt64Index.where()
和UInt64Index.putmask()
中的一个错误,当使用np.int64
dtype 的other
时错误地引发TypeError
(GH 41974)DataFrame.agg()
中的一个错误,当一个或多个聚合函数未能产生结果时,未按提供的聚合函数顺序对聚合轴进行排序 (GH 33634)DataFrame.clip()
中的一个错误,未将缺失值解释为没有阈值 (GH 40420)
转换#
Series.to_dict()
中的一个错误,当orient='records'
时现在返回 Python 原生类型 (GH 25969)Series.view()
和Index.view()
中的一个错误,在日期时间类 (datetime64[ns]
,datetime64[ns, tz]
,timedelta64
,period
) dtypes 之间转换时 (GH 39788)从空的
np.recarray
创建DataFrame
时未能保留原始 dtypes 的一个错误 (GH 40121)StringArray.astype()
中的一个错误,回退到 NumPy 并在转换为dtype='categorical'
时引发错误 (GH 40450)factorize()
中的一个错误,当给定一个数值型 NumPy dtype 低于 int64、uint64 和 float64 的数组时,唯一值未保留其原始 dtype (GH 41132)DataFrame
构造中的一个错误,当字典包含具有ExtensionDtype
的类数组且copy=True
时未能创建副本 (GH 38939)DataFrame
和Series
构造中的一个错误,当使用datetime64[ns]
数据和dtype=object
时,结果是datetime
对象而不是Timestamp
对象 (GH 41599)DataFrame
和Series
构造中的一个错误,当使用timedelta64[ns]
数据和dtype=object
时,结果是np.timedelta64
对象而不是Timedelta
对象 (GH 41599)从包含
Period
或Interval
对象的二维 object-dtypenp.ndarray
构造DataFrame
时未能分别转换为PeriodDtype
或IntervalDtype
的一个错误 (GH 41812)infer_dtype()
中的一个错误,未识别带有 Period dtype 的 Series、Index 或数组 (GH 23553)infer_dtype()
中的一个错误,对一般的ExtensionArray
对象引发错误。现在将返回"unknown-array"
而不是引发错误 (GH 37367)DataFrame.convert_dtypes()
中的一个错误,在空 DataFrame 上调用时错误地引发ValueError
(GH 40393)
字符串#
从
pyarrow.ChunkedArray
转换为StringArray
时出现的错误,原对象包含零个块 (GH 41040)在
Series.replace()
和DataFrame.replace()
方法中,当对StringDType
类型数据进行替换且设置了regex=True
时,替换操作被忽略的错误 (GH 41333, GH 35977)在
Series.str.extract()
中使用StringArray
时,对于空的DataFrame
返回 object dtype 的错误 (GH 41441)在
Series.str.replace()
中,当regex=False
时忽略了case
参数的错误 (GH 41602)
区间#
在
IntervalIndex.intersection()
和IntervalIndex.symmetric_difference()
方法中,与CategoricalIndex
操作时总是返回 object-dtype 的错误 (GH 38653, GH 38741)在
IntervalIndex.intersection()
方法中,当至少一个Index
对象包含在另一对象中也存在的重复项时,返回重复项的错误 (GH 38743)IntervalIndex.union()
,IntervalIndex.intersection()
,IntervalIndex.difference()
和IntervalIndex.symmetric_difference()
现在转换为适当的 dtype,而不是在与另一个不兼容 dtype 的IntervalIndex
操作时引发TypeError
(GH 39267)PeriodIndex.union()
,PeriodIndex.intersection()
,PeriodIndex.symmetric_difference()
,PeriodIndex.difference()
现在转换为 object dtype,而不是在与另一个不兼容 dtype 的PeriodIndex
操作时引发IncompatibleFrequency
(GH 39306)在
IntervalIndex.is_monotonic()
,IntervalIndex.get_loc()
,IntervalIndex.get_indexer_for()
, 和IntervalIndex.__contains__()
方法中,当存在 NA 值时出现的错误 (GH 41831)
索引#
在
Index.union()
和MultiIndex.union()
方法中,当Index
不是单调的或sort
设置为False
时,删除重复Index
值的错误 (GH 36289, GH 31326, GH 40862)在
CategoricalIndex.get_indexer()
方法中,当非唯一时未能引发InvalidIndexError
的错误 (GH 38372)在
IntervalIndex.get_indexer()
方法中,当target
具有CategoricalDtype
且索引和目标都包含 NA 值时出现的错误 (GH 41934)在
Series.loc()
中,当输入使用布尔列表过滤且要设置的值是维度较低的列表时引发ValueError
的错误 (GH 20438)在
DataFrame.__setitem__()
方法中,当向重复列设置多个值时引发ValueError
的错误 (GH 15695)在
DataFrame.loc()
,Series.loc()
,DataFrame.__getitem__()
和Series.__getitem__()
方法中,对于非单调的DatetimeIndex
,使用字符串切片时返回错误元素的错误 (GH 33146)在
DataFrame.reindex()
和Series.reindex()
方法中,对于时区感知的索引,在使用method="ffill"
和method="bfill"
并指定tolerance
时引发TypeError
的错误 (GH 38566)在
DataFrame.reindex()
方法中,当datetime64[ns]
或timedelta64[ns]
的fill_value
需要转换为 object dtype 时,错误地将其转换为整数的错误 (GH 39755)在
DataFrame.__setitem__()
方法中,当使用指定列和一个非空DataFrame
值设置到空的DataFrame
时引发ValueError
的错误 (GH 38831)在
DataFrame.loc.__setitem__()
方法中,当DataFrame
包含重复列时,对唯一列进行操作时引发ValueError
的错误 (GH 38521)在
DataFrame.iloc.__setitem__()
和DataFrame.loc.__setitem__()
方法中,当使用字典值进行设置时,存在混合 dtypes 的错误 (GH 38335)在
Series.loc.__setitem__()
和DataFrame.loc.__setitem__()
方法中,当提供布尔生成器时引发KeyError
的错误 (GH 39614)在
Series.iloc()
和DataFrame.iloc()
方法中,当提供生成器时引发KeyError
的错误 (GH 39614)在
DataFrame.__setitem__()
方法中,当右侧是一个列数错误的DataFrame
时,没有引发ValueError
的错误 (GH 38604)在
Series.__setitem__()
方法中,当使用标量索引器设置Series
时引发ValueError
的错误 (GH 38303)在
DataFrame.loc()
方法中,当作为输入的DataFrame
只有一行时,丢弃MultiIndex
级别的错误 (GH 10521)在
DataFrame.__getitem__()
和Series.__getitem__()
方法中,当使用现有字符串进行切片且Index
具有毫秒时总是引发KeyError
的错误 (GH 33589)在将
timedelta64
或datetime64
值设置到数值型Series
中时,未能转换为 object dtype 的错误 (GH 39086, GH 39619)在将
Interval
值设置到具有不匹配IntervalDtype
的Series
或DataFrame
中时,错误地将新值转换为现有 dtype 的错误 (GH 39120)在将
datetime64
值设置到 integer-dtype 的Series
中时,错误地将 datetime64 值转换为整数的错误 (GH 39266)在将
np.datetime64("NaT")
设置到具有Datetime64TZDtype
的Series
中时,错误地将时区天真值视为时区感知值的错误 (GH 39769)在
Index.get_loc()
方法中,当key=NaN
且指定了method
但NaN
不在Index
中时,没有引发KeyError
的错误 (GH 39382)在
DatetimeIndex.insert()
方法中,当将np.datetime64("NaT")
插入到时区感知索引中时,错误地将时区天真值视为时区感知值的错误 (GH 39769)在
Index.insert()
中,设置无法在现有frame.columns
中容纳的新列时,或在Series.reset_index()
或DataFrame.reset_index()
中,错误地引发异常而不是转换为兼容 dtype 的错误 (GH 39068)在
RangeIndex.append()
方法中,长度为 1 的单个对象被错误拼接的错误 (GH 39401)在
RangeIndex.astype()
方法中,当转换为CategoricalIndex
时,categories 变成了Int64Index
而不是RangeIndex
的错误 (GH 41263)在使用布尔索引器将
numpy.timedelta64
值设置到 object-dtype 的Series
中时出现的错误 (GH 39488)在使用
at
或iat
将数值设置到 boolean-dtypesSeries
中时,未能转换为 object-dtype 的错误 (GH 39582)在
DataFrame.__setitem__()
和DataFrame.iloc.__setitem__()
方法中,当尝试使用行切片进行索引并设置列表作为值时引发ValueError
的错误 (GH 40440)在
DataFrame.loc()
方法中,当在MultiIndex
中找不到键且未完全指定级别时,没有引发KeyError
的错误 (GH 41170)在
DataFrame.loc.__setitem__()
方法中,当使用扩展进行设置时,在扩展轴中的索引包含重复项时错误地引发异常的错误 (GH 40096)在具有
MultiIndex
的DataFrame.loc.__getitem__()
方法中,当至少一个索引列具有 float dtype 且我们检索标量时转换为 float 的错误 (GH 41369)在
DataFrame.loc()
方法中,错误地匹配非布尔索引元素的错误 (GH 20432)在使用
np.nan
对具有CategoricalIndex
的Series
或DataFrame
进行索引时,当存在np.nan
键时错误地引发KeyError
的错误 (GH 41933)在具有
ExtensionDtype
的Series.__delitem__()
方法中,错误地转换为ndarray
的错误 (GH 40386)在具有
CategoricalIndex
的DataFrame.at()
方法中,当传递整数键时返回错误结果的错误 (GH 41846)在
DataFrame.loc()
方法中,如果索引器包含重复项,返回顺序错误的MultiIndex
的错误 (GH 40978)在
DataFrame.__setitem__()
方法中,当使用str
的子类作为列名并配合DatetimeIndex
时引发TypeError
的错误 (GH 37366)在
PeriodIndex.get_loc()
方法中,当给定具有不匹配freq
的Period
时未能引发KeyError
的错误 (GH 41670)使用
.loc.__getitem__
配合UInt64Index
和负整数键时,在某些情况下引发OverflowError
而不是KeyError
,在其他情况下则绕回到正整数的错误 (GH 41777)在
Index.get_indexer()
方法中,在某些情况下,当提供无效的method
,limit
或tolerance
参数时未能引发ValueError
的错误 (GH 41918)当使用无效字符串对具有
TimedeltaIndex
的Series
或DataFrame
进行切片时,引发ValueError
而不是TypeError
的错误 (GH 41821)Index.where()
行为现在与Index.putmask()
行为一致,即index.where(mask, other)
匹配index.putmask(~mask, other)
(GH 39412)
缺失值#
在
Grouper
中未能正确传递dropna
参数的错误;DataFrameGroupBy.transform()
现在为dropna=True
正确处理缺失值 (GH 35612)在
isna()
,Series.isna()
,Index.isna()
,DataFrame.isna()
以及对应的notna
函数中,未能识别Decimal("NaN")
对象的错误 (GH 39409)在
DataFrame.fillna()
方法中,不接受字典作为downcast
关键字参数的错误 (GH 40809)在
isna()
方法中,对于可空类型不返回 mask 副本的错误,导致后续任何 mask 修改都会改变原始数组 (GH 40935)在使用包含
NaN
的 float 数据和 integerdtype
构造DataFrame
时,错误地进行类型转换而不是保留NaN
的错误 (GH 26919)在
Series.isin()
和MultiIndex.isin()
方法中,如果 NaN 值在元组中,未将所有 NaN 视为等价的错误 (GH 41836)
多级索引#
在
DataFrame.drop()
中存在的 bug,当MultiIndex
非唯一且未提供level
时引发TypeError
(GH 36293)在
MultiIndex.intersection()
中存在的 bug,结果中重复出现NaN
(GH 38623)在
MultiIndex.equals()
中存在的 bug,当MultiIndex
包含NaN
且顺序不同时错误地返回True
(GH 38439)在
MultiIndex.intersection()
中存在的 bug,与CategoricalIndex
求交集时始终返回空结果 (GH 38653)在
MultiIndex.difference()
中存在的 bug,当索引包含不可排序条目时错误地引发TypeError
(GH 41915)在
MultiIndex.reindex()
中存在的 bug,当用于空的MultiIndex
且仅索引特定 level 时引发ValueError
(GH 41170)在
MultiIndex.reindex()
中存在的 bug,根据扁平Index
进行 reindexing 时引发TypeError
(GH 41707)
I/O#
在
Index.__repr__()
中存在的 bug,当display.max_seq_items=1
时 (GH 38415)在
read_csv()
中存在的 bug,如果设置了参数decimal
且engine="python"
时无法识别科学计数法 (GH 31920)在
read_csv()
中存在的 bug,将NA
值错误地解释为注释,当NA
确实包含注释字符串时(已修复engine="python"
的此问题)(GH 34002)在
read_csv()
中存在的 bug,当文件没有数据行时,如果存在多个 header 列且指定了index_col
则引发IndexError
(GH 38292)在
read_csv()
中存在的 bug,当engine="python"
时,不接受usecols
的长度与names
不同 (GH 16469)在
read_csv()
中存在的 bug,当engine="python"
时,如果指定了delimiter=","
、usecols
和parse_dates
,返回 object dtype (GH 35873)在
read_csv()
中存在的 bug,当engine="c"
时,如果指定了names
和parse_dates
则引发TypeError
(GH 33699)在
read_clipboard()
和DataFrame.to_clipboard()
中存在的 bug,在 WSL 中不起作用 (GH 38527)允许为
read_sql()
、read_sql_query()
和read_sql_table()
的parse_dates
参数指定自定义错误值 (GH 35185)在
DataFrame.to_hdf()
和Series.to_hdf()
中存在的 bug,当尝试应用于DataFrame
或Series
的子类时引发KeyError
(GH 33748)在
HDFStore.put()
中存在的 bug,当保存非字符串 dtype 的 DataFrame 时引发错误的TypeError
(GH 34274)在
json_normalize()
中存在的 bug,导致生成器对象的第一个元素未包含在返回的 DataFrame 中 (GH 35923)在
read_csv()
中存在的 bug,当列应被解析为日期且engine="python"
指定了usecols
时,将千位分隔符应用于日期列 (GH 39365)在
read_excel()
中存在的 bug,当指定多个 header 和 index 列时,向前填充MultiIndex
名称 (GH 34673)在
read_excel()
中存在的 bug,不遵守set_option()
(GH 34252)在
read_csv()
中存在的 bug,未为可为空的 Boolean dtype 切换true_values
和false_values
(GH 34655)在
read_json()
中存在的 bug,当orient="split"
时未保留数字字符串索引 (GH 28556)read_sql()
在chunksize
非零且查询没有返回结果时,返回一个空的生成器。现在返回一个包含一个空 DataFrame 的生成器 (GH 34411)在
read_hdf()
中存在的 bug,使用where
参数过滤分类字符串列时返回意外的记录 (GH 39189)在
read_sas()
中存在的 bug,当datetimes
为 null 时引发ValueError
(GH 39725)在
read_excel()
中存在的 bug,丢弃单列电子表格中的空值 (GH 39808)在
read_excel()
中存在的 bug,对于某些文件类型加载末尾的空行/列 (GH 41167)在
read_excel()
中存在的 bug,当 excel 文件具有MultiIndex
header 后跟两个空行且没有 index 时引发AttributeError
(GH 40442)在
read_excel()
、read_csv()
、read_table()
、read_fwf()
和read_clipboard()
中存在的 bug,当MultiIndex
header 后跟一个空行且没有 index 时,该空行会被丢弃 (GH 40442)在
DataFrame.to_string()
中存在的 bug,当index=False
时截断列位置错误 (GH 40904)在
DataFrame.to_string()
中存在的 bug,当index=False
时添加一个额外的点并使截断行不对齐 (GH 40904)在
read_orc()
中存在的 bug,始终引发AttributeError
(GH 40918)在
read_csv()
和read_table()
中存在的 bug,如果定义了names
和prefix
则静默忽略prefix
,现在引发ValueError
(GH 39123)在
read_csv()
和read_excel()
中存在的 bug,当mangle_dupe_cols
设置为True
时,不遵守重复列名的 dtype (GH 35211)在
read_csv()
中存在的 bug,如果定义了delimiter
和sep
则静默忽略sep
,现在引发ValueError
(GH 39823)在
read_csv()
和read_table()
中存在的 bug,当之前调用过sys.setprofile
时错误地解释参数 (GH 41069)将 PyArrow 转换为 pandas(例如用于读取 Parquet)时存在的 bug,涉及可为空的 dtypes 以及数据缓冲区大小不是 dtype 大小倍数的 PyArrow 数组 (GH 40896)
在
read_excel()
中存在的 bug,即使用户指定了engine
参数,当 pandas 无法确定文件类型时也会引发错误 (GH 41225)在
read_clipboard()
中存在的 bug,从 excel 文件复制时,如果第一列有 null 值,则值会移动到错误的列 (GH 41108)在
DataFrame.to_hdf()
和Series.to_hdf()
中存在的 bug,当尝试将字符串列附加到不兼容的列时引发TypeError
(GH 41897)
周期#
绘图#
在
plotting.scatter_matrix()
中存在的 bug,当传递 2dax
参数时引发错误 (GH 16253)阻止在 Matplotlib 的
constrained_layout
启用时产生警告 (GH 25261)在
DataFrame.plot()
中存在的 bug,如果函数被重复调用且某些调用使用了yerr
而其他调用没有,则图例中显示错误的颜色 (GH 39522)在
DataFrame.plot()
中存在的 bug,如果函数被重复调用且某些调用使用了secondary_y
而其他调用使用了legend=False
,则图例中显示错误的颜色 (GH 40044)在
DataFrame.plot.box()
中存在的 bug,当选择了dark_background
主题时,绘图的 caps 或 min/max 标记不可见 (GH 40769)
分组/重采样/滑动窗口#
在
DataFrameGroupBy.agg()
和SeriesGroupBy.agg()
中存在的 bug,对PeriodDtype
列进行操作时错误地过度强制转换结果类型 (GH 38254)在
SeriesGroupBy.value_counts()
中存在的 bug,分组的 categorical Series 中未观察到的类别未被统计 (GH 38672)在
SeriesGroupBy.value_counts()
中存在的 bug,在空的 Series 上引发错误 (GH 39172)在
GroupBy.indices()
中存在的 bug,当 groupby 键中存在 null 值时会包含不存在的索引 (GH 9304)修复了
DataFrameGroupBy.sum()
和SeriesGroupBy.sum()
中导致精度损失的 bug,现在使用 Kahan 求和 (GH 38778)修复了
DataFrameGroupBy.cumsum()
、SeriesGroupBy.cumsum()
、DataFrameGroupBy.mean()
和SeriesGroupBy.mean()
中通过使用 Kahan 求和导致精度损失的 bug (GH 38934)在
Resampler.aggregate()
和DataFrame.transform()
中存在的 bug,当缺失的键具有混合 dtype 时,引发TypeError
而不是SpecificationError
(GH 39025)在
DataFrameGroupBy.idxmin()
和DataFrameGroupBy.idxmax()
中存在的 bug,涉及ExtensionDtype
列 (GH 38733)在
Series.resample()
中存在的 bug,当 index 是包含NaT
的PeriodIndex
时会引发错误 (GH 39227)在
RollingGroupby.corr()
和ExpandingGroupby.corr()
中存在的 bug,当提供的other
比每个组更长时,groupby 列返回0
而不是np.nan
(GH 39591)在
ExpandingGroupby.corr()
和ExpandingGroupby.cov()
中存在的 bug,当提供的other
比每个组更长时,返回1
而不是np.nan
(GH 39591)在
DataFrameGroupBy.mean()
、SeriesGroupBy.mean()
、DataFrameGroupBy.median()
、SeriesGroupBy.median()
和DataFrame.pivot_table()
中存在的 bug,未传播元数据 (GH 28283)在
Series.rolling()
和DataFrame.rolling()
中存在的 bug,当 window 是一个 offset 且日期按降序排列时,未正确计算窗口边界 (GH 40002)在空的
Series
或DataFrame
上使用Series.groupby()
和DataFrame.groupby()
时存在的 bug,当直接使用方法idxmax
、idxmin
、mad
、min
、max
、sum
、prod
和skew
,或通过apply
、aggregate
或resample
使用它们时,会丢失 index、columns 和/或数据类型 (GH 26411)在
DataFrameGroupBy.apply()
和SeriesGroupBy.apply()
中存在的 bug,当用于RollingGroupby
对象时,会创建一个MultiIndex
而不是一个Index
(GH 39732)DataFrameGroupBy.sample()
中的错误,当指定了weights
且索引是Int64Index
时会引发错误 (GH 39927)DataFrameGroupBy.aggregate()
和Resampler.aggregate()
中的错误,当传入字典且缺少列时有时会引发SpecificationError
;现在总是改为引发KeyError
(GH 40004)DataFrameGroupBy.sample()
中的错误,计算结果前未应用列选择 (GH 39928)ExponentialMovingWindow
中的错误,调用__getitem__
时,在提供了times
参数的情况下错误地引发了ValueError
(GH 40164)ExponentialMovingWindow
中的错误,调用__getitem__
时未能保留com
、span
、alpha
或halflife
属性 (GH 40164)由于计算不正确,当使用
adjust=False
指定times
时,ExponentialMovingWindow
现在会引发NotImplementedError
(GH 40098)ExponentialMovingWindowGroupby.mean()
中的错误,当engine='numba'
时,times
参数被忽略 (GH 40951)ExponentialMovingWindowGroupby.mean()
中的错误,在存在多个组的情况下使用了错误的时间 (GH 40951)ExponentialMovingWindowGroupby
中的错误,对于非简单(non-trivial)的组,时间向量和值不同步 (GH 40951)Series.asfreq()
和DataFrame.asfreq()
中的错误,当索引未排序时会丢弃行 (GH 39805)DataFrame
的聚合函数中的错误,当给定level
关键字时未遵循numeric_only
参数 (GH 40660)SeriesGroupBy.aggregate()
中的错误,使用用户定义函数聚合具有对象类型Index
的 Series 时,导致Index
形状不正确 (GH 40014)RollingGroupby
中的错误,其中忽略了groupby
中的as_index=False
参数 (GH 39433)DataFrameGroupBy.any()
、SeriesGroupBy.any()
、DataFrameGroupBy.all()
和SeriesGroupBy.all()
中的错误,在使用包含NA
的可为空类型列时会引发ValueError
,即使设置了skipna=True
(GH 40585)DataFrameGroupBy.cummin()
、SeriesGroupBy.cummin()
、DataFrameGroupBy.cummax()
和SeriesGroupBy.cummax()
中的错误,错误地舍入了接近int64
实现边界的整数值 (GH 40767)DataFrameGroupBy.rank()
和SeriesGroupBy.rank()
中的错误,使用可为空的数据类型时错误地引发了TypeError
(GH 41010)DataFrameGroupBy.cummin()
、SeriesGroupBy.cummin()
、DataFrameGroupBy.cummax()
和SeriesGroupBy.cummax()
中的错误,使用可为空的数据类型且在转换为浮点数时数据太大而无法进行往返转换(roundtrip)时,计算结果不正确 (GH 37493)DataFrame.rolling()
中的错误,当计算不稳定时,对于所有NaN
窗口且min_periods=0
的情况,返回的均值为零 (GH 41053)DataFrame.rolling()
中的错误,当计算不稳定时,对于所有NaN
窗口且min_periods=0
的情况,返回的求和不为零 (GH 41053)SeriesGroupBy.agg()
中的错误,在保留顺序的聚合操作中未能保留有序的CategoricalDtype
(GH 41147)DataFrameGroupBy.min()
、SeriesGroupBy.min()
、DataFrameGroupBy.max()
和SeriesGroupBy.max()
中的错误,在使用多个 object-dtype 列且numeric_only=False
时错误地引发了ValueError
(GH 41111)DataFrameGroupBy.rank()
中的错误,在使用 GroupBy 对象的axis=0
和rank
方法的关键字参数axis=1
时出现问题 (GH 41320)DataFrameGroupBy.__getitem__()
中的错误,对于非唯一列,错误地返回了格式错误的SeriesGroupBy
而不是DataFrameGroupBy
(GH 41427)DataFrameGroupBy.transform()
中的错误,对于非唯一列,错误地引发了AttributeError
(GH 41427)Resampler.apply()
中的错误,对于非唯一列,错误地丢弃了重复列 (GH 41445)Series.groupby()
聚合操作中的错误,对于其数据类型无效的聚合(例如,对datetime64[ns]
数据类型使用.prod
),错误地返回了空的Series
而不是引发TypeError
(GH 41342)DataFrameGroupBy
聚合操作中的错误,当没有有效列时,未能正确丢弃对于该聚合具有无效数据类型的列 (GH 41291)DataFrame.rolling.__iter__()
中的错误,其中on
未分配给结果对象的索引 (GH 40373)DataFrameGroupBy.transform()
和DataFrameGroupBy.agg()
中的错误,当使用engine="numba"
时,*args
与用户传入的函数一起被缓存 (GH 41647)DataFrameGroupBy
的方法agg
、transform
、sum
、bfill
、ffill
、pad
、pct_change
、shift
、ohlc
中的错误,它们丢弃了.columns.names
(GH 41497)
重塑#
merge()
中的错误,当存在部分索引且right_index=True
,但在索引之间没有重叠时,执行内连接会引发错误 (GH 33814)DataFrame.unstack()
中的错误,缺少层(levels)导致索引名称不正确 (GH 37510)merge_asof()
中的错误,在使用left_index=True
和right_on
参数时,传播了右侧索引而不是左侧索引 (GH 33463)DataFrame.join()
中的错误,在带有MultiIndex
的 DataFrame 上执行 join 操作时,当两个索引中有一个只有一个级别时,返回了错误的结果 (GH 36909)当合并列为非数值类型时,
merge_asof()
现在会引发ValueError
而不是令人费解的TypeError
(GH 29130)DataFrame.join()
中的错误,当 DataFrame 的MultiIndex
中至少有一个维度的 dtype 是Categorical
且类别未按字母顺序排序时,未正确分配值 (GH 38502)Series.value_counts()
和Series.mode()
现在按原始顺序返回一致的键 (GH 12679, GH 11227 和 GH 39007)DataFrame.stack()
中的错误,未能正确处理MultiIndex
列中的NaN
(GH 39481)DataFrame.apply()
中的错误,当参数func
是字符串,axis=1
,且不支持 axis 参数时,会给出错误的结果;现在改为引发ValueError
(GH 39211)DataFrame.sort_values()
中的错误,当ignore_index=True
时,在按列排序后未正确重塑索引 (GH 39464)DataFrame.append()
中的错误,当组合使用ExtensionDtype
数据类型时,返回了不正确的数据类型 (GH 39454)DataFrame.append()
中的错误,当组合使用datetime64
和timedelta64
数据类型时,返回了不正确的数据类型 (GH 39574)DataFrame.append()
中的错误,将具有MultiIndex
的DataFrame
与其Index
不是MultiIndex
的Series
进行拼接时出现问题 (GH 41707)DataFrame.pivot_table()
中的错误,在对空 DataFrame 操作时,对于单个值返回了MultiIndex
(GH 13483)Index
现在可以传递给numpy.all()
函数 (GH 40180)DataFrame.stack()
中的错误,未在MultiIndex
中保留CategoricalDtype
(GH 36991)to_datetime()
中的错误,当输入序列包含不可哈希(unhashable)的项时会引发错误 (GH 39756)Series.explode()
中的错误,当ignore_index
为True
且值为标量时,保留了索引 (GH 40487)to_datetime()
中的错误,当Series
包含None
和NaT
且元素数量超过 50 时,会引发ValueError
(GH 39882)Series.unstack()
和DataFrame.unstack()
中的错误,当 object-dtype 值包含时区感知(timezone-aware)的 datetime 对象时,错误地引发了TypeError
(GH 41875)DataFrame.melt()
中的错误,当DataFrame
具有重复列并用作value_vars
时,引发了InvalidIndexError
(GH 41951)
稀疏#
DataFrame.sparse.to_coo()
中的错误,当列是数字Index
但不包含0
时,引发了KeyError
(GH 18414)SparseArray.astype()
中的错误,当使用copy=False
从整数数据类型转换为浮点数据类型时,产生不正确的结果 (GH 34456)SparseArray.max()
和SparseArray.min()
中的错误,总是返回空结果 (GH 40921)
扩展数组#
DataFrame.where()
中的错误,当other
是一个具有ExtensionDtype
的 Series 时出现问题 (GH 38729)修复了当底层数据是
ExtensionArray
时,Series.idxmax()
、Series.idxmin()
、Series.argmax()
和Series.argmin()
会失败的错误 (GH 32749, GH 33719, GH 36566)修复了
PandasExtensionDtype
子类的一些属性被错误缓存的错误 (GH 40329)DataFrame.mask()
中存在一个错误,当使用ExtensionDtype
屏蔽 DataFrame 时会引发ValueError
(GH 40941)
Styler#
Styler
中的一个错误,其中方法的subset
参数对某些有效的 MultiIndex 切片会引发错误 (GH 33562)Styler.background_gradient()
中的一个错误,其中未正确确定文本颜色 (GH 39888)Styler.set_table_styles()
中的一个错误,其中table_styles
参数的 CSS 选择器中的多个元素未正确添加 (GH 34061)Styler.where
中的一个错误,其中kwargs
未传递给适用的可调用对象 (GH 40845)
其他#
inspect.getmembers(Series)
不再引发AbstractMethodError
(GH 38782)Series.where()
中的一个错误,当使用数字 dtype 且other=None
时未转换为nan
(GH 39761)assert_series_equal()
、assert_frame_equal()
、assert_index_equal()
和assert_extension_array_equal()
中的一个错误,当属性具有无法识别的 NA 类型时会错误地引发异常 (GH 39461)assert_index_equal()
中的一个错误,当使用exact=True
比较CategoricalIndex
实例与具有Int64Index
和RangeIndex
类别时不会引发异常 (GH 41263)DataFrame.equals()
、Series.equals()
和Index.equals()
中的一个错误,当 object-dtype 包含np.datetime64("NaT")
或np.timedelta64("NaT")
时会出错 (GH 39650)show_versions()
中的一个错误,其中控制台 JSON 输出不是正确的 JSON 格式 (GH 39701)pandas.util.hash_pandas_object()
中的一个错误,当输入对象类型是DataFrame
时无法识别hash_key
、encoding
和categorize
(GH 41404)
贡献者#
共有 251 人为本次发布贡献了补丁。名字旁边带有“+”的人是首次贡献补丁。
Abhishek R +
Ada Draginda
Adam J. Stewart
Adam Turner +
Aidan Feldman +
Ajitesh Singh +
Akshat Jain +
Albert Villanova del Moral
Alexandre Prince-Levasseur +
Andrew Hawyrluk +
Andrew Wieteska
AnglinaBhambra +
Ankush Dua +
Anna Daglis
Ashlan Parker +
Ashwani +
Avinash Pancham
Ayushman Kumar +
BeanNan
Benoît Vinot
Bharat Raghunathan
Bijay Regmi +
Bobin Mathew +
Bogdan Pilyavets +
Brian Hulette +
Brian Sun +
Brock +
Bryan Cutler
Caleb +
Calvin Ho +
Chathura Widanage +
Chinmay Rane +
Chris Lynch
Chris Withers
Christos Petropoulos
Corentin Girard +
DaPy15 +
Damodara Puddu +
Daniel Hrisca
Daniel Saxton
DanielFEvans
Dare Adewumi +
Dave Willmer
David Schlachter +
David-dmh +
Deepang Raval +
Doris Lee +
Dr. Jan-Philip Gehrcke +
DriesS +
Dylan Percy
Erfan Nariman
Eric Leung
EricLeer +
Eve
Fangchen Li
Felix Divo
Florian Jetter
Fred Reiss
GFJ138 +
Gaurav Sheni +
Geoffrey B. Eisenbarth +
Gesa Stupperich +
Griffin Ansel +
Gustavo C. Maciel +
Heidi +
Henry +
Hung-Yi Wu +
Ian Ozsvald +
Irv Lustig
Isaac Chung +
Isaac Virshup
JHM Darbyshire (MBP) +
JHM Darbyshire (iMac) +
Jack Liu +
James Lamb +
Jeet Parekh
Jeff Reback
Jiezheng2018 +
Jody Klymak
Johan Kåhrström +
John McGuigan
Joris Van den Bossche
Jose
JoseNavy
Josh Dimarsky
Josh Friedlander
Joshua Klein +
Julia Signell
Julian Schnitzler +
Kaiqi Dong
Kasim Panjri +
Katie Smith +
Kelly +
Kenil +
Keppler, Kyle +
Kevin Sheppard
Khor Chean Wei +
Kiley Hewitt +
Larry Wong +
Lightyears +
Lucas Holtz +
Lucas Rodés-Guirao
Lucky Sivagurunathan +
Luis Pinto
Maciej Kos +
Marc Garcia
Marco Edward Gorelli +
Marco Gorelli
MarcoGorelli +
Mark Graham
Martin Dengler +
Martin Grigorov +
Marty Rudolf +
Matt Roeschke
Matthew Roeschke
Matthew Zeitlin
Max Bolingbroke
Maxim Ivanov
Maxim Kupfer +
Mayur +
MeeseeksMachine
Micael Jarniac
Michael Hsieh +
Michel de Ruiter +
Mike Roberts +
Miroslav Šedivý
Mohammad Jafar Mashhadi
Morisa Manzella +
Mortada Mehyar
Muktan +
Naveen Agrawal +
Noah
Nofar Mishraki +
Oleh Kozynets
Olga Matoula +
Oli +
Omar Afifi
Omer Ozarslan +
Owen Lamont +
Ozan Öğreden +
Pandas Development Team
Paolo Lammens
Parfait Gasana +
Patrick Hoefler
Paul McCarthy +
Paulo S. Costa +
Pav A
Peter
Pradyumna Rahul +
Punitvara +
QP Hou +
Rahul Chauhan
Rahul Sathanapalli
Richard Shadrach
Robert Bradshaw
Robin to Roxel
Rohit Gupta
Sam Purkis +
Samuel GIFFARD +
Sean M. Law +
Shahar Naveh +
ShaharNaveh +
Shiv Gupta +
Shrey Dixit +
Shudong Yang +
Simon Boehm +
Simon Hawkins
Sioned Baker +
Stefan Mejlgaard +
Steven Pitman +
Steven Schaerer +
Stéphane Guillou +
TLouf +
Tegar D Pratama +
Terji Petersen
Theodoros Nikolaou +
Thomas Dickson
Thomas Li
Thomas Smith
Thomas Yu +
ThomasBlauthQC +
Tim Hoffmann
Tom Augspurger
Torsten Wörtwein
Tyler Reddy
UrielMaD
Uwe L. Korn
Venaturum +
VirosaLi
Vladimir Podolskiy
Vyom Pathak +
WANG Aiyong
Waltteri Koskinen +
Wenjun Si +
William Ayd
Yeshwanth N +
Yuanhao Geng
Zito Relova +
aflah02 +
arredond +
attack68
cdknox +
chinggg +
fathomer +
ftrihardjo +
github-actions[bot] +
gunjan-solanki +
guru kiran
hasan-yaman
i-aki-y +
jbrockmendel
jmholzer +
jordi-crespo +
jotasi +
jreback
juliansmidek +
kylekeppler
lrepiton +
lucasrodes
maroth96 +
mikeronayne +
mlondschien
moink +
morrme
mschmookler +
mzeitlin11
na2 +
nofarmishraki +
partev
patrick
ptype
realead
rhshadrach
rlukevie +
rosagold +
saucoide +
sdementen +
shawnbrown
sstiijn +
stphnlyd +
sukriti1 +
taytzehao
theOehrly +
theodorju +
thordisstella +
tonyyyyip +
tsinggggg +
tushushu +
vangorade +
vladu +
wertha +