1.3.0中的新特性(2021年7月2日)#
这些是Pandas1.3.0中的变化。看见 发行说明 获取完整的更改日志,包括其他版本的Pandas。
警告
阅读新的Excel 2007+时 (.xlsx
)文件,默认参数 engine=None
至 read_excel()
现在将导致使用 openpyxl 在所有情况下,当选项为 io.excel.xlsx.reader
设置为 "auto"
。以前,某些情况下会使用 xlrd 换成了发动机。看见 What's new 1.2.0 了解这一变化的背景。
增强#
读取CSV或JSON文件时的自定义HTTP标头#
当从不是由fsspec处理的远程URL(例如,HTTP和HTTPS)读取时,词典传递到 storage_options
将用于创建请求中包含的标头。这可用于控制User-Agent标头或发送其他自定义标头 (GH36688 )。例如:
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
...: )
...:
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
Input In [2], in <cell line: 1>()
----> 1 df = pd.read_csv(
2 "https://download.bls.gov/pub/time.series/cu/cu.item",
3 sep="\t",
4 storage_options=headers
5 )
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/util/_decorators.py:317, in deprecate_nonkeyword_arguments.<locals>.decorate.<locals>.wrapper(*args, **kwargs)
311 if len(args) > num_allow_args:
312 warnings.warn(
313 msg.format(arguments=arguments),
314 FutureWarning,
315 stacklevel=stacklevel,
316 )
--> 317 return func(*args, **kwargs)
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/parsers/readers.py:927, in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)
912 kwds_defaults = _refine_defaults_read(
913 dialect,
914 delimiter,
(...)
923 defaults={"delimiter": ","},
924 )
925 kwds.update(kwds_defaults)
--> 927 return _read(filepath_or_buffer, kwds)
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/parsers/readers.py:582, in _read(filepath_or_buffer, kwds)
579 _validate_names(kwds.get("names", None))
581 # Create the parser.
--> 582 parser = TextFileReader(filepath_or_buffer, **kwds)
584 if chunksize or iterator:
585 return parser
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/parsers/readers.py:1421, in TextFileReader.__init__(self, f, engine, **kwds)
1418 self.options["has_index_names"] = kwds["has_index_names"]
1420 self.handles: IOHandles | None = None
-> 1421 self._engine = self._make_engine(f, self.engine)
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/parsers/readers.py:1707, in TextFileReader._make_engine(self, f, engine)
1703 mode = "rb"
1704 # error: No overload variant of "get_handle" matches argument types
1705 # "Union[str, PathLike[str], ReadCsvBuffer[bytes], ReadCsvBuffer[str]]"
1706 # , "str", "bool", "Any", "Any", "Any", "Any", "Any"
-> 1707 self.handles = get_handle( # type: ignore[call-overload]
1708 f,
1709 mode,
1710 encoding=self.options.get("encoding", None),
1711 compression=self.options.get("compression", None),
1712 memory_map=self.options.get("memory_map", False),
1713 is_text=is_text,
1714 errors=self.options.get("encoding_errors", "strict"),
1715 storage_options=self.options.get("storage_options", None),
1716 )
1717 assert self.handles is not None
1718 f = self.handles.handle
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/common.py:667, in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
664 codecs.lookup_error(errors)
666 # open URLs
--> 667 ioargs = _get_filepath_or_buffer(
668 path_or_buf,
669 encoding=encoding,
670 compression=compression,
671 mode=mode,
672 storage_options=storage_options,
673 )
675 handle = ioargs.filepath_or_buffer
676 handles: list[BaseBuffer]
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/common.py:336, in _get_filepath_or_buffer(filepath_or_buffer, encoding, compression, mode, storage_options)
334 # assuming storage_options is to be interpreted as headers
335 req_info = urllib.request.Request(filepath_or_buffer, headers=storage_options)
--> 336 with urlopen(req_info) as req:
337 content_encoding = req.headers.get("Content-Encoding", None)
338 if content_encoding == "gzip":
339 # Override compression based on Content-Encoding header
File /usr/local/lib/python3.10/dist-packages/pandas-1.5.0.dev0+697.gf9762d8f52-py3.10-linux-x86_64.egg/pandas/io/common.py:239, in urlopen(*args, **kwargs)
233 """
234 Lazy-import wrapper for stdlib urlopen, as that imports a big chunk of
235 the stdlib.
236 """
237 import urllib.request
--> 239 return urllib.request.urlopen(*args, **kwargs)
File /usr/lib/python3.10/urllib/request.py:216, in urlopen(url, data, timeout, cafile, capath, cadefault, context)
214 else:
215 opener = _opener
--> 216 return opener.open(url, data, timeout)
File /usr/lib/python3.10/urllib/request.py:525, in OpenerDirector.open(self, fullurl, data, timeout)
523 for processor in self.process_response.get(protocol, []):
524 meth = getattr(processor, meth_name)
--> 525 response = meth(req, response)
527 return response
File /usr/lib/python3.10/urllib/request.py:634, in HTTPErrorProcessor.http_response(self, request, response)
631 # According to RFC 2616, "2xx" code indicates that the client's
632 # request was successfully received, understood, and accepted.
633 if not (200 <= code < 300):
--> 634 response = self.parent.error(
635 'http', request, response, code, msg, hdrs)
637 return response
File /usr/lib/python3.10/urllib/request.py:563, in OpenerDirector.error(self, proto, *args)
561 if http_err:
562 args = (dict, 'default', 'http_error_default') + orig_args
--> 563 return self._call_chain(*args)
File /usr/lib/python3.10/urllib/request.py:496, in OpenerDirector._call_chain(self, chain, kind, meth_name, *args)
494 for handler in handlers:
495 func = getattr(handler, meth_name)
--> 496 result = func(*args)
497 if result is not None:
498 return result
File /usr/lib/python3.10/urllib/request.py:643, in HTTPDefaultErrorHandler.http_error_default(self, req, fp, code, msg, hdrs)
642 def http_error_default(self, req, fp, code, msg, hdrs):
--> 643 raise HTTPError(req.full_url, code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden
读写XML文档#
我们添加了I/O支持以读取和呈现浅层版本 XML 包含的文档 read_xml()
和 DataFrame.to_xml()
。使用 lxml 作为解析器,XPath 1.0和XSLT 1.0都可用。 (GH27554 )
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>
有关详细信息,请参阅 编写XML 有关IO工具的用户指南中。
Styler增强功能#
我们提供了一些专注于以下方面的开发 Styler
。另请参阅 Styler documentation 已经修改和完善了 (GH39720 , GH39317 , GH40493 )。
The method
Styler.set_table_styles()
can now accept more natural CSS language for arguments, such as'color:red;'
instead of[('color', 'red')]
(GH39563)这些方法
Styler.highlight_null()
,Styler.highlight_min()
,以及Styler.highlight_max()
现在允许使用自定义的CSS突出显示,而不是默认的背景颜色 (GH40242 )
Styler.apply()
现在接受返回ndarray
什么时候axis=None
,使其现在与axis=0
和axis=1
行为 (GH39359 )当格式不正确的css通过
Styler.apply()
或Styler.applymap()
,现在渲染时会引发错误 (GH39660 )
Styler.format()
现在接受关键字参数escape
用于可选的HTML和LaTeX转义 (GH40388 , GH41619 )
Styler.background_gradient()
已经获得了这样的论点gmap
为着色提供特定的渐变贴图 (GH22727 )
Styler.clear()
现在可以放行Styler.hidden_index
和Styler.hidden_columns
也是 (GH40484 )Added the method
Styler.highlight_between()
(GH39821)Added the method
Styler.highlight_quantile()
(GH40926)Added the method
Styler.text_gradient()
(GH41098)添加了方法
Styler.set_tooltips()
允许悬停工具提示;这可用于增强交互显示 (GH21266 , GH40284 )添加了参数
precision
到该方法Styler.format()
控制浮点数的显示 (GH40134 )
Styler
rendered HTML output now follows the w3 HTML Style Guide (GH39626)One has greater control of the display through separate sparsification of the index or columns using the new styler options, which are also usable via
option_context()
(GH41142)添加了选项
styler.render.max_elements
设置大型DataFrame样式时避免浏览器过载 (GH40712 )Added the method
Styler.to_latex()
(GH21673, GH42320), which also allows some limited CSS conversion (GH40731)Added the method
Styler.to_html()
(GH13379)添加了方法
Styler.set_sticky()
使索引和列标题在滚动的HTML框架中永久可见 (GH29072 )
DataFrame构造函数支持 copy=False
使用DICT#
当将词典传递给 DataFrame
使用 copy=False
,将不再复制副本 (GH32960 )。
In [3]: arr = np.array([1, 2, 3])
In [4]: df = pd.DataFrame({"A": arr, "B": arr.copy()}, copy=False)
In [5]: df
Out[5]:
A B
0 1 1
1 2 2
2 3 3
[3 rows x 2 columns]
df["A"]
仍然是一种观点 arr
:
In [6]: arr[0] = 0
In [7]: assert df.iloc[0, 0] == 0
未通过时的默认行为 copy
将保持不变,即将创建副本。
PyArrow支持的字符串数据类型#
我们已经增强了 StringDtype
,一种专用于字符串数据的扩展类型。 (GH39908 )
现在可以指定一个 storage
关键字选项至 StringDtype
。使用Pandas选项或使用指定数据类型 dtype='string[pyarrow]'
以允许由PyArrow数组而不是由Python对象的NumPy数组支持String数组。
需要安装PyArrow 1.0.0或更高版本才能安装由PyArrow支持的StringArray。
警告
string[pyarrow]
目前被认为是试验性的。API的实现和部分内容可能会在没有任何警告的情况下发生更改。
In [8]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype(storage="pyarrow"))
Out[8]:
0 abc
1 <NA>
2 def
Length: 3, dtype: string
您可以使用别名 "string[pyarrow]"
也是。
In [9]: s = pd.Series(['abc', None, 'def'], dtype="string[pyarrow]")
In [10]: s
Out[10]:
0 abc
1 <NA>
2 def
Length: 3, dtype: string
您还可以使用Pandas选项创建一个PyArrow支持的字符串数组。
In [11]: with pd.option_context("string_storage", "pyarrow"):
....: s = pd.Series(['abc', None, 'def'], dtype="string")
....:
In [12]: s
Out[12]:
0 abc
1 <NA>
2 def
Length: 3, dtype: string
通常的字符串访问器方法可以工作。在适当的情况下,DataFrame的系列或列的返回类型也将具有字符串数据类型。
In [13]: s.str.upper()
Out[13]:
0 ABC
1 <NA>
2 DEF
Length: 3, dtype: string
In [14]: s.str.split('b', expand=True).dtypes
Out[14]:
0 string
1 string
Length: 2, dtype: object
返回整数的字符串访问器方法将返回值 Int64Dtype
In [15]: s.str.count("a")
Out[15]:
0 1
1 <NA>
2 0
Length: 3, dtype: Int64
居中的日期时间样式的滚动窗口#
在使用类似DateTime的索引对DataFrame和Series对象执行滚动计算时,现在可以使用居中的类似DateTime的窗口 (GH38780 )。例如:
In [16]: df = pd.DataFrame(
....: {"A": [0, 1, 2, 3, 4]}, index=pd.date_range("2020", periods=5, freq="1D")
....: )
....:
In [17]: df
Out[17]:
A
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
[5 rows x 1 columns]
In [18]: df.rolling("2D", center=True).mean()
Out[18]:
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
[5 rows x 1 columns]
其他增强功能#
DataFrame.rolling()
,Series.rolling()
,DataFrame.expanding()
,以及Series.expanding()
现在支持method
参数的参数'table'
选项,该选项对整个DataFrame
。看见 Window Overview 以获得性能和功能优势 (GH15095 , GH38995 )ExponentialMovingWindow
now support aonline
method that can performmean
calculations in an online fashion. See Window Overview (GH41673)Added
MultiIndex.dtypes()
(GH37062)Added
end
andend_day
options for theorigin
argument inDataFrame.resample()
(GH37804)Improved error message when
usecols
andnames
do not match forread_csv()
andengine="c"
(GH29042)Improved consistency of error messages when passing an invalid
win_type
argument in Window methods (GH15969)read_sql_query()
现在接受dtype
参数根据用户输入从SQL数据库转换列数据 (GH10285 )read_csv()
现在正在提高ParserWarning
如果标题或给定名称的长度与以下情况下的数据长度不匹配usecols
未指定 (GH21768 )Improved integer type mapping from pandas to SQLAlchemy when using
DataFrame.to_sql()
(GH35076)to_numeric()
现在支持向下转换可为空的ExtensionDtype
对象 (GH33013 )Added support for dict-like names in
MultiIndex.set_names
andMultiIndex.rename
(GH20421)read_excel()
现在可以自动检测.xlsb文件和较旧的.xls文件 (GH35416 , GH41225 )ExcelWriter
现在接受if_sheet_exists
参数来控制写入现有工作表时追加模式的行为 (GH40230 )Rolling.sum()
,Expanding.sum()
,Rolling.mean()
,Expanding.mean()
,ExponentialMovingWindow.mean()
,Rolling.median()
,Expanding.median()
,Rolling.max()
,Expanding.max()
,Rolling.min()
,以及Expanding.min()
现在支持 Numba 使用engine
关键字 (GH38895 , GH41267 )DataFrame.apply()
can now accept NumPy unary operators as strings, e.g.df.apply("sqrt")
, which was already the case forSeries.apply()
(GH39116)DataFrame.apply()
can now accept non-callable DataFrame properties as strings, e.g.df.apply("size")
, which was already the case forSeries.apply()
(GH39116)DataFrame.applymap()
can now accept kwargs to pass on to the user-providedfunc
(GH39987)Passing a
DataFrame
indexer toiloc
is now disallowed forSeries.__getitem__()
andDataFrame.__getitem__()
(GH39004)Series.apply()
can now accept list-like or dictionary-like arguments that aren't lists or dictionaries, e.g.ser.apply(np.array(["sum", "mean"]))
, which was already the case forDataFrame.apply()
(GH39140)DataFrame.plot.scatter()
can now accept a categorical column for the argumentc
(GH12380, GH31357)Series.loc()
现在,当系列有一个MultiIndex
索引器的维度太多 (GH35349 )read_stata()
现在支持从压缩文件中读取数据 (GH26599 )Added support for parsing
ISO 8601
-like timestamps with negative signs toTimedelta
(GH37172)Added support for unary operators in
FloatingArray
(GH38749)RangeIndex
can now be constructed by passing arange
object directly e.g.pd.RangeIndex(range(3))
(GH12067)Series.round()
和DataFrame.round()
现在使用可以为空的整型和浮点型数据类型 (GH38844 )read_csv()
和read_json()
揭露这一论点encoding_errors
控制编码错误的处理方式 (GH39450 )GroupBy.any()
和GroupBy.all()
对可为空的数据类型使用Kleene逻辑 (GH37506 )GroupBy.any()
和GroupBy.all()
返回一个BooleanDtype
对于数据类型可为空的列 (GH33449 )GroupBy.any()
andGroupBy.all()
raising withobject
data containingpd.NA
even whenskipna=True
(GH37501)GroupBy.rank()
现在支持对象数据类型数据 (GH38278 )Constructing a
DataFrame
orSeries
with thedata
argument being a Python iterable that is not a NumPyndarray
consisting of NumPy scalars will now result in a dtype with a precision the maximum of the NumPy scalars; this was already the case whendata
is a NumPyndarray
(GH40908)添加关键字
sort
至pivot_table()
要允许对结果不排序,请执行以下操作 (GH39143 )添加关键字
dropna
至DataFrame.value_counts()
要允许对包含以下内容的行进行计数,请执行以下操作NA
值 (GH41325 )Series.replace()
现在将结果转换为PeriodDtype
在可能的情况下,代替object
数据类型 (GH41526 )Improved error message in
corr
andcov
methods onRolling
,Expanding
, andExponentialMovingWindow
whenother
is not aDataFrame
orSeries
(GH41741)Series.between()
现在可以接受left
或right
作为参数inclusive
仅包括左边界或右边界 (GH40245 )DataFrame.explode()
现在支持分解多个柱。它的column
参数现在还接受同时在多个列上分解的字符串或元组的列表 (GH39240 )DataFrame.sample()
now accepts theignore_index
argument to reset the index after sampling, similar toDataFrame.drop_duplicates()
andDataFrame.sort_values()
(GH38581)
值得注意的错误修复#
这些错误修复可能会带来显著的行为变化。
Categorical.unique
现在始终保持与原始数据类型相同的数据类型#
以前,当调用 Categorical.unique()
对于分类数据,新数组中未使用的类别将被删除,从而使新数组的数据类型不同于原始数组 (GH18291 )
作为这方面的一个例子,给出:
In [19]: dtype = pd.CategoricalDtype(['bad', 'neutral', 'good'], ordered=True)
In [20]: cat = pd.Categorical(['good', 'good', 'bad', 'bad'], dtype=dtype)
In [21]: original = pd.Series(cat)
In [22]: unique = original.unique()
以前的行为 :
In [1]: unique
['good', 'bad']
Categories (2, object): ['bad' < 'good']
In [2]: original.dtype == unique.dtype
False
新行为 :
In [23]: unique
Out[23]:
['good', 'bad']
Categories (3, object): ['bad' < 'neutral' < 'good']
In [24]: original.dtype == unique.dtype
Out[24]: True
将数据类型保留在 DataFrame.combine_first()
#
DataFrame.combine_first()
现在将保留数据类型 (GH7509 )
In [25]: df1 = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=[0, 1, 2])
In [26]: df1
Out[26]:
A B
0 1 1
1 2 2
2 3 3
[3 rows x 2 columns]
In [27]: df2 = pd.DataFrame({"B": [4, 5, 6], "C": [1, 2, 3]}, index=[2, 3, 4])
In [28]: df2
Out[28]:
B C
2 4 1
3 5 2
4 6 3
[3 rows x 2 columns]
In [29]: combined = df1.combine_first(df2)
以前的行为 :
In [1]: combined.dtypes
Out[2]:
A float64
B float64
C float64
dtype: object
新行为 :
In [30]: combined.dtypes
Out[30]:
A float64
B int64
C float64
Length: 3, dtype: object
Groupby方法agg和Transform不再更改可调用对象的返回数据类型#
以前,这些方法 DataFrameGroupBy.aggregate()
, SeriesGroupBy.aggregate()
, DataFrameGroupBy.transform()
,以及 SeriesGroupBy.transform()
可能在参数设置为 func
是可调用的,可能会导致不良结果 (GH21240 )。如果结果是数值,并且转换回输入数据类型不会更改任何值,则会发生强制转换 np.allclose
。现在,这样的选角没有发生。
In [31]: df = pd.DataFrame({'key': [1, 1], 'a': [True, False], 'b': [True, True]})
In [32]: df
Out[32]:
key a b
0 1 True True
1 1 False True
[2 rows x 3 columns]
以前的行为 :
In [5]: df.groupby('key').agg(lambda x: x.sum())
Out[5]:
a b
key
1 True 2
新行为 :
In [33]: df.groupby('key').agg(lambda x: x.sum())
Out[33]:
a b
key
1 1 2
[1 rows x 2 columns]
float
result for GroupBy.mean()
, GroupBy.median()
, and GroupBy.var()
#
以前,根据输入值的不同,这些方法可能产生不同的数据类型。现在,这些方法将始终返回一个浮点数据类型。 (GH41137 )
In [34]: 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 [35]: df.groupby(df.index).mean()
Out[35]:
a b c
0 1.0 1.0 1.0
[1 rows x 3 columns]
使用设置值时尝试就地操作 loc
和 iloc
#
使用设置整列时 loc
或 iloc
,Pandas将尝试将值插入到现有数据中,而不是创建一个全新的数组。
In [36]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")
In [37]: values = df.values
In [38]: new = np.array([5, 6, 7], dtype="int64")
In [39]: df.loc[[0, 1, 2], "A"] = new
在新的和旧的行为中, values
被覆盖,但在旧行为中, df["A"]
更改为 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
在Pandas1.3.0中, df
继续与共享数据 values
新行为 :
In [40]: df.dtypes
Out[40]:
A float64
Length: 1, dtype: object
In [41]: np.shares_memory(df["A"], new)
Out[41]: False
In [42]: np.shares_memory(df["A"], values)
Out[42]: True
设置时切勿原地操作 frame[keys] = values
#
使用设置多个列时 frame[keys] = values
新数组将替换这些键的先前存在的数组,这将 not 被覆盖 (GH39510 )。因此,这些列将保留 values
,从不强制转换为现有数组的数据类型。
In [43]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")
In [44]: df[["A"]] = 5
在过去的行为中, 5
被选为 float64
并插入到现有的阵列背衬中 df
:
以前的行为 :
In [1]: df.dtypes
Out[1]:
A float64
在新的行为中,我们获得了一个新的数组,并保留了一个整数类型的 5
:
新行为 :
In [45]: df.dtypes
Out[45]:
A int64
Length: 1, dtype: object
设置为布尔级数的一致性投射#
Setting non-boolean values into a Series
with dtype=bool
now consistently
casts to dtype=object
(GH38709)
In [46]: orig = pd.Series([True, False])
In [47]: ser = orig.copy()
In [48]: ser.iloc[1] = np.nan
In [49]: ser2 = orig.copy()
In [50]: 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 [51]: ser
Out[51]:
0 True
1 NaN
Length: 2, dtype: object
In [52]: ser2
Out[52]:
0 True
1 2.0
Length: 2, dtype: object
GroupBy.Rolling不再返回值中的分组依据列#
GROUP-BY列现在将从 groupby.rolling
运营 (GH32262 )
In [53]: df = pd.DataFrame({"A": [1, 1, 2, 3], "B": [0, 1, 2, 3]})
In [54]: df
Out[54]:
A B
0 1 0
1 1 1
2 2 2
3 3 3
[4 rows x 2 columns]
以前的行为 :
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 [55]: df.groupby("A").rolling(2).sum()
Out[55]:
B
A
1 0 NaN
1 1.0
2 2 NaN
3 3 NaN
[4 rows x 1 columns]
去除了滚动方差和标准差中的人为截断#
Rolling.std()
和 Rolling.var()
将不再人为截断小于 ~1e-8
和 ~1e-15
分别降为零 (GH37051 , GH40448 , GH39872 )。
但是,现在当滚动到较大的值时,结果中可能存在浮点瑕疵。
In [56]: s = pd.Series([7, 5, 5, 5])
In [57]: s.rolling(3).var()
Out[57]:
0 NaN
1 NaN
2 1.333333
3 0.000000
Length: 4, dtype: float64
使用多索引滚动的GroupBy.不再删除结果中的级别#
GroupBy.rolling()
将不再降低 DataFrame
使用一个 MultiIndex
在结果中。这可能会导致感觉到结果中的级别重复 MultiIndex
,但此更改恢复了1.1.3版中的行为 (GH38787 , GH38523 )。
In [58]: index = pd.MultiIndex.from_tuples([('idx1', 'idx2')], names=['label1', 'label2'])
In [59]: df = pd.DataFrame({'a': [1], 'b': [2]}, index=index)
In [60]: df
Out[60]:
a b
label1 label2
idx1 idx2 1 2
[1 rows x 2 columns]
以前的行为 :
In [1]: df.groupby('label1').rolling(1).sum()
Out[1]:
a b
label1
idx1 1.0 2.0
新行为 :
In [61]: df.groupby('label1').rolling(1).sum()
Out[61]:
a b
label1 label1 label2
idx1 idx1 idx2 1.0 2.0
[1 rows x 2 columns]
向后不兼容的API更改#
提高了依赖项的最低版本#
更新了一些受支持的依赖项的最低版本。如果已安装,我们现在需要:
套餐 |
最低版本 |
必填项 |
变化 |
---|---|---|---|
钱币 |
1.17.3 |
X |
X |
皮兹 |
2017.3 |
X |
|
Python-Dateutil |
2.7.3 |
X |
|
瓶颈 |
1.2.1 |
||
数字快递 |
2.7.0 |
X |
|
最热(Dev) |
6.0 |
X |
|
Mypy(开发人员) |
0.812 |
X |
|
安装工具 |
38.6.0 |
X |
为 optional libraries 一般建议使用最新版本。下表列出了目前在整个Pandas发育过程中正在测试的每个库的最低版本。低于最低测试版本的可选库仍可运行,但不被视为受支持。
套餐 |
最低版本 |
变化 |
---|---|---|
美味可口的汤 |
4.6.0 |
|
实木地板 |
0.4.0 |
X |
FsSpec |
0.7.4 |
|
Gcsf |
0.6.0 |
|
Lxml |
4.3.0 |
|
Matplotlib |
2.2.3 |
|
Numba |
0.46.0 |
|
OpenPyxl |
3.0.0 |
X |
绿箭侠 |
0.17.0 |
X |
Pymysql |
0.8.1 |
X |
易燃物 |
3.5.1 |
|
S3FS |
0.4.0 |
|
斯比 |
1.2.0 |
|
SQLALCHIZY |
1.3.0 |
X |
制表 |
0.8.7 |
X |
XARRAY |
0.12.0 |
|
Xlrd |
1.2.0 |
|
Xlsx写入器 |
1.0.2 |
|
超大重量 |
1.3.0 |
|
Pandas-Gbq |
0.12.0 |
其他API更改#
部分初始化
CategoricalDtype
对象(即具有categories=None
)将不再等同于完全初始化的数据类型对象 (GH38516 )访问
_constructor_expanddim
在一个DataFrame
和_constructor_sliced
在一个Series
现在引发一个AttributeError
。以前是NotImplementedError
被提了出来 (GH38782 )Added new
engine
and**engine_kwargs
parameters toDataFrame.to_sql()
to support other future "SQL engines". Currently we still only useSQLAlchemy
under the hood, but more engines are planned to be supported such as turbodbc (GH36893)删除冗余
freq
从…PeriodIndex
字符串表示法 (GH41653 )ExtensionDtype.construct_array_type()
现在是必需的方法,而不是ExtensionDtype
子类 (GH24860 )Calling
hash
on non-hashable pandas objects will now raiseTypeError
with the built-in error message (e.g.unhashable type: 'Series'
). Previously it would raise a custom message such as'Series' objects are mutable, thus they cannot be hashed
. Furthermore,isinstance(<Series>, abc.collections.Hashable)
will now returnFalse
(GH40013)Styler.from_custom_template()
现在有两个新的模板名称参数,并删除了旧的name
,因为为了更好地解析而引入了模板继承 (GH42053 )。还需要对Styler属性进行子类化修改。
建房#
中的文档
.pptx
和.pdf
格式不再包含在控制盘或源代码分发中。 (GH30741 )
不推荐使用#
不建议在DataFrame Reductions和DataFrameGroupBy操作中删除讨厌的列#
调用减价(例如 .min
, .max
, .sum
)上 DataFrame
使用 numeric_only=None
(缺省设置),其中减少会引发 TypeError
被默默地忽略并从结果中删除。
此行为已弃用。在未来的版本中, TypeError
将引发,并且用户在调用该函数之前将只需要选择有效列。
例如:
In [62]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})
In [63]: df
Out[63]:
A B
0 1 2016-01-01
1 2 2016-01-02
2 3 2016-01-03
3 4 2016-01-04
[4 rows x 2 columns]
旧行为 :
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 [64]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})
In [65]: 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
构造函数 (GH38433 )不推荐使用的构造
CategoricalIndex
而不传递类似列表的数据 (GH38944 )方法中允许特定于子类的关键字参数
Index
构造函数,则直接使用特定的子类 (GH14093 , GH21311 , GH22315 , GH26974 )不推荐使用
astype()
类日期计时法 (timedelta64[ns]
,datetime64[ns]
,Datetime64TZDtype
,PeriodDtype
)要转换为整型数据类型,请使用values.view(...)
取而代之的是 (GH38544 )。后来在Pandas1.4.0中恢复了这一废弃功能。已弃用
MultiIndex.is_lexsorted()
和MultiIndex.lexsort_depth()
,使用MultiIndex.is_monotonic_increasing()
取而代之的是 (GH32259 )不推荐使用的关键字
try_cast
在……里面Series.where()
,Series.mask()
,DataFrame.where()
,DataFrame.mask()
;如果需要,手动转换结果 (GH38836 )Deprecated comparison of
Timestamp
objects withdatetime.date
objects. Instead of e.g.ts <= mydate
usets <= pd.Timestamp(mydate)
orts.date() <= mydate
(GH36131)Deprecated
Rolling.win_type
returning"freq"
(GH38963)Deprecated
Rolling.is_datetimelike
(GH38963)Deprecated
DataFrame
indexer forSeries.__setitem__()
andDataFrame.__setitem__()
(GH39004)Deprecated
ExponentialMovingWindow.vol()
(GH39220)使用
.astype
在以下各项之间进行转换datetime64[ns]
数据类型和DatetimeTZDtype
已弃用,并将在将来的版本中引发,请使用obj.tz_localize
或obj.dt.tz_localize
取而代之的是 (GH38622 )已弃用的强制转换
datetime.date
目标对象datetime64
当用作fill_value
在……里面DataFrame.unstack()
,DataFrame.shift()
,Series.shift()
,以及DataFrame.reindex()
,通过pd.Timestamp(dateobj)
取而代之的是 (GH39767 )已弃用
Styler.set_na_rep()
和Styler.set_precision()
赞成Styler.format()
使用na_rep
和precision
分别作为现有输入参数和新输入参数 (GH40134 , GH40425 )Deprecated
Styler.where()
in favor of using an alternative formulation withStyler.applymap()
(GH40821)不推荐允许部分失败
Series.transform()
和DataFrame.transform()
什么时候func
像列表或字典一样,并提出任何不TypeError
;func
筹集任何东西,而不是TypeError
将在未来版本中提高 (GH40211 )Deprecated arguments
error_bad_lines
andwarn_bad_lines
inread_csv()
andread_table()
in favor of argumenton_bad_lines
(GH15122)已弃用的支持
np.ma.mrecords.MaskedRecords
在DataFrame
构造函数,传递{{name: data[name] for name in data.dtype.names}}
取而代之的是 (GH40363 )不推荐使用
merge()
,DataFrame.merge()
,以及DataFrame.join()
在不同的层次上 (GH34862 )不赞成使用……
**kwargs
在……里面ExcelWriter
;使用关键字参数engine_kwargs
取而代之的是 (GH40430 )不推荐使用
inplace
的参数Categorical.remove_categories()
,Categorical.add_categories()
,Categorical.reorder_categories()
,Categorical.rename_categories()
,Categorical.set_categories()
并将在将来的版本中删除 (GH37643 )不推荐使用的设置
Categorical._codes
,创建新的Categorical
而不是使用所需的代码 (GH40606 )Deprecated the
convert_float
optional argument inread_excel()
andExcelFile.parse()
(GH41127)不推荐使用的行为
DatetimeIndex.union()
具有混合时区;在未来版本中,两者都将转换为UTC,而不是对象dtype (GH39328 )Deprecated using
usecols
with out of bounds indices forread_csv()
withengine="c"
(GH25623)中第一个元素为范畴的列表的特殊处理
DataFrame
构造函数;作为pd.DataFrame({{col: categorical, ...}})
取而代之的是 (GH38845 )不推荐使用的行为
DataFrame
构造函数时,dtype
则不能将数据强制转换为该数据类型。在将来的版本中,这将被引发,而不是被默默忽略 (GH24435 )Deprecated the
Timestamp.freq
attribute. For the properties that use it (is_month_start
,is_month_end
,is_quarter_start
,is_quarter_end
,is_year_start
,is_year_end
), when you have afreq
, use e.g.freq.is_month_start(ts)
(GH15146)不推荐使用的结构
Series
或DataFrame
使用DatetimeTZDtype
数据和datetime64[ns]
数据类型。使用Series(data).dt.tz_localize(None)
取而代之的是 (GH41555 , GH33401 )不推荐使用的行为
Series
具有大整数值和小整数数据类型静默溢出的构造;使用Series(data).astype(dtype)
取而代之的是 (GH41734 )不推荐使用的行为
DataFrame
使用浮点数据和整型数据类型转换的结构,即使在有损的情况下也是如此;在未来的版本中,这将保持浮点、匹配Series
行为 (GH41770 )已弃用的推论
timedelta64[ns]
,datetime64[ns]
,或DatetimeTZDtype
中的数据类型Series
传递包含字符串的数据时构造,并且没有dtype
已通过 (GH33558 )In a future version, constructing
Series
orDataFrame
withdatetime64[ns]
data andDatetimeTZDtype
will treat the data as wall-times instead of as UTC times (matching DatetimeIndex behavior). To treat the data as UTC times, usepd.Series(data).dt.tz_localize("UTC").dt.tz_convert(dtype.tz)
orpd.Series(data.view("int64"), dtype=dtype)
(GH33401)Deprecated passing lists as
key
toDataFrame.xs()
andSeries.xs()
(GH41760)不推荐使用的布尔参数
inclusive
在……里面Series.between()
拥有{{"left", "right", "neither", "both"}}
作为标准参数值 (GH40628 )不建议将参数作为位置参数传递给以下所有对象,但注意到例外情况 (GH41485 ):
concat()
(除objs
)read_csv()
(除filepath_or_buffer
)read_table()
(除filepath_or_buffer
)DataFrame.clip()
和Series.clip()
(除upper
和lower
)DataFrame.drop_duplicates()
(except forsubset
),Series.drop_duplicates()
,Index.drop_duplicates()
andMultiIndex.drop_duplicates()
DataFrame.drop()
(other thanlabels
) andSeries.drop()
DataFrame.ffill()
,Series.ffill()
,DataFrame.bfill()
, andSeries.bfill()
DataFrame.fillna()
和Series.fillna()
(除value
)DataFrame.interpolate()
和Series.interpolate()
(除method
)DataFrame.mask()
和Series.mask()
(除cond
和other
)DataFrame.reset_index()
(other thanlevel
) andSeries.reset_index()
DataFrame.set_axis()
和Series.set_axis()
(除labels
)DataFrame.set_index()
(除keys
)DataFrame.sort_values()
(other thanby
) andSeries.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
)
性能改进#
Performance improvement in
IntervalIndex.isin()
(GH38353)性能提升
Series.mean()
对于可为空的数据类型 (GH34814 )性能提升
Series.isin()
对于可为空的数据类型 (GH38340 )性能提升
DataFrame.fillna()
使用method="pad"
或method="backfill"
对于可为空的浮点型和可为空的整型数据类型 (GH39953 )Performance improvement in
DataFrame.corr()
formethod=kendall
(GH28329)Performance improvement in
DataFrame.corr()
formethod=spearman
(GH40956, GH41885)Performance improvement in
Rolling.corr()
andRolling.cov()
(GH39388)Performance improvement in
RollingGroupby.corr()
,ExpandingGroupby.corr()
,ExpandingGroupby.corr()
andExpandingGroupby.cov()
(GH39591)性能提升
json_normalize()
适用于基本情况(包括分隔符) (GH40035 GH15621 )性能提升
ExpandingGroupby
聚合方法 (GH39664 )Performance improvement in
Styler
where render times are more than 50% reduced and now matchesDataFrame.to_html()
(GH39972 GH39952, GH40425)该方法
Styler.set_td_classes()
现在的表现就像Styler.apply()
和Styler.applymap()
,在某些情况下甚至更是如此 (GH40453 )Performance improvement in
ExponentialMovingWindow.mean()
withtimes
(GH39784)性能提升
GroupBy.apply()
当需要Python回退实现时 (GH40176 )将PyArrow布尔数组转换为Pandas可为空的布尔数组的性能改进 (GH41051 )
Performance improvement for concatenation of data with type
CategoricalDtype
(GH40193)性能提升
GroupBy.cummin()
和GroupBy.cummax()
具有可为空的数据类型 (GH37493 )性能提升
Series.nunique()
使用NaN值 (GH40865 )Performance improvement in
DataFrame.transpose()
,Series.unstack()
withDatetimeTZDtype
(GH40149)性能提升
Series.plot()
和DataFrame.plot()
使用入口点延迟加载 (GH41492 )
错误修复#
直截了当的#
窃听
CategoricalIndex
错误地未能筹集TypeError
在传递标量数据时 (GH38614 )窃听
CategoricalIndex.reindex
失败时,如果Index
Passed不是绝对的,但其值是类别中的所有标签 (GH28690 )Bug where constructing a
Categorical
from an object-dtype array ofdate
objects did not round-trip correctly withastype
(GH38552)Bug in constructing a
DataFrame
from anndarray
and aCategoricalDtype
(GH38857)Bug in setting categorical values into an object-dtype column in a
DataFrame
(GH39136)Bug in
DataFrame.reindex()
was raising anIndexError
when the new index contained duplicates and the old index was aCategoricalIndex
(GH38906)窃听
Categorical.fillna()
使用类似元组的类别引发NotImplementedError
而不是ValueError
使用非类别元组填充时 (GH41914 )
类似日期的#
窃听
DataFrame
和Series
构造函数有时会从Timestamp
(请回复。Timedelta
)data
,具有dtype=datetime64[ns]
(请回复。timedelta64[ns]
) (GH38032 )窃听
DataFrame.first()
和Series.first()
如果第一天是一个月的最后一天,则一个月的偏移量返回不正确的结果 (GH29623 )Bug in constructing a
DataFrame
orSeries
with mismatcheddatetime64
data andtimedelta64
dtype, or vice-versa, failing to raise aTypeError
(GH38575, GH38764, GH38792)在构造一个
Series
或DataFrame
使用一个datetime
对象超出的边界datetime64[ns]
Dtype或atimedelta
对象超出的边界timedelta64[ns]
数据类型 (GH38792 , GH38965 )Bug in
DatetimeIndex.intersection()
,DatetimeIndex.symmetric_difference()
,PeriodIndex.intersection()
,PeriodIndex.symmetric_difference()
always returning object-dtype when operating withCategoricalIndex
(GH38741)Bug in
DatetimeIndex.intersection()
giving incorrect results with non-Tick frequencies withn != 1
(GH42104)Bug in
Series.where()
incorrectly castingdatetime64
values toint64
(GH37682)Bug in
Categorical
incorrectly typecastingdatetime
object toTimestamp
(GH38878)Bug in comparisons between
Timestamp
object anddatetime64
objects just outside the implementation bounds for nanoseconddatetime64
(GH39221)Bug in
Timestamp.round()
,Timestamp.floor()
,Timestamp.ceil()
for values near the implementation bounds ofTimestamp
(GH39244)Bug in
Timedelta.round()
,Timedelta.floor()
,Timedelta.ceil()
for values near the implementation bounds ofTimedelta
(GH38964)窃听
date_range()
创建错误DatetimeIndex
包含NaT
与其提高OutOfBoundsDatetime
在角落里的情况下 (GH24124 )窃听
infer_freq()
错误地未能推断出H的频率DatetimeIndex
如果后者有时区并跨越DST边界 (GH39556 )Bug in
Series
backed byDatetimeArray
orTimedeltaArray
sometimes failing to set the array'sfreq
toNone
(GH41425)
Timedelta#
Bug in constructing
Timedelta
fromnp.timedelta64
objects with non-nanosecond units that are out of bounds fortimedelta64[ns]
(GH38965)在构造一个
TimedeltaIndex
错误地接受np.datetime64("NaT")
对象 (GH39462 )Bug in
TimedeltaIndex
andto_timedelta()
failing to raise when passed non-nanosecondtimedelta64
arrays that overflow when converting totimedelta64[ns]
(GH40008)
时区#
数字#
窃听
DataFrame.quantile()
,DataFrame.sort_values()
导致不正确的后续索引行为 (GH38351 )Bug in
DataFrame.sort_values()
raising anIndexError
for emptyby
(GH40258)窃听
DataFrame.select_dtypes()
使用include=np.number
将丢弃数字ExtensionDtype
列 (GH35340 )窃听
DataFrame.mode()
和Series.mode()
整数不一致Index
对于空输入 (GH33321 )Bug in
DataFrame.rank()
when the DataFrame containednp.inf
(GH32593)Bug in
DataFrame.rank()
withaxis=0
and columns holding incomparable types raising anIndexError
(GH38932)窃听
Series.rank()
,DataFrame.rank()
,以及GroupBy.rank()
治疗最负面的int64
缺少的值 (GH32859 )Bug in
DataFrame.select_dtypes()
different behavior between Windows and Linux withinclude="int"
(GH36596)窃听
DataFrame.apply()
和DataFrame.agg()
当传递参数时func="size"
会在整个DataFrame
而不是行或列 (GH39934 )窃听
DataFrame.transform()
会引发一个SpecificationError
传递时缺少词典和列;现在将引发KeyError
取而代之的是 (GH40004 )窃听
GroupBy.rank()
给出不正确的结果pct=True
和连续组之间的相等值 (GH40518 )Bug in
Series.count()
would result in anint32
result on 32-bit platforms when argumentlevel=None
(GH40908)窃听
Series
和DataFrame
用方法减少费用any
和all
不返回对象数据的布尔结果 (GH12863 , GH35450 , GH27709 )窃听
Series.clip()
如果序列包含NA值并且数据类型可以为空,则会失败 (GH40851 )Bug in
UInt64Index.where()
andUInt64Index.putmask()
with annp.int64
dtypeother
incorrectly raisingTypeError
(GH41974)窃听
DataFrame.agg()
当一个或多个聚集函数未能产生结果时,不按照所提供的聚集函数的顺序对聚集轴进行排序 (GH33634 )窃听
DataFrame.clip()
不将缺少的值解释为无阈值 (GH40420 )
转换#
窃听
Series.to_dict()
使用orient='records'
现在返回Python本机类型 (GH25969 )窃听
Series.view()
和Index.view()
当在类DateTime之间进行转换时 (datetime64[ns]
,datetime64[ns, tz]
,timedelta64
,period
)数据类型 (GH39788 )Bug in
DataFrame
failing to raise aTypeError
when constructing from afrozenset
(GH40163)Bug in
StringArray.astype()
falling back to NumPy and raising when converting todtype='categorical'
(GH40450)窃听
factorize()
其中,当给定数值NumPy dtype小于int64、uint64和flat64的数组时,唯一值不保留其原始数据类型 (GH41132 )窃听
DataFrame
使用包含类似数组的ExtensionDtype
和copy=True
未能复制副本 (GH38939 )窃听
DataFrame
和Series
使用以下工具进行施工datetime64[ns]
数据和dtype=object
导致datetime
对象而不是Timestamp
对象 (GH41599 )窃听
DataFrame
和Series
使用以下工具进行施工timedelta64[ns]
数据和dtype=object
导致np.timedelta64
对象而不是Timedelta
对象 (GH41599 )窃听
DataFrame
在给定二维对象-dtype时构造np.ndarray
的Period
或Interval
未能强制转换为的对象PeriodDtype
或IntervalDtype
,分别 (GH41812 )Bug in constructing a
Series
from a list and aPandasDtype
(GH39357)窃听
infer_dtype()
无法识别具有句点数据类型的系列、索引或数组 (GH23553 )窃听
infer_dtype()
引发常规错误ExtensionArray
物体。它现在将返回"unknown-array"
与其提高 (GH37367 )窃听
DataFrame.convert_dtypes()
错误地引发了ValueError
在空的DataFrame上调用时 (GH40393 )
字符串#
从转换中出现错误
pyarrow.ChunkedArray
至StringArray
当原版没有任何数据块时 (GH41040 )窃听
Series.replace()
和DataFrame.replace()
忽略替换为regex=True
为StringDType
数据 (GH41333 , GH35977 )Bug in
Series.str.extract()
withStringArray
returning object dtype for an emptyDataFrame
(GH41441)Bug in
Series.str.replace()
where thecase
argument was ignored whenregex=False
(GH41602)
间隔#
Bug in
IntervalIndex.intersection()
andIntervalIndex.symmetric_difference()
always returning object-dtype when operating withCategoricalIndex
(GH38653, GH38741)窃听
IntervalIndex.intersection()
属性中的至少一个返回重复项Index
对象具有存在于其他对象中的重复项 (GH38743 )IntervalIndex.union()
,IntervalIndex.intersection()
,IntervalIndex.difference()
,以及IntervalIndex.symmetric_difference()
现在强制转换为适当的dtype,而不是引发TypeError
当与其他人一起操作时IntervalIndex
具有不兼容的数据类型 (GH39267 )PeriodIndex.union()
,PeriodIndex.intersection()
,PeriodIndex.symmetric_difference()
,PeriodIndex.difference()
现在强制转换为对象dtype,而不是引发IncompatibleFrequency
当与其他人一起操作时PeriodIndex
具有不兼容的数据类型 (GH39306 )窃听
IntervalIndex.is_monotonic()
,IntervalIndex.get_loc()
,IntervalIndex.get_indexer_for()
,以及IntervalIndex.__contains__()
当存在NA值时 (GH41831 )
标引#
Bug in
Index.union()
andMultiIndex.union()
dropping duplicateIndex
values whenIndex
was not monotonic orsort
was set toFalse
(GH36289, GH31326, GH40862)窃听
CategoricalIndex.get_indexer()
未能筹集到InvalidIndexError
非唯一时 (GH38372 )窃听
IntervalIndex.get_indexer()
什么时候target
有CategoricalDtype
并且索引和目标都包含NA值 (GH41934 )窃听
Series.loc()
提高一名ValueError
使用布尔列表过滤输入时,要设置的值是具有较低维度的列表 (GH20438 )窃听
DataFrame.__setitem__()
提高一名ValueError
将多个值设置为重复列时 (GH15695 )窃听
DataFrame.loc()
,Series.loc()
,DataFrame.__getitem__()
和Series.__getitem__()
为非单调返回不正确的元素DatetimeIndex
对于字符串切片 (GH33146 )Bug in
DataFrame.reindex()
andSeries.reindex()
with timezone aware indexes raising aTypeError
formethod="ffill"
andmethod="bfill"
and specifiedtolerance
(GH38566)窃听
DataFrame.reindex()
使用datetime64[ns]
或timedelta64[ns]
属性时错误地转换为整数fill_value
需要强制转换为对象数据类型 (GH39755 )窃听
DataFrame.__setitem__()
提高一名ValueError
当设置在空的DataFrame
使用指定的列和非空值DataFrame
价值 (GH38831 )窃听
DataFrame.loc.__setitem__()
提高一名ValueError
在唯一列上操作时,如果DataFrame
具有重复的列 (GH38521 )窃听
DataFrame.iloc.__setitem__()
和DataFrame.loc.__setitem__()
在使用字典值进行设置时使用混合数据类型 (GH38335 )窃听
Series.loc.__setitem__()
和DataFrame.loc.__setitem__()
加薪KeyError
当提供布尔生成器时 (GH39614 )窃听
Series.iloc()
和DataFrame.iloc()
提高一名KeyError
当提供发电机时 (GH39614 )窃听
DataFrame.__setitem__()
而不是引发ValueError
当右侧是一个DataFrame
列数错误 (GH38604 )窃听
Series.__setitem__()
提高一名ValueError
在设置Series
使用标量索引器 (GH38303 )窃听
DataFrame.loc()
正在降低MultiIndex
当DataFrame
用作输入的只有一行 (GH10521 )窃听
DataFrame.__getitem__()
和Series.__getitem__()
总是在提高KeyError
当使用现有字符串进行切片时,Index
有几毫秒 (GH33589 )设置中存在错误
timedelta64
或datetime64
将值转换为数字Series
无法强制转换为对象数据类型 (GH39086 , GH39619 )设置中存在错误
Interval
值转换为Series
或DataFrame
不匹配的IntervalDtype
错误地将新值转换为现有的dtype (GH39120 )设置中存在错误
datetime64
值转换为Series
使用INTEGER-DTYPE错误地将DateTime64值转换为整数 (GH39266 )设置中存在错误
np.datetime64("NaT")
变成一个Series
使用Datetime64TZDtype
错误地将时区朴素值视为时区感知 (GH39769 )Bug in
Index.get_loc()
not raisingKeyError
whenkey=NaN
andmethod
is specified butNaN
is not in theIndex
(GH39382)窃听
DatetimeIndex.insert()
当插入时np.datetime64("NaT")
错误地将时区朴素值视为时区感知索引 (GH39769 )错误地提高了
Index.insert()
设置不能保存在现有frame.columns
,或在Series.reset_index()
或DataFrame.reset_index()
而不是强制转换为兼容的数据类型 (GH39068 )窃听
RangeIndex.append()
长度为1的单个对象连接不正确 (GH39401 )Bug in
RangeIndex.astype()
where when converting toCategoricalIndex
, the categories became aInt64Index
instead of aRangeIndex
(GH41263)设置中存在错误
numpy.timedelta64
值转换为对象数据类型Series
使用布尔索引器 (GH39488 )窃听
DataFrame.__setitem__()
和DataFrame.iloc.__setitem__()
加薪ValueError
尝试使用行切片进行索引并将列表设置为值时 (GH40440 )窃听
DataFrame.loc()
不是募捐KeyError
在以下位置找不到密钥MultiIndex
并且没有完全详细说明这些水平 (GH41170 )窃听
DataFrame.loc.__setitem__()
当扩展轴中的索引包含重复项时,设置WITH-EXPAND错误提升 (GH40096 )窃听
DataFrame.loc.__getitem__()
使用MultiIndex
当至少一个索引列具有FLOAT数据类型并且检索标量时,强制转换为FLOAT (GH41369 )窃听
DataFrame.loc()
非布尔索引元素不正确匹配 (GH20432 )使用索引时出现错误
np.nan
在一个Series
或DataFrame
使用一个CategoricalIndex
错误地提高KeyError
什么时候np.nan
钥匙已存在 (GH41933 )Bug in
Series.__delitem__()
withExtensionDtype
incorrectly casting tondarray
(GH40386)窃听
DataFrame.at()
使用一个CategoricalIndex
传递整型键时返回错误结果 (GH41846 )窃听
DataFrame.loc()
返回一个MultiIndex
如果索引器有重复项,则顺序错误 (GH40978 )Bug in
DataFrame.__setitem__()
raising aTypeError
when using astr
subclass as the column name with aDatetimeIndex
(GH37366)Bug in
PeriodIndex.get_loc()
failing to raise aKeyError
when given aPeriod
with a mismatchedfreq
(GH41670)虫虫
.loc.__getitem__
使用一个UInt64Index
和负整数键提升OverflowError
而不是KeyError
在某些情况下,在其他情况下绕回到正整数 (GH41777 )窃听
Index.get_indexer()
未能筹集到ValueError
在某些情况下,无效method
,limit
,或tolerance
论据 (GH41918 )Bug when slicing a
Series
orDataFrame
with aTimedeltaIndex
when passing an invalid string raisingValueError
instead of aTypeError
(GH41821)Bug in
Index
constructor sometimes silently ignoring a specifieddtype
(GH38879)Index.where()
behavior now mirrorsIndex.putmask()
behavior, i.e.index.where(mask, other)
matchesindex.putmask(~mask, other)
(GH39412)
丢失#
Bug in
Grouper
did not correctly propagate thedropna
argument;DataFrameGroupBy.transform()
now correctly handles missing values fordropna=True
(GH35612)窃听
isna()
,Series.isna()
,Index.isna()
,DataFrame.isna()
,以及相应的notna
未识别的功能Decimal("NaN")
对象 (GH39409 )窃听
DataFrame.fillna()
不接受词典为downcast
关键字 (GH40809 )Bug in
DataFrame
construction with float data containingNaN
and an integerdtype
casting instead of retaining theNaN
(GH26919)窃听
Series.isin()
和MultiIndex.isin()
如果所有NAN都在元组中,则不会将其视为等同 (GH41836 )
MultiIndex#
窃听
DataFrame.drop()
提高一名TypeError
当MultiIndex
不是唯一的,并且level
未提供 (GH36293 )窃听
MultiIndex.intersection()
复制NaN
在结果中 (GH38623 )窃听
MultiIndex.equals()
返回错误True
当MultiIndex
包含NaN
即使它们的顺序不同 (GH38439 )Bug in
MultiIndex.intersection()
always returning an empty result when intersecting withCategoricalIndex
(GH38653)窃听
MultiIndex.difference()
错误地提高TypeError
当索引包含不可排序的条目时 (GH41915 )窃听
MultiIndex.reindex()
提高一名ValueError
在空白处使用时MultiIndex
并且只对特定级别进行索引 (GH41170 )Bug in
MultiIndex.reindex()
raisingTypeError
when reindexing against a flatIndex
(GH41707)
I/O#
Bug in
Index.__repr__()
whendisplay.max_seq_items=1
(GH38415)Bug in
read_csv()
not recognizing scientific notation if the argumentdecimal
is set andengine="python"
(GH31920)Bug in
read_csv()
interpretingNA
value as comment, whenNA
does contain the comment string fixed forengine="python"
(GH34002)窃听
read_csv()
举起一个IndexError
具有多个标题列和index_col
当文件没有数据行时指定 (GH38292 )Bug in
read_csv()
not acceptingusecols
with a different length thannames
forengine="python"
(GH16469)Bug in
read_csv()
returning object dtype whendelimiter=","
withusecols
andparse_dates
specified forengine="python"
(GH35873)Bug in
read_csv()
raising aTypeError
whennames
andparse_dates
is specified forengine="c"
(GH33699)窃听
read_clipboard()
和DataFrame.to_clipboard()
不在WSL中工作 (GH38527 )Allow custom error values for the
parse_dates
argument ofread_sql()
,read_sql_query()
andread_sql_table()
(GH35185)Bug in
DataFrame.to_hdf()
andSeries.to_hdf()
raising aKeyError
when trying to apply for subclasses ofDataFrame
orSeries
(GH33748)窃听
HDFStore.put()
养错了人TypeError
保存具有非字符串数据类型的DataFrame时 (GH34274 )窃听
json_normalize()
导致生成器对象的第一个元素不包括在返回的DataFrame中 (GH35923 )Bug in
read_csv()
applying the thousands separator to date columns when the column should be parsed for dates andusecols
is specified forengine="python"
(GH39365)窃听
read_excel()
正向充填MultiIndex
指定多个标题列和索引列时的名称 (GH34673 )Bug in
read_excel()
not respectingset_option()
(GH34252)窃听
read_csv()
不切换true_values
和false_values
对于可为空的布尔数据类型 (GH34655 )窃听
read_json()
什么时候orient="split"
不维护数字字符串索引 (GH28556 )read_sql()
返回空的生成器,如果chunksize
为非零,并且查询未返回任何结果。现在返回一个带有单个空DataFrame的生成器 (GH34411 )窃听
read_hdf()
方法筛选类别字符串列时返回意外记录where
参数 (GH39189 )窃听
read_sas()
提高一名ValueError
什么时候datetimes
为空 (GH39725 )窃听
read_excel()
从单列电子表格中删除空值 (GH39808 )窃听
read_excel()
加载某些文件类型的尾随空行/空列 (GH41167 )窃听
read_excel()
举起一个AttributeError
当EXCEL文件具有MultiIndex
标题后面跟两个空行,没有索引 (GH40442 )窃听
read_excel()
,read_csv()
,read_table()
,read_fwf()
,以及read_clipboard()
其中,在一个MultiIndex
将丢弃没有索引的标头 (GH40442 )Bug in
DataFrame.to_string()
misplacing the truncation column whenindex=False
(GH40904)Bug in
DataFrame.to_string()
adding an extra dot and misaligning the truncation row whenindex=False
(GH40904)Bug in
read_orc()
always raising anAttributeError
(GH40918)Bug in
read_csv()
andread_table()
silently ignoringprefix
ifnames
andprefix
are defined, now raising aValueError
(GH39123)Bug in
read_csv()
andread_excel()
not respecting the dtype for a duplicated column name whenmangle_dupe_cols
is set toTrue
(GH35211)Bug in
read_csv()
silently ignoringsep
ifdelimiter
andsep
are defined, now raising aValueError
(GH39823)窃听
read_csv()
和read_table()
曲解论点时sys.setprofile
之前曾被称为 (GH41069 )使用可以为空的数据类型和数据缓冲区大小不是dtype大小倍数的PyArrow数组从PyArrow转换为Pandas时出错(例如,用于读取拼图) (GH40896 )
窃听
read_excel()
当Pandas无法确定文件类型时,即使用户指定了engine
论据 (GH41225 )窃听
read_clipboard()
如果第一列中存在空值,则从Excel文件中复制会将值转移到错误的列中 (GH41108 )窃听
DataFrame.to_hdf()
和Series.to_hdf()
提高一名TypeError
尝试将字符串列追加到不兼容的列时 (GH41897 )
期间#
标绘#
窃听
plotting.scatter_matrix()
在2d时引发ax
传递的参数 (GH16253 )当Matplotlib的
constrained_layout
已启用 (GH25261 )窃听
DataFrame.plot()
如果重复调用函数并使用某些调用,则在图例中显示错误的颜色yerr
而其他人则没有 (GH39522 )Bug in
DataFrame.plot()
was showing the wrong colors in the legend if the function was called repeatedly and some calls usedsecondary_y
and others uselegend=False
(GH40044)窃听
DataFrame.plot.box()
什么时候dark_background
已选择主题,绘图的大写字母或最小/最大值标记不可见 (GH40769 )
分组/重采样/滚动#
窃听
GroupBy.agg()
使用PeriodDtype
栏目错误地投射结果过于激进 (GH38254 )窃听
SeriesGroupBy.value_counts()
在分组的分类序列中未观察到的类别未被统计的情况下 (GH38672 )窃听
SeriesGroupBy.value_counts()
在空序列上引发错误的位置 (GH39172 )窃听
GroupBy.indices()
当Groupby键中存在空值时,将包含不存在的索引 (GH9304 )修复了中的错误
GroupBy.sum()
导致现在使用Kahan求和造成精度损失 (GH38778 )修复了中的错误
GroupBy.cumsum()
和GroupBy.mean()
使用Kahan求和造成精度损失 (GH38934 )窃听
Resampler.aggregate()
和DataFrame.transform()
提高一名TypeError
而不是SpecificationError
当丢失的键具有混合数据类型时 (GH39025 )窃听
DataFrameGroupBy.idxmin()
和DataFrameGroupBy.idxmax()
使用ExtensionDtype
列 (GH38733 )Bug in
Series.resample()
would raise when the index was aPeriodIndex
consisting ofNaT
(GH39227)窃听
RollingGroupby.corr()
和ExpandingGroupby.corr()
Groupby列将返回的位置0
而不是np.nan
当提供other
这比每一组都要长 (GH39591 )窃听
ExpandingGroupby.corr()
和ExpandingGroupby.cov()
哪里1
将被返回,而不是np.nan
当提供other
这比每一组都要长 (GH39591 )窃听
GroupBy.mean()
,GroupBy.median()
和DataFrame.pivot_table()
不传播元数据 (GH28283 )窃听
Series.rolling()
和DataFrame.rolling()
当窗口为偏移量且日期按降序排列时,无法正确计算窗口边界 (GH40002 )Bug in
Series.groupby()
andDataFrame.groupby()
on an emptySeries
orDataFrame
would lose index, columns, and/or data types when directly using the methodsidxmax
,idxmin
,mad
,min
,max
,sum
,prod
, andskew
or using them throughapply
,aggregate
, orresample
(GH26411)窃听
GroupBy.apply()
其中一个MultiIndex
将被创建,而不是创建Index
当在RollingGroupby
对象 (GH39732 )Bug in
DataFrameGroupBy.sample()
where an error was raised whenweights
was specified and the index was anInt64Index
(GH39927)窃听
DataFrameGroupBy.aggregate()
和Resampler.aggregate()
有时会引发一个SpecificationError
传递时,字典和列将丢失;现在将始终引发KeyError
取而代之的是 (GH40004 )窃听
DataFrameGroupBy.sample()
其中,在计算结果之前未应用列选择 (GH39928 )Bug in
ExponentialMovingWindow
when calling__getitem__
would incorrectly raise aValueError
when providingtimes
(GH40164)窃听
ExponentialMovingWindow
当呼叫__getitem__
不会保留com
,span
,alpha
或halflife
属性 (GH40164 )ExponentialMovingWindow
现在引发一个NotImplementedError
当指定times
使用adjust=False
由于计算错误 (GH40098 )Bug in
ExponentialMovingWindowGroupby.mean()
where thetimes
argument was ignored whenengine='numba'
(GH40951)窃听
ExponentialMovingWindowGroupby.mean()
在多个组的情况下使用了错误的时间 (GH40951 )窃听
ExponentialMovingWindowGroupby
对于非平凡的组,时间向量和值变得不同步 (GH40951 )窃听
Series.asfreq()
和DataFrame.asfreq()
在索引未排序时删除行 (GH39805 )的聚合函数中存在错误
DataFrame
不尊重numeric_only
在以下情况下的参数level
已给出关键字 (GH40660 )窃听
SeriesGroupBy.aggregate()
使用用户定义的函数将系列与对象类型的Index
导致不正确的Index
形状 (GH40014 )窃听
RollingGroupby
哪里as_index=False
中的参数groupby
被忽略了 (GH39433 )Bug in
GroupBy.any()
andGroupBy.all()
raising aValueError
when using with nullable type columns holdingNA
even withskipna=True
(GH40585)窃听
GroupBy.cummin()
和GroupBy.cummax()
参数附近的整数值进行错误舍入。int64
实现范围 (GH40767 )Bug in
GroupBy.rank()
with nullable dtypes incorrectly raising aTypeError
(GH41010)窃听
GroupBy.cummin()
和GroupBy.cummax()
在强制转换为浮点型时,由于可为空的数据类型太大而无法往返计算错误结果 (GH37493 )窃听
DataFrame.rolling()
返回所有人的平均值为零NaN
窗,带min_periods=0
如果计算不是数值稳定 (GH41053 )窃听
DataFrame.rolling()
返回所有对象的总和不为零NaN
窗,带min_periods=0
如果计算不是数值稳定 (GH41053 )窃听
SeriesGroupBy.agg()
没有保留命令CategoricalDtype
关于保序集结 (GH41147 )Bug in
GroupBy.min()
andGroupBy.max()
with multiple object-dtype columns andnumeric_only=False
incorrectly raising aValueError
(GH41111)Bug in
DataFrameGroupBy.rank()
with the GroupBy object'saxis=0
and therank
method's keywordaxis=1
(GH41320)Bug in
DataFrameGroupBy.__getitem__()
with non-unique columns incorrectly returning a malformedSeriesGroupBy
instead ofDataFrameGroupBy
(GH41427)Bug in
DataFrameGroupBy.transform()
with non-unique columns incorrectly raising anAttributeError
(GH41427)窃听
Resampler.apply()
使用非唯一列错误地删除重复的列 (GH41445 )窃听
Series.groupby()
聚合错误地返回空Series
与其提高TypeError
对于对其数据类型无效的聚合,例如.prod
使用datetime64[ns]
数据类型 (GH41342 )窃听
DataFrameGroupBy
当没有有效列时,聚合错误地无法删除具有该聚合的无效数据类型的列 (GH41291 )窃听
DataFrame.rolling.__iter__()
哪里on
未分配给结果对象的索引 (GH40373 )窃听
DataFrameGroupBy.transform()
和DataFrameGroupBy.agg()
使用engine="numba"
哪里*args
正在使用用户传递的函数进行缓存 (GH41647 )Bug in
DataFrameGroupBy
methodsagg
,transform
,sum
,bfill
,ffill
,pad
,pct_change
,shift
,ohlc
dropping.columns.names
(GH41497)
重塑#
窃听
merge()
使用部分索引执行内连接时引发错误right_index=True
当索引之间没有重叠时 (GH33814 )窃听
DataFrame.unstack()
缺少级别会导致索引名称不正确 (GH37510 )窃听
merge_asof()
通过以下方式传播正确的索引left_index=True
和right_on
规格而不是左索引 (GH33463 )窃听
DataFrame.join()
在具有MultiIndex
当两个索引中的一个只有一个级别时返回错误结果 (GH36909 )merge_asof()
现在引发一个ValueError
而不是神秘的TypeError
在非数字合并列的情况下 (GH29130 )窃听
DataFrame.join()
当DataFrame具有MultiIndex
其中至少有一个维度具有数据类型Categorical
具有未按字母顺序排序的类别 (GH38502 )Series.value_counts()
和Series.mode()
现在以原始顺序返回一致的键 (GH12679 , GH11227 和 GH39007 )窃听
DataFrame.stack()
未处理NaN
在……里面MultiIndex
正确的列 (GH39481 )窃听
DataFrame.apply()
会给出不正确的结果func
是一根线,axis=1
,并且不支持轴参数;现在引发ValueError
取而代之的是 (GH39211 )Bug in
DataFrame.sort_values()
not reshaping the index correctly after sorting on columns whenignore_index=True
(GH39464)窃听
DataFrame.append()
返回具有以下组合的不正确数据类型ExtensionDtype
数据类型 (GH39454 )窃听
DataFrame.append()
与组合使用时返回不正确的数据类型datetime64
和timedelta64
数据类型 (GH39574 )Bug in
DataFrame.append()
with aDataFrame
with aMultiIndex
and appending aSeries
whoseIndex
is not aMultiIndex
(GH41707)窃听
DataFrame.pivot_table()
返回一个MultiIndex
在空DataFrame上操作时获取单个值 (GH13483 )Index
现在可以传递给numpy.all()
功能 (GH40180 )Bug in
DataFrame.stack()
not preservingCategoricalDtype
in aMultiIndex
(GH36991)窃听
to_datetime()
当输入序列包含不可散列的项时引发错误 (GH39756 )窃听
Series.explode()
在以下情况下保留索引ignore_index
曾经是True
并且值是标量 (GH40487 )窃听
to_datetime()
提高一名ValueError
什么时候Series
包含None
和NaT
有50多种元素 (GH39882 )Bug in
Series.unstack()
andDataFrame.unstack()
with object-dtype values containing timezone-aware datetime objects incorrectly raisingTypeError
(GH41875)Bug in
DataFrame.melt()
raisingInvalidIndexError
whenDataFrame
has duplicate columns used asvalue_vars
(GH41951)
稀疏#
Bug in
DataFrame.sparse.to_coo()
raising aKeyError
with columns that are a numericIndex
without a0
(GH18414)窃听
SparseArray.astype()
使用copy=False
从整型数据类型转换为浮点型数据类型时产生错误的结果 (GH34456 )窃听
SparseArray.max()
和SparseArray.min()
将始终返回空结果 (GH40921 )
ExtensionArray#
Bug in
DataFrame.where()
whenother
is a Series with anExtensionDtype
(GH38729)Fixed bug where
Series.idxmax()
,Series.idxmin()
,Series.argmax()
, andSeries.argmin()
would fail when the underlying data is anExtensionArray
(GH32749, GH33719, GH36566)修复了某些子类的某些属性
PandasExtensionDtype
缓存不正确的位置 (GH40329 )Bug in
DataFrame.mask()
where masking a DataFrame with anExtensionDtype
raises aValueError
(GH40941)
造型师#
窃听
Styler.background_gradient()
未正确确定文本颜色的位置 (GH39888 )窃听
Styler.set_table_styles()
的css-选择器中的多个元素table_styles
参数未正确添加 (GH34061 )窃听
Styler.where
哪里kwargs
未传递给适用的可调用对象 (GH40845 )
其他#
inspect.getmembers(Series)
no longer raises anAbstractMethodError
(GH38782)Bug in
Series.where()
with numeric dtype andother=None
not casting tonan
(GH39761)窃听
assert_series_equal()
,assert_frame_equal()
,assert_index_equal()
和assert_extension_array_equal()
当属性具有无法识别的NA类型时错误引发 (GH39461 )窃听
assert_index_equal()
使用exact=True
比较时不提高CategoricalIndex
实例具有Int64Index
和RangeIndex
范畴 (GH41263 )Bug in
DataFrame.equals()
,Series.equals()
, andIndex.equals()
with object-dtype containingnp.datetime64("NaT")
ornp.timedelta64("NaT")
(GH39650)窃听
show_versions()
控制台JSON输出不是正确的JSON (GH39701 )Bug in
pandas.util.hash_pandas_object()
not recognizinghash_key
,encoding
andcategorize
when the input object type is aDataFrame
(GH41404)
贡献者#
共有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 +