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 )
Stylerrendered 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 )ExponentialMovingWindownow support aonlinemethod that can performmeancalculations in an online fashion. See Window Overview (GH41673)Added
MultiIndex.dtypes()(GH37062)Added
endandend_dayoptions for theoriginargument inDataFrame.resample()(GH37804)Improved error message when
usecolsandnamesdo not match forread_csv()andengine="c"(GH29042)Improved consistency of error messages when passing an invalid
win_typeargument 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_namesandMultiIndex.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
DataFrameindexer toilocis 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)RangeIndexcan now be constructed by passing arangeobject 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 withobjectdata containingpd.NAeven whenskipna=True(GH37501)GroupBy.rank()现在支持对象数据类型数据 (GH38278 )Constructing a
DataFrameorSerieswith thedataargument being a Python iterable that is not a NumPyndarrayconsisting of NumPy scalars will now result in a dtype with a precision the maximum of the NumPy scalars; this was already the case whendatais a NumPyndarray(GH40908)添加关键字
sort至pivot_table()要允许对结果不排序,请执行以下操作 (GH39143 )添加关键字
dropna至DataFrame.value_counts()要允许对包含以下内容的行进行计数,请执行以下操作NA值 (GH41325 )Series.replace()现在将结果转换为PeriodDtype在可能的情况下,代替object数据类型 (GH41526 )Improved error message in
corrandcovmethods onRolling,Expanding, andExponentialMovingWindowwhenotheris not aDataFrameorSeries(GH41741)Series.between()现在可以接受left或right作为参数inclusive仅包括左边界或右边界 (GH40245 )DataFrame.explode()现在支持分解多个柱。它的column参数现在还接受同时在多个列上分解的字符串或元组的列表 (GH39240 )DataFrame.sample()now accepts theignore_indexargument 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
engineand**engine_kwargsparameters toDataFrame.to_sql()to support other future "SQL engines". Currently we still only useSQLAlchemyunder the hood, but more engines are planned to be supported such as turbodbc (GH36893)删除冗余
freq从…PeriodIndex字符串表示法 (GH41653 )ExtensionDtype.construct_array_type()现在是必需的方法,而不是ExtensionDtype子类 (GH24860 )Calling
hashon non-hashable pandas objects will now raiseTypeErrorwith 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
Timestampobjects withdatetime.dateobjects. Instead of e.g.ts <= mydateusets <= pd.Timestamp(mydate)orts.date() <= mydate(GH36131)Deprecated
Rolling.win_typereturning"freq"(GH38963)Deprecated
Rolling.is_datetimelike(GH38963)Deprecated
DataFrameindexer 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_linesandwarn_bad_linesinread_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_floatoptional argument inread_excel()andExcelFile.parse()(GH41127)不推荐使用的行为
DatetimeIndex.union()具有混合时区;在未来版本中,两者都将转换为UTC,而不是对象dtype (GH39328 )Deprecated using
usecolswith out of bounds indices forread_csv()withengine="c"(GH25623)中第一个元素为范畴的列表的特殊处理
DataFrame构造函数;作为pd.DataFrame({{col: categorical, ...}})取而代之的是 (GH38845 )不推荐使用的行为
DataFrame构造函数时,dtype则不能将数据强制转换为该数据类型。在将来的版本中,这将被引发,而不是被默默忽略 (GH24435 )Deprecated the
Timestamp.freqattribute. 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
SeriesorDataFramewithdatetime64[ns]data andDatetimeTZDtypewill 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
keytoDataFrame.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
Stylerwhere 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失败时,如果IndexPassed不是绝对的,但其值是类别中的所有标签 (GH28690 )Bug where constructing a
Categoricalfrom an object-dtype array ofdateobjects did not round-trip correctly withastype(GH38552)Bug in constructing a
DataFramefrom anndarrayand aCategoricalDtype(GH38857)Bug in setting categorical values into an object-dtype column in a
DataFrame(GH39136)Bug in
DataFrame.reindex()was raising anIndexErrorwhen 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
DataFrameorSerieswith mismatcheddatetime64data andtimedelta64dtype, 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 castingdatetime64values toint64(GH37682)Bug in
Categoricalincorrectly typecastingdatetimeobject toTimestamp(GH38878)Bug in comparisons between
Timestampobject anddatetime64objects 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
Seriesbacked byDatetimeArrayorTimedeltaArraysometimes failing to set the array'sfreqtoNone(GH41425)
Timedelta#
Bug in constructing
Timedeltafromnp.timedelta64objects with non-nanosecond units that are out of bounds fortimedelta64[ns](GH38965)在构造一个
TimedeltaIndex错误地接受np.datetime64("NaT")对象 (GH39462 )Bug in
TimedeltaIndexandto_timedelta()failing to raise when passed non-nanosecondtimedelta64arrays that overflow when converting totimedelta64[ns](GH40008)
时区#
数字#
窃听
DataFrame.quantile(),DataFrame.sort_values()导致不正确的后续索引行为 (GH38351 )Bug in
DataFrame.sort_values()raising anIndexErrorfor 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=0and 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 anint32result 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.int64dtypeotherincorrectly 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
DataFramefailing to raise aTypeErrorwhen 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
Seriesfrom 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()withStringArrayreturning object dtype for an emptyDataFrame(GH41441)Bug in
Series.str.replace()where thecaseargument 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 duplicateIndexvalues whenIndexwas not monotonic orsortwas 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 aTypeErrorformethod="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 raisingKeyErrorwhenkey=NaNandmethodis specified butNaNis 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 aInt64Indexinstead 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__()withExtensionDtypeincorrectly casting tondarray(GH40386)窃听
DataFrame.at()使用一个CategoricalIndex传递整型键时返回错误结果 (GH41846 )窃听
DataFrame.loc()返回一个MultiIndex如果索引器有重复项,则顺序错误 (GH40978 )Bug in
DataFrame.__setitem__()raising aTypeErrorwhen using astrsubclass as the column name with aDatetimeIndex(GH37366)Bug in
PeriodIndex.get_loc()failing to raise aKeyErrorwhen given aPeriodwith a mismatchedfreq(GH41670)虫虫
.loc.__getitem__使用一个UInt64Index和负整数键提升OverflowError而不是KeyError在某些情况下,在其他情况下绕回到正整数 (GH41777 )窃听
Index.get_indexer()未能筹集到ValueError在某些情况下,无效method,limit,或tolerance论据 (GH41918 )Bug when slicing a
SeriesorDataFramewith aTimedeltaIndexwhen passing an invalid string raisingValueErrorinstead of aTypeError(GH41821)Bug in
Indexconstructor 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
Grouperdid not correctly propagate thedropnaargument;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
DataFrameconstruction with float data containingNaNand an integerdtypecasting 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()raisingTypeErrorwhen 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 argumentdecimalis set andengine="python"(GH31920)Bug in
read_csv()interpretingNAvalue as comment, whenNAdoes contain the comment string fixed forengine="python"(GH34002)窃听
read_csv()举起一个IndexError具有多个标题列和index_col当文件没有数据行时指定 (GH38292 )Bug in
read_csv()not acceptingusecolswith a different length thannamesforengine="python"(GH16469)Bug in
read_csv()returning object dtype whendelimiter=","withusecolsandparse_datesspecified forengine="python"(GH35873)Bug in
read_csv()raising aTypeErrorwhennamesandparse_datesis specified forengine="c"(GH33699)窃听
read_clipboard()和DataFrame.to_clipboard()不在WSL中工作 (GH38527 )Allow custom error values for the
parse_datesargument ofread_sql(),read_sql_query()andread_sql_table()(GH35185)Bug in
DataFrame.to_hdf()andSeries.to_hdf()raising aKeyErrorwhen trying to apply for subclasses ofDataFrameorSeries(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 andusecolsis 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 ignoringprefixifnamesandprefixare defined, now raising aValueError(GH39123)Bug in
read_csv()andread_excel()not respecting the dtype for a duplicated column name whenmangle_dupe_colsis set toTrue(GH35211)Bug in
read_csv()silently ignoringsepifdelimiterandsepare 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_yand 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 aPeriodIndexconsisting 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 emptySeriesorDataFramewould lose index, columns, and/or data types when directly using the methodsidxmax,idxmin,mad,min,max,sum,prod, andskewor using them throughapply,aggregate, orresample(GH26411)窃听
GroupBy.apply()其中一个MultiIndex将被创建,而不是创建Index当在RollingGroupby对象 (GH39732 )Bug in
DataFrameGroupBy.sample()where an error was raised whenweightswas specified and the index was anInt64Index(GH39927)窃听
DataFrameGroupBy.aggregate()和Resampler.aggregate()有时会引发一个SpecificationError传递时,字典和列将丢失;现在将始终引发KeyError取而代之的是 (GH40004 )窃听
DataFrameGroupBy.sample()其中,在计算结果之前未应用列选择 (GH39928 )Bug in
ExponentialMovingWindowwhen calling__getitem__would incorrectly raise aValueErrorwhen providingtimes(GH40164)窃听
ExponentialMovingWindow当呼叫__getitem__不会保留com,span,alpha或halflife属性 (GH40164 )ExponentialMovingWindow现在引发一个NotImplementedError当指定times使用adjust=False由于计算错误 (GH40098 )Bug in
ExponentialMovingWindowGroupby.mean()where thetimesargument 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 aValueErrorwhen using with nullable type columns holdingNAeven 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=Falseincorrectly raising aValueError(GH41111)Bug in
DataFrameGroupBy.rank()with the GroupBy object'saxis=0and therankmethod's keywordaxis=1(GH41320)Bug in
DataFrameGroupBy.__getitem__()with non-unique columns incorrectly returning a malformedSeriesGroupByinstead 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
DataFrameGroupBymethodsagg,transform,sum,bfill,ffill,pad,pct_change,shift,ohlcdropping.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 aDataFramewith aMultiIndexand appending aSerieswhoseIndexis not aMultiIndex(GH41707)窃听
DataFrame.pivot_table()返回一个MultiIndex在空DataFrame上操作时获取单个值 (GH13483 )Index现在可以传递给numpy.all()功能 (GH40180 )Bug in
DataFrame.stack()not preservingCategoricalDtypein 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()raisingInvalidIndexErrorwhenDataFramehas duplicate columns used asvalue_vars(GH41951)
稀疏#
Bug in
DataFrame.sparse.to_coo()raising aKeyErrorwith columns that are a numericIndexwithout a0(GH18414)窃听
SparseArray.astype()使用copy=False从整型数据类型转换为浮点型数据类型时产生错误的结果 (GH34456 )窃听
SparseArray.max()和SparseArray.min()将始终返回空结果 (GH40921 )
ExtensionArray#
Bug in
DataFrame.where()whenotheris 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 anExtensionDtyperaises 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=Nonenot 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,encodingandcategorizewhen 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 +