1.0.0 的新增功能(2020 年 1 月 29 日)# 这些是 pandas 1.0.0 中的变化。请参阅发行说明以获取完整的变更日志,包括其他版本的 pandas。 笔记 pandas 1.0 版本删除了许多以前版本中已弃用的功能(请参阅下面的 概述)。建议首先升级到 pandas 0.25 并确保您的代码在升级到 pandas 1.0 之前可以正常运行且不会出现警告。 新的弃用政策# 从pandas 1.0.0开始,pandas将采用SemVer的变体来进行版本发布。简要地, 弃用将在次要版本中引入(例如 1.1.0、1.2.0、2.1.0,...) 弃用将在主要版本中强制执行(例如 1.0.0、2.0.0、3.0.0,...) 仅在主要版本中才会进行 API 破坏性更改(实验性功能除外) 有关更多信息,请参阅版本政策。 增强功能# rolling.apply在and #中使用 Numbaexpanding.apply 我们添加了一个engine关键字apply()和apply() ,允许用户使用Numba而不是 Cython 执行例程。如果 apply 函数可以在 numpy 数组上运行并且数据集更大(100 万行或更多),那么使用 Numba 引擎可以显着提高性能。有关更多详细信息,请参阅 滚动应用文档(GH 28987、GH 30936) 定义滚动操作的自定义窗口# 我们添加了一个pandas.api.indexers.BaseIndexer()类,允许用户定义在rolling操作期间如何创建窗口边界。用户可以在子类上定义自己的get_window_bounds 方法pandas.api.indexers.BaseIndexer(),该方法将生成滚动聚合期间用于每个窗口的开始和结束索引。有关更多详细信息和示例用法,请参阅自定义窗口滚动文档 转换为Markdown# 我们添加了to_markdown()用于创建Markdown表(GH 11052) In [1]: df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b']) In [2]: print(df.to_markdown()) | | A | B | |:---|----:|----:| | a | 1 | 1 | | a | 2 | 2 | | b | 3 | 3 | 实验性新功能# NA表示缺失值的实验标量# 引入了一个新pd.NA值(单例)来表示标量缺失值。到目前为止,pandas 使用多个值来表示缺失的数据:np.nan用于浮点数据、np.nan对象 None数据类型数据和pd.NaT类似日期时间的数据。目标pd.NA是提供一个可以跨数据类型一致使用的“缺失”指标。目前由可空整数和布尔数据类型以及新的字符串数据类型( GH 28095pd.NA )使用。 警告 实验性: 的行为pd.NA仍然可以在没有警告的情况下发生变化。 例如,使用可为空整数数据类型创建一个 Series: In [3]: s = pd.Series([1, 2, None], dtype="Int64") In [4]: s Out[4]: 0 1 1 2 2 <NA> dtype: Int64 In [5]: s[2] Out[5]: <NA> 与 相比np.nan,pd.NA在某些操作中的行为有所不同。除了算术运算之外,pd.NA还在比较运算中传播为“缺失”或“未知”: In [6]: np.nan > 1 Out[6]: False In [7]: pd.NA > 1 Out[7]: <NA> 对于逻辑运算,遵循三值逻辑(或 克林逻辑pd.NA)的规则 。例如: In [8]: pd.NA | True Out[8]: True 有关详细信息,请参阅用户指南中有关缺失数据的NA 部分。 专用字符串数据类型# 我们添加了StringDtype专用于字符串数据的扩展类型。以前,字符串通常存储在对象数据类型 NumPy 数组中。 (GH 29975) 警告 StringDtype目前被认为是实验性的。 API 的实现和部分可能会在没有警告的情况下发生更改。 扩展类型'string'解决了对象数据类型 NumPy 数组的几个问题: 您可能会意外地将字符串和非字符串 混合object存储在dtype 数组中。 AStringArray只能存储字符串。 objectdtype 会破坏特定于 dtype 的操作,例如DataFrame.select_dtypes().没有明确的方法来仅选择文本,同时排除非文本,但仍然是对象数据类型列。 阅读代码时,dtype 数组的内容object不如string. In [9]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype()) Out[9]: 0 abc 1 <NA> 2 def dtype: string "string"您也可以使用别名。 In [10]: s = pd.Series(['abc', None, 'def'], dtype="string") In [11]: s Out[11]: 0 abc 1 <NA> 2 def dtype: string 通常的字符串访问器方法可以工作。在适当的情况下,DataFrame 的 Series 或列的返回类型也将具有字符串数据类型。 In [12]: s.str.upper() Out[12]: 0 ABC 1 <NA> 2 DEF dtype: string In [13]: s.str.split('b', expand=True).dtypes Out[13]: 0 string[python] 1 string[python] dtype: object 返回整数的字符串访问器方法将返回一个值Int64Dtype In [14]: s.str.count("a") Out[14]: 0 1 1 <NA> 2 0 dtype: Int64 我们建议string在处理字符串时显式使用数据类型。有关详细信息,请参阅文本数据类型。 支持缺失值的布尔数据类型# 我们添加了BooleanDtype/ BooleanArray,这是一种专用于可以保存缺失值的布尔数据的扩展类型。默认 bool数据类型基于 bool-dtype NumPy 数组,该列只能保存 True或False,并且不能保存缺失值。这个新功能BooleanArray 还可以通过在单独的掩码中跟踪缺失值来存储缺失值。 (GH 29555、GH 30095、GH 31131) In [15]: pd.Series([True, False, None], dtype=pd.BooleanDtype()) Out[15]: 0 True 1 False 2 <NA> dtype: boolean "boolean"您也可以使用别名。 In [16]: s = pd.Series([True, False, None], dtype="boolean") In [17]: s Out[17]: 0 True 1 False 2 <NA> dtype: boolean convert_dtypes简化使用支持的扩展数据类型的方法# 为了鼓励使用扩展 dtypes StringDtype、 BooleanDtype、Int64Dtype、Int32Dtype等,支持pd.NA、 方法DataFrame.convert_dtypes()和Series.convert_dtypes() 已被引入。 (GH 29752)(GH 30929) 例子: In [18]: df = pd.DataFrame({'x': ['abc', None, 'def'], ....: 'y': [1, 2, np.nan], ....: 'z': [True, False, True]}) ....: In [19]: df Out[19]: x y z 0 abc 1.0 True 1 None 2.0 False 2 def NaN True In [20]: df.dtypes Out[20]: x object y float64 z bool dtype: object In [21]: converted = df.convert_dtypes() In [22]: converted Out[22]: x y z 0 abc 1 True 1 <NA> 2 False 2 def <NA> True In [23]: converted.dtypes Out[23]: x string[python] y Int64 z boolean dtype: object read_csv() 在使用和等读取器读取数据后,这尤其有用read_excel()。请参阅此处了解说明。 其他增强功能# DataFrame.to_string()添加了max_colwidth参数来控制何时截断宽列(GH 9784) 添加了na_value参数Series.to_numpy(),Index.to_numpy()和DataFrame.to_numpy()来控制用于缺失数据的值 ( GH 30322 ) MultiIndex.from_product()如果未明确提供,则从输入推断级别名称(GH 27292) DataFrame.to_latex()现在接受caption和label争论(GH 25436) 具有可为空整数、新字符串数据类型和周期数据类型的DataFrame 现在可以转换为(>=0.15.0),这意味着在使用引擎 ( GH 28368 )pyarrow时支持写入 Parquet 文件格式。从 pyarrow >= 0.16 ( GH 20612 )开始,支持到parquet 的完整往返(使用/写入和读回) 。pyarrowto_parquet()read_parquet() to_parquet()现在可以正确处理schemapyarrow 引擎中用户定义模式的参数。 (GH 30270) DataFrame.to_json()现在接受indent整数参数以启用 JSON 输出的漂亮打印 ( GH 12004 ) read_stata()可以读取Stata 119 dta文件。 (GH 28250) 实施Window.var()和Window.std()功能(GH 26597) 为非 ascii 文本添加了encoding参数( GH 28766 )DataFrame.to_string() 添加了非 ascii 文本的encoding参数( GH 28663 )DataFrame.to_html() Styler.background_gradient()现在接受vmin和vmax争论(GH 12145) Styler.format()添加了na_rep参数以帮助格式化缺失值(GH 21527,GH 28358) read_excel().xlsb现在可以通过传递读取二进制 Excel( ) 文件engine='pyxlsb'。有关更多详细信息和示例用法,请参阅二进制 Excel 文件文档。关闭GH 8540。 partition_cols现在的参数接受DataFrame.to_parquet()一个字符串(GH 27117) pandas.read_json()现在解析NaN,Infinity并且-Infinity(GH 12213) DataFrame 构造函数保留ExtensionArray数据类型ExtensionArray(GH 11363) DataFrame.sort_values()并Series.sort_values()获得ignore_index关键字以便能够在排序后重置索引(GH 30114) DataFrame.sort_index()并Series.sort_index()获得了ignore_index重置索引的关键字(GH 30114) DataFrame.drop_duplicates()已获得ignore_index重置索引的关键字(GH 30114) 添加了用于在版本 118 和 119 中导出 Stata dta 文件的新编写器,StataWriterUTF8.这些文件格式支持导出包含 Unicode 字符的字符串。格式 119 支持具有超过 32,767 个变量的数据集(GH 23573、GH 30959) Series.map()现在接受collections.abc.Mapping子类作为映射器(GH 29733) attrs添加了用于存储有关数据集的全局元数据的实验( GH 29062) Timestamp.fromisocalendar()现在与 python 3.8 及更高版本兼容 ( GH 28115 ) DataFrame.to_pickle()现在read_pickle()接受 URL ( GH 30163 ) 向后不兼容的 API 更改# 避免使用MultiIndex.levels#中的名称 作为更大重构的一部分,MultiIndex级别名称现在与级别分开存储(GH 27242)。我们建议使用 MultiIndex.names来访问名称并Index.set_names() 更新名称。 为了向后兼容,您仍然可以通过级别访问名称。 In [24]: mi = pd.MultiIndex.from_product([[1, 2], ['a', 'b']], names=['x', 'y']) In [25]: mi.levels[0].name Out[25]: 'x' 但是,无法再 通过关卡更新名称。MultiIndex In [26]: mi.levels[0].name = "new name" --------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) Cell In[26], line 1 ----> 1 mi.levels[0].name = "new name" File ~/work/pandas/pandas/pandas/core/indexes/base.py:1690, in Index.name(self, value) 1686 @name.setter 1687 def name(self, value: Hashable) -> None: 1688 if self._no_setting_name: 1689 # Used in MultiIndex.levels to avoid silently ignoring name updates. -> 1690 raise RuntimeError( 1691 "Cannot set name on a level of a MultiIndex. Use " 1692 "'MultiIndex.set_names' instead." 1693 ) 1694 maybe_extract_name(value, None, type(self)) 1695 self._name = value RuntimeError: Cannot set name on a level of a MultiIndex. Use 'MultiIndex.set_names' instead. In [27]: mi.names Out[27]: FrozenList(['x', 'y']) 要更新,请使用MultiIndex.set_names,它返回一个新的MultiIndex. In [28]: mi2 = mi.set_names("new name", level=0) In [29]: mi2.names Out[29]: FrozenList(['new name', 'y']) #的新代表IntervalArray pandas.arrays.IntervalArray__repr__根据其他数组类采用新的( GH 25022) 熊猫 0.25.x In [1]: pd.arrays.IntervalArray.from_tuples([(0, 1), (2, 3)]) Out[2]: IntervalArray([(0, 1], (2, 3]], closed='right', dtype='interval[int64]') 熊猫1.0.0 In [30]: pd.arrays.IntervalArray.from_tuples([(0, 1), (2, 3)]) Out[30]: <IntervalArray> [(0, 1], (2, 3]] Length: 2, dtype: interval[int64, right] DataFrame.rename现在只接受一个位置参数# DataFrame.rename()之前会接受会导致不明确或未定义行为的位置参数。从 pandas 1.0 开始,只有第一个参数(将标签沿默认轴映射到其新名称)才允许按位置传递(GH 29136)。 熊猫 0.25.x In [1]: df = pd.DataFrame([[1]]) In [2]: df.rename({0: 1}, {0: 2}) Out[2]: FutureWarning: ...Use named arguments to resolve ambiguity... 2 1 1 熊猫1.0.0 In [3]: df.rename({0: 1}, {0: 2}) Traceback (most recent call last): ... TypeError: rename() takes from 1 to 2 positional arguments but 3 were given 请注意,当提供冲突或可能不明确的参数时,现在会引发错误。 熊猫 0.25.x In [4]: df.rename({0: 1}, index={0: 2}) Out[4]: 0 1 1 In [5]: df.rename(mapper={0: 1}, index={0: 2}) Out[5]: 0 2 1 熊猫1.0.0 In [6]: df.rename({0: 1}, index={0: 2}) Traceback (most recent call last): ... TypeError: Cannot specify both 'mapper' and any of 'index' or 'columns' In [7]: df.rename(mapper={0: 1}, index={0: 2}) Traceback (most recent call last): ... TypeError: Cannot specify both 'mapper' and any of 'index' or 'columns' 您仍然可以通过提供关键字参数来更改应用第一个位置参数的轴axis。 In [31]: df.rename({0: 1}) Out[31]: 0 1 1 In [32]: df.rename({0: 1}, axis=1) Out[32]: 1 0 1 如果您想同时更新索引和列标签,请务必使用相应的关键字。 In [33]: df.rename(index={0: 1}, columns={0: 2}) Out[33]: 2 1 1 # 的扩展详细信息输出DataFrame DataFrame.info()现在显示列摘要的行号(GH 17304) 熊猫 0.25.x In [1]: df = pd.DataFrame({"int_col": [1, 2, 3], ... "text_col": ["a", "b", "c"], ... "float_col": [0.0, 0.1, 0.2]}) In [2]: df.info(verbose=True) <class 'pandas.core.frame.DataFrame'> RangeIndex: 3 entries, 0 to 2 Data columns (total 3 columns): int_col 3 non-null int64 text_col 3 non-null object float_col 3 non-null float64 dtypes: float64(1), int64(1), object(1) memory usage: 152.0+ bytes 熊猫1.0.0 In [34]: df = pd.DataFrame({"int_col": [1, 2, 3], ....: "text_col": ["a", "b", "c"], ....: "float_col": [0.0, 0.1, 0.2]}) ....: In [35]: df.info(verbose=True) <class 'pandas.core.frame.DataFrame'> RangeIndex: 3 entries, 0 to 2 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 int_col 3 non-null int64 1 text_col 3 non-null object 2 float_col 3 non-null float64 dtypes: float64(1), int64(1), object(1) memory usage: 200.0+ bytes pandas.array()推理变化# pandas.array()现在在几种情况下推断 pandas 的新扩展类型(GH 29791): 字符串数据(包括缺失值)现在返回一个arrays.StringArray. 整数数据(包括缺失值)现在返回一个arrays.IntegerArray. 布尔数据(包括缺失值)现在返回新的arrays.BooleanArray 熊猫 0.25.x In [1]: pd.array(["a", None]) Out[1]: <PandasArray> ['a', None] Length: 2, dtype: object In [2]: pd.array([1, None]) Out[2]: <PandasArray> [1, None] Length: 2, dtype: object 熊猫1.0.0 In [36]: pd.array(["a", None]) Out[36]: <StringArray> ['a', <NA>] Length: 2, dtype: string In [37]: pd.array([1, None]) Out[37]: <IntegerArray> [1, <NA>] Length: 2, dtype: Int64 提醒一下,您可以指定dtype来禁用所有推理。 arrays.IntegerArray现在使用#pandas.NA arrays.IntegerArray现在使用pandas.NA而不是 numpy.nan作为其缺失值标记(GH 29964)。 熊猫 0.25.x In [1]: a = pd.array([1, 2, None], dtype="Int64") In [2]: a Out[2]: <IntegerArray> [1, 2, NaN] Length: 3, dtype: Int64 In [3]: a[2] Out[3]: nan 熊猫1.0.0 In [38]: a = pd.array([1, 2, None], dtype="Int64") In [39]: a Out[39]: <IntegerArray> [1, 2, <NA>] Length: 3, dtype: Int64 In [40]: a[2] Out[40]: <NA> 这会造成一些 API 破坏的后果。 转换为 NumPy ndarray 转换为 NumPy 数组时,缺失值将为pd.NA,无法转换为浮点数。所以 现在跟注将会加注。np.asarray(integer_array, dtype="float") 熊猫 0.25.x In [1]: np.asarray(a, dtype="float") Out[1]: array([ 1., 2., nan]) 熊猫1.0.0 In [41]: np.asarray(a, dtype="float") Out[41]: array([ 1., 2., nan]) arrays.IntegerArray.to_numpy()而是与显式一起使用na_value。 In [42]: a.to_numpy(dtype="float", na_value=np.nan) Out[42]: array([ 1., 2., nan]) 减价可以退货 pd.NA 当执行归约(例如与 求和)时skipna=False,结果现在将不是pd.NA存在np.nan缺失值(GH 30958)。 熊猫 0.25.x In [1]: pd.Series(a).sum(skipna=False) Out[1]: nan 熊猫1.0.0 In [43]: pd.Series(a).sum(skipna=False) Out[43]: <NA> value_counts 返回可为 null 的整数 dtype Series.value_counts()具有可为空整数 dtype 的现在返回值的可为空整数 dtype。 熊猫 0.25.x In [1]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype Out[1]: dtype('int64') 熊猫1.0.0 In [44]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype Out[44]: Int64Dtype() 有关 和之间差异的更多信息,请参阅NA 语义。pandas.NAnumpy.nan arrays.IntegerArray比较返回#arrays.BooleanArray a 上的比较操作arrays.IntegerArray现在返回 a arrays.BooleanArray而不是 NumPy 数组 ( GH 29964 )。 熊猫 0.25.x In [1]: a = pd.array([1, 2, None], dtype="Int64") In [2]: a Out[2]: <IntegerArray> [1, 2, NaN] Length: 3, dtype: Int64 In [3]: a > 1 Out[3]: array([False, True, False]) 熊猫1.0.0 In [45]: a = pd.array([1, 2, None], dtype="Int64") In [46]: a > 1 Out[46]: <BooleanArray> [False, True, <NA>] Length: 3, dtype: boolean 请注意,缺失值现在会传播,而不是总是像 那样比较不相等numpy.nan。有关更多信息,请参阅NA 语义。 默认情况下Categorical.min()现在返回最小值而不是 np.nan # 当Categoricalcontains时np.nan, Categorical.min()不再np.nan默认返回 (skipna=True) ( GH 25303 ) 熊猫 0.25.x In [1]: pd.Categorical([1, 2, np.nan], ordered=True).min() Out[1]: nan 熊猫1.0.0 In [47]: pd.Categorical([1, 2, np.nan], ordered=True).min() Out[47]: 1 默认数据类型为空#pandas.Series pandas.Series在不指定 dtype 的情况下初始化空将引发DeprecationWarningnow ( GH 17261 )。在未来的版本中,默认数据类型将从 更改为 ,float64以便object与DataFrame和的行为保持一致Index。 熊猫1.0.0 In [1]: pd.Series() Out[2]: DeprecationWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning. Series([], dtype: float64) 重新采样操作的结果数据类型推断发生变化# 聚合中结果 dtype 的规则DataFrame.resample()已针对扩展类型进行了更改 ( GH 31359 )。以前,pandas 会尝试将结果转换回原始数据类型,如果不可能,则返回到通常的推理规则。现在,如果结果中的标量值是扩展 dtype 标量类型的实例,pandas 将仅返回原始 dtype 的结果。 In [48]: df = pd.DataFrame({"A": ['a', 'b']}, dtype='category', ....: index=pd.date_range('2000', periods=2)) ....: In [49]: df Out[49]: A 2000-01-01 a 2000-01-02 b 熊猫 0.25.x In [1]> df.resample("2D").agg(lambda x: 'a').A.dtype Out[1]: CategoricalDtype(categories=['a', 'b'], ordered=False) 熊猫1.0.0 In [50]: df.resample("2D").agg(lambda x: 'a').A.dtype Out[50]: CategoricalDtype(categories=['a', 'b'], ordered=False, categories_dtype=object) resample这修复了和之间的不一致groupby。这还修复了一个潜在的错误,即结果的值可能会根据结果转换回原始数据类型的方式而发生变化。 熊猫 0.25.x In [1] df.resample("2D").agg(lambda x: 'c') Out[1]: A 0 NaN 熊猫1.0.0 In [51]: df.resample("2D").agg(lambda x: 'c') Out[51]: A 2000-01-01 c 增加了 Python 的最低版本# pandas 1.0.0 支持 Python 3.6.1 及更高版本 ( GH 29212 )。 增加了依赖项的最低版本# 更新了一些依赖项的最低支持版本(GH 29766、GH 29723)。如果安装了,我们现在需要: 包裹 最低版本 必需的 改变了 麻木 1.13.3 X 皮茨 2015.4 X python-dateutil 2.6.1 X 瓶颈 1.2.1 数值表达式 2.6.2 pytest(开发) 4.0.2 对于可选库,一般建议使用最新版本。下表列出了当前在 pandas 开发过程中测试的每个库的最低版本。低于最低测试版本的可选库可能仍然有效,但不被视为受支持。 包裹 最低版本 改变了 美丽汤4 4.6.0 快速镶木地板 0.3.2 X GCSFS 0.2.2 lxml 3.8.0 绘图库 2.2.2 努巴 0.46.0 X 开放式pyxl 2.5.7 X 皮箭头 0.13.0 X pymysql 0.7.1 pytables 3.4.2 s3fs 0.3.0 X scipy 0.19.0 sqlalchemy 1.1.4 阵列 0.8.2 xlrd 1.1.0 XLSX作家 0.9.8 xlwt 1.2.0 有关更多信息,请参阅依赖项和可选依赖项。 构建更改# pandas 添加了pyproject.toml文件,并且将不再在上传到 PyPI 的源发行版中包含 cythonized 文件(GH 28341、GH 20775)。如果您正在安装内置发行版(轮子)或通过 conda,这应该不会对您产生任何影响。如果您从源代码构建 pandas,则在调用.pip install pandas 其他 API 更改# DataFrameGroupBy.transform()现在SeriesGroupBy.transform()引发无效操作名称(GH 27489) pandas.api.types.infer_dtype()现在将返回整数和np.nan混合的“integer-na”(GH 27283) MultiIndex.from_arrays()names=None如果明确提供,将不再从数组推断名称( GH 27292) 为了改进制表符补全,pandas 在使用dir(例如dir(df))内省 pandas 对象时不包含大多数已弃用的属性。要查看排除了哪些属性,请查看对象的_deprecations属性,例如pd.DataFrame._deprecations( GH 28805 )。 现在返回的数据类型unique()与输入数据类型匹配。 (GH 27874) 将默认配置值从 更改options.matplotlib.register_converters为True( "auto"GH 18720 )。现在,pandas 自定义格式化程序将仅应用于 pandas 通过plot().以前,pandas 的格式化程序将应用于.pandas之后plot()创建的所有绘图。有关更多信息,请参阅单位注册。 Series.dropna()放弃了它的**kwargs论点,转而支持单个how参数。提供除之前how提出**kwargs的任何其他内容TypeError( GH 29388 ) 测试 pandas 时,新的 pytest 最低版本要求是 5.0.1 ( GH 29664 ) Series.str.__iter__()已弃用并将在未来版本中删除 ( GH 28277 )。 添加到( GH 30821 )<NA>的默认 NA 值列表中read_csv() 文档改进# 添加了有关大型数据集缩放的新部分( GH 28315 )。 添加了有关 HDF5 数据集的查询多索引的小节( GH 28791 )。 弃用# Series.item()并Index.item()已_未弃用_ ( GH 29250 ) Index.set_value已被弃用。对于给定的索引idx,数组arr,值idx和idx_val新值val, 相当于,应该使用它(GH 28621)。idx.set_value(arr, idx_val, val)arr[idx.get_loc(idx_val)] = val is_extension_type()已弃用,is_extension_array_dtype()应改用 ( GH 29457 ) eval()关键字参数“truediv”已弃用,并将在未来版本中删除(GH 29812) DateOffset.isAnchored()已DatetOffset.onOffset()弃用,并将在未来版本中删除,请使用DateOffset.is_anchored()andDateOffset.is_on_offset()代替 ( GH 30340 ) pandas.tseries.frequencies.get_offset已弃用并将在未来版本中删除,请改用pandas.tseries.frequencies.to_offset( GH 4205 ) Categorical.take_nd()和CategoricalIndex.take_nd()已弃用,请使用Categorical.take()和CategoricalIndex.take()代替 ( GH 27745 ) 和numeric_only的参数已弃用并替换为( GH 25303 )Categorical.min()Categorical.max()skipna label中的参数lreshape()已被弃用,并将在未来版本中删除(GH 29742) pandas.core.index已被弃用并将在未来版本中删除,公共类在顶级命名空间中可用(GH 19711) pandas.json_normalize()现在暴露在顶级命名空间中。现在不推荐使用json_normalizeas pandas.io.json.json_normalize,建议使用json_normalizeaspandas.json_normalize()代替 ( GH 27586 )。 numpy的参数已pandas.read_json()弃用(GH 28512)。 DataFrame.to_stata()、DataFrame.to_feather()和DataFrame.to_parquet()参数“fname”已弃用,请使用“path”代替(GH 23574) 已弃用的内部属性_start,现在提出 a_stop而不是 a ( GH 26581 )_stepRangeIndexFutureWarningDeprecationWarning 该pandas.util.testing模块已被弃用。使用断言函数( GH 16232pandas.testing ) 中记录的公共 API 。 pandas.SparseArray已被弃用。使用pandas.arrays.SparseArray( arrays.SparseArray) 代替。 (GH 30642) is_copyand参数已被弃用Series.take(),DataFrame.take()并将在未来版本中删除。 (GH 27357) 对 a 的多维索引(例如)的支持已被弃用,并将在未来版本中删除,在索引之前转换为 numpy 数组(GH 30588)index[:, None]Index 该pandas.np子模块现已弃用。直接导入 numpy ( GH 30296 ) 该类pandas.datetime现已弃用。改为导入datetime( GH 30610 ) diffTypeError将来会引发而不是隐式丢失扩展类型的 dtype 。在调用之前转换为正确的数据类型diff(GH 31025) 从分组数据框中选择列 从对象中选择列时DataFrameGroupBy,不推荐在单括号内传递单个键(或键元组),而应使用项目列表。 ( GH 23566 ) 例如: df = pd.DataFrame({ "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], "B": np.random.randn(8), "C": np.random.randn(8), }) g = df.groupby('A') # single key, returns SeriesGroupBy g['B'] # tuple of single key, returns SeriesGroupBy g[('B',)] # tuple of multiple keys, returns DataFrameGroupBy, raises FutureWarning g[('B', 'C')] # multiple keys passed directly, returns DataFrameGroupBy, raises FutureWarning # (implicitly converts the passed strings into a single tuple) g['B', 'C'] # proper way, returns DataFrameGroupBy g[['B', 'C']] 删除先前版本的弃用/更改# 删除了 SparseSeries 和 SparseDataFrame SparseSeries,SparseDataFrame并且该DataFrame.to_sparse方法已被删除(GH 28425)。我们建议改为使用 aSeries或 DataFrame与稀疏值。 Matplotlib 单元注册 以前,pandas 会向 matplotlib 注册转换器,作为导入 pandas 的副作用(GH 18720)。这改变了导入 pandas 后通过 matplotlib 图绘制的图的输出,即使您直接使用 matplotlib 而不是plot(). 要将 pandas 格式化程序与 matplotlib 图结合使用,请指定 In [1]: import pandas as pd In [2]: pd.options.plotting.matplotlib.register_converters = True DataFrame.plot()请注意,由和 所创建的绘图会自动注册转换器。唯一的行为变化是通过 或绘制类似日期的对象时。有关更多信息,请参阅时间序列图的自定义格式化程序。Series.plot() matplotlib.pyplot.plotmatplotlib.Axes.plot 其他搬迁 read_stata()从、StataReader和 中删除了之前已弃用的关键字“index” StataReader.read(),改用“index_col”(GH 17328) 删除StataReader.data方法,改用StataReader.read()(GH 9493) 删除pandas.plotting._matplotlib.tsplot,改用Series.plot()(GH 19980) pandas.tseries.converter.register已移至pandas.plotting.register_matplotlib_converters()(GH 18307) Series.plot()不再接受位置参数,而是传递关键字参数(GH 30003) DataFrame.hist()并且Series.hist()不再允许figsize="default"通过传递元组来指定图形大小(GH 30003) 整数类型数组的 Floordiv 现在Timedelta升高TypeError(GH 21036) TimedeltaIndex并且DatetimeIndex不再接受非纳秒数据类型字符串,例如“timedelta64”或“datetime64”,请使用“timedelta64[ns]”和“datetime64[ns]”代替(GH 24806) 将默认的“skipna”参数从pandas.api.types.infer_dtype()from更改False为True( GH 24050 ) 删除Series.ix并DataFrame.ix(GH 26438) 已删除Index.summary(GH 18217) 从构造函数中删除了之前已弃用的关键字“fastpath” Index(GH 23110) 已删除Series.get_value,,,, ( GH 17739 )Series.set_valueDataFrame.get_valueDataFrame.set_value 删除Series.compound并DataFrame.compound(GH 26405) 将默认的“inplace”参数从和DataFrame.set_index()更改为( GH 27600 )Series.set_axis()NoneFalse 已删除Series.cat.categorical, Series.cat.index, Series.cat.name( GH 24751 ) to_datetime()从and中删除了之前已弃用的关键字“box” to_timedelta();此外,这些现在总是返回DatetimeIndex, TimedeltaIndex, Index, Series, 或DataFrame( GH 24486 ) to_timedelta()、 、Timedelta,并且TimedeltaIndex不再允许“M”、“y”或“Y”作为“单位”参数(GH 23264) 从 (non-public) 中删除了之前已弃用的关键字“time_rule” offsets.generate_range,该关键字已移至core.arrays._ranges.generate_range()( GH 24157 ) DataFrame.loc()或者Series.loc()使用类似列表的索引器和丢失的标签将不再重新索引(GH 17295) DataFrame.to_excel()并且Series.to_excel()对于不存在的列将不再重新索引(GH 17295) 从 中删除了之前已弃用的关键字“join_axes” concat();使用reindex_like结果代替(GH 22318) 从 中删除了之前已弃用的关键字“by” DataFrame.sort_index(),DataFrame.sort_values()改用(GH 10726) DataFrame.aggregate()删除了对, Series.aggregate(), core.groupby.DataFrameGroupBy.aggregate(), core.groupby.SeriesGroupBy.aggregate(), core.window.rolling.Rolling.aggregate()( GH 18529 )中嵌套重命名的支持 datetime64将数据传递给TimedeltaIndex或timedelta64将数据传递给DatetimeIndexnow 会引发TypeError(GH 23539、GH 23937) int64现在,将值传递给DatetimeIndex时区会将值解释为 UTC 中的纳秒时间戳,而不是给定时区中的墙壁时间 ( GH 24559 ) 传递给的元组DataFrame.groupby()现在被专门视为单个键(GH 18314) 删除Index.contains,改用(GH 30103)key in index 、、int中不再允许使用整数数组的加法和减法代替( GH 22535 )TimestampDatetimeIndexTimedeltaIndexobj + n * obj.freqobj + n 已删除Series.ptp(GH 21614) 已删除Series.from_array(GH 18258) 已删除DataFrame.from_items(GH 18458) 已删除DataFrame.as_matrix,Series.as_matrix(GH 18458) 已删除Series.asobject(GH 18477) 已删除DataFrame.as_blocks,,,, ( GH 17656 )Series.as_blocksDataFrame.blocksSeries.blocks pandas.Series.str.cat()现在默认为对齐others,使用join='left'(GH 27611) pandas.Series.str.cat()不再接受列表喜欢中的列表喜欢(GH 27611) Series.where()使用Categoricaldtype (或DataFrame.where()使用Categorical列)不再允许设置新类别(GH 24114) DatetimeIndex从、TimedeltaIndex和构造函数中删除了之前已弃用的关键字“start”、“end”和“periods” PeriodIndex;使用date_range(), timedelta_range(),period_range()代替 ( GH 23919 ) DatetimeIndex从和构造函数中删除了之前已弃用的关键字“verify_integrity” TimedeltaIndex(GH 23919) pandas.core.internals.blocks.make_block从( GH 19265 )中删除了之前已弃用的关键字“fastpath” Block.make_block_same_class()从( GH 19434 )中删除了之前已弃用的关键字“dtype” 已删除ExtensionArray._formatting_values。代替使用ExtensionArray._formatter。 (GH 23601) 已删除MultiIndex.to_hierarchical(GH 21613) 删除MultiIndex.labels,改用MultiIndex.codes(GH 23752) 从构造函数中删除了之前已弃用的关键字“labels” MultiIndex,改用“codes”(GH 23752) 删除MultiIndex.set_labels,改用MultiIndex.set_codes()(GH 23752) MultiIndex.set_codes()从, MultiIndex.copy(),中删除了之前已弃用的关键字“labels” MultiIndex.drop(),改用“codes”(GH 23752) 删除了对旧版 HDF5 格式的支持 ( GH 29787 ) DatetimeTZDtype不再允许传递 dtype 别名(例如 'datetime64[ns, UTC]') ,请改用DatetimeTZDtype.construct_from_string()( GH 23990 ) read_excel()从;中删除了之前已弃用的关键字“skip_footer”使用“skipfooter”代替(GH 18836) read_excel()不再允许参数使用整数值usecols,而是传递从 0 到 0 之间的整数列表usecols( GH 23635 ) DataFrame.to_records()从( GH 18902 )中删除了之前已弃用的关键字“convert_datetime64” 删除IntervalIndex.from_intervals以支持IntervalIndex构造函数(GH 19263) 将默认的“keep_tz”参数从 更改DatetimeIndex.to_series()为None( TrueGH 23739 ) 删除api.types.is_period并api.types.is_datetimetz(GH 23917) 读取包含Categorical使用 0.16 版本之前的 pandas 创建的实例的 pickles 的能力已被删除 ( GH 27538 ) 已删除pandas.tseries.plotting.tsplot(GH 18627) DataFrame.apply()从( GH 18577 )中删除了之前已弃用的关键字“reduce”和“broadcast” 删除了( GH 29174 )assert_raises_regex中之前已弃用的功能pandas._testing 删除了之前已弃用的FrozenNDArray类pandas.core.indexes.frozen(GH 29335) 从 中删除了之前已弃用的关键字“nthreads” read_feather(),改用“use_threads”(GH 23053) 已删除Index.is_lexsorted_for_tuple(GH 29305) DataFrame.aggregate()删除了对, Series.aggregate(), core.groupby.DataFrameGroupBy.aggregate(), core.groupby.SeriesGroupBy.aggregate(), core.window.rolling.Rolling.aggregate()( GH 29608 )中嵌套重命名的支持 已删除Series.valid;使用Series.dropna()(GH 18800) 已删除DataFrame.is_copy,Series.is_copy(GH 18812) 已删除DataFrame.get_ftype_counts,Series.get_ftype_counts(GH 18243) 已删除DataFrame.ftypes, Series.ftypes, Series.ftype( GH 26744 ) 删除Index.get_duplicates,改用idx[idx.duplicated()].unique()(GH 20239) 已删除Series.clip_upper, Series.clip_lower, DataFrame.clip_upper, DataFrame.clip_lower( GH 24203 ) DatetimeIndex.freq删除了更改、、TimedeltaIndex.freq或的能力PeriodIndex.freq(GH 20772) 已删除DatetimeIndex.offset(GH 20730) 删除DatetimeIndex.asobject, TimedeltaIndex.asobject, PeriodIndex.asobject,astype(object)改为使用 ( GH 29801 ) factorize()从( GH 19751 )中删除了之前已弃用的关键字“order” read_stata()从和DataFrame.to_stata()( GH 21400 )中删除了之前已弃用的关键字“encoding” 将默认的“排序”参数从 更改concat()为None( FalseGH 20613 ) 从 中删除了之前已弃用的关键字“raise_conflict” DataFrame.update(),改用“errors”(GH 23585) DatetimeIndex.shift()从, TimedeltaIndex.shift(),中删除了之前已弃用的关键字“n” PeriodIndex.shift(),改用“句点”( GH 22458 ) DataFrame.resample()从( GH 30139 )中删除了之前已弃用的关键字“how”、“fill_method”和“limit” 现在将整数传递给 dtypeSeries.fillna()或DataFrame.fillna()使用dtype 会引发( GH 24694 )timedelta64[ns]TypeError DataFrame.dropna()不再支持传递多个轴( GH 20995) 删除Series.nonzero,改用to_numpy().nonzero()(GH 24048) 不再支持将浮动数据类型传递codes给,而是传递(GH 21775)Categorical.from_codes()codes.astype(np.int64) Series.str.partition()从and中删除了之前已弃用的关键字“pat” Series.str.rpartition(),改用“sep”(GH 23767) 已删除Series.put(GH 27106) 已删除Series.real,Series.imag(GH 27106) 已删除Series.to_dense,DataFrame.to_dense(GH 26684) 删除Index.dtype_str,改用str(index.dtype)(GH 27106) Categorical.ravel()返回 aCategorical而不是 a ndarray( GH 27199 ) Numpy ufuncs 上的“外部”方法(例如np.subtract.outer对对象进行操作)Series不再受支持,并且会引发NotImplementedError(GH 27198) 删除Series.get_dtype_counts并DataFrame.get_dtype_counts(GH 27145) 将默认的“fill_value”参数从 更改Categorical.take()为True( FalseGH 20841 ) 将、、和raw中参数的默认值从更改为( GH 20584 )Series.rolling().apply()DataFrame.rolling().apply()Series.expanding().apply()DataFrame.expanding().apply()NoneFalse Series.argmin()删除了已弃用的和行为Series.argmax(),将Series.idxmin()和Series.idxmax()用于旧行为(GH 16955) 现在将 tz-awaredatetime.datetime或带参数传递到构造函数Timestamp中会引发( GH 23621 )TimestamptzValueError 已删除Series.base,,,,,,,,,,,,,,,, ( GH 20721 )Index.baseCategorical.baseSeries.flagsIndex.flagsPeriodArray.flagsSeries.stridesIndex.stridesSeries.itemsizeIndex.itemsizeSeries.dataIndex.data 更改Timedelta.resolution()为匹配标准库的行为datetime.timedelta.resolution,对于旧行为,请使用Timedelta.resolution_string()(GH 26839) 删除了Timestamp.weekday_name, DatetimeIndex.weekday_name, 和Series.dt.weekday_name( GH 18164 ) Timestamp.tz_localize()删除了、DatetimeIndex.tz_localize()和Series.tz_localize()( GH 22644 )中之前已弃用的关键字“errors” 将默认的“ordered”参数从CategoricalDtypefrom更改None为False( GH 26336 ) Series.set_axis()现在DataFrame.set_axis()需要“labels”作为第一个参数,“axis”作为可选的命名参数(GH 30089) 已删除to_msgpack, read_msgpack, DataFrame.to_msgpack, Series.to_msgpack( GH 27103 ) 已删除Series.compress(GH 21930) 从 中删除了之前已弃用的关键字“fill_value” Categorical.fillna(),改用“value”(GH 19269) 从 中删除了之前已弃用的关键字“data” andrews_curves(),改用“frame”(GH 6956) 从 中删除了之前已弃用的关键字“data” parallel_coordinates(),改用“frame”(GH 6956) 从 中删除了之前已弃用的关键字“colors” parallel_coordinates(),改用“color”(GH 6956) read_gbq()从( GH 30200 )中删除了之前已弃用的关键字“verbose”和“private_key” 在 tz-aware 上调用np.arrayand现在将返回 tz-aware 的对象数组(GH 24596)np.asarraySeriesDatetimeIndexTimestamp 性能改进# DataFrame使用标量进行算术和比较运算的性能改进( GH 24990、GH 29853) 使用非唯一索引的性能改进IntervalIndex(GH 27489) MultiIndex.is_monotonic( GH 27495 )中的性能改进 cut()何时bins的性能改进IntervalIndex( GH 27668 ) DataFrame使用range( GH 30171 )初始化时的性能改进 DataFrame.corr()性能改进(GHmethod 28139 )"spearman" DataFrame.replace()提供要替换的值列表时的性能改进( GH 28099) DataFrame.select_dtypes()通过使用矢量化而不是循环迭代来提高性能( GH 28317) Categorical.searchsorted()和CategoricalIndex.searchsorted()( GH 28795 )的性能改进 Categorical将 a与标量进行比较并且在类别中找不到标量时的性能改进( GH 29750) 检查 a 中的值是否Categorical等于、等于或大于给定标量时的性能改进。如果检查是否Categorical小于或小于或等于标量(GH 29820),则不存在改进 Index.equals()和MultiIndex.equals()( GH 29134 ) 的性能改进 infer_dtype()性能改进(GHskipna 28814 )True Bug修复# 分类# 添加了测试来断言当该值不是类别中的值时fillna()会引发正确的消息( GH 13628)ValueError 转换为 int 时值处理不正确的Categorical.astype()错误(GH 28406)NaN DataFrame.reindex()当目标包含重复项时, with aCategoricalIndex会失败,如果源包含重复项,则不会失败(GH 28107) Categorical.astype()不允许转换为扩展数据类型的错误( GH 28668) merge()无法加入分类和扩展数据类型列的错误( GH 28668) Categorical.searchsorted()现在CategoricalIndex.searchsorted()也处理无序分类(GH 21667) 添加了测试来断言镶木地板的往返DataFrame.to_parquet()或read_parquet()将保留字符串类型的分类数据类型(GH 27955) 更改了错误消息以Categorical.remove_categories()始终将无效删除显示为一组(GH 28669) 在日期时间的分类数据类型上使用日期访问器Series不会返回相同类型的对象,就像在该类型的a 上使用str.()/一样。例如,当访问具有重复条目的a 时 ,访问者会跳过重复项(GH 27952)dt.()SeriesSeries.dt.tz_localize()Categorical 错误DataFrame.replace()会Series.replace()在分类数据上给出不正确的结果(GH 26988) 在空分类上调用Categorical.min()or会引发 numpy 异常的错误( GH 30227)Categorical.max() 现在,通过( GH 17605 )调用时,以下方法也可以正确输出未观察到的类别的值* * * *groupby(..., observed=False)core.groupby.SeriesGroupBy.count()core.groupby.SeriesGroupBy.size()core.groupby.SeriesGroupBy.nunique()core.groupby.SeriesGroupBy.nth() 类似日期时间# 插入到datetime64 dtype时错误地Series.__setitem__()转换np.timedelta64("NaT")为错误 ( GH 27311 )np.datetime64("NaT")Series Series.dt()当基础数据为只读时,属性查找中出现错误( GH 27529 ) HDFStore.__getitem__错误读取 Python 2 中创建的 tz 属性的错误( GH 26443 ) to_datetime()传递带有错误=“强制”的格式错误的数组可能str会错误地导致引发错误ValueError(GH 28299) core.groupby.SeriesGroupBy.nunique()值干扰NaT唯一值计数的错误( GH 27951) 从错误地提升的对象中Timestamp减go a 时的减法错误(GH 28286)Timestampnp.datetime64TypeError 整数或整数 dtype 数组的加法和减法Timestamp现在将引发NullFrequencyError而不是ValueError( GH 28268 ) 添加或减go对象时无法引发整数 dtypeSeries中的错误( GH 28080 )DataFrameTypeErrornp.datetime64 Series.astype()、中的错误Index.astype(),并且在转换为整数数据类型时DataFrame.astype()无法处理( GH 28492)NaT Week错误地weekday提高AttributeError而不是TypeError添加或减go无效类型时出现错误( GH 28530) 使用with dtypeDataFrame进行操作时算术运算中的错误( GH 28049 )Series'timedelta64[ns]' 当原始 DataFrame 中的列是日期时间并且列标签不是标准整数时core.groupby.generic.SeriesGroupBy.apply()引发的错误( GH 28247)ValueError 将区域设置列表编码为 windows-1252 的错误(pandas._config.localization.get_locales()GH 23638、GH 24760、GH 27368)locales -a 使用 dtype 调用时Series.var()未能引发错误(GH 28289)TypeErrortimedelta64[ns] Bug in DatetimeIndex.strftime()and Series.dt.strftime()whereNaT被转换为字符串'NaT'而不是np.nan( GH 29578 ) 使用长度不正确的布尔掩码屏蔽类似日期时间的数组时的错误不会引发IndexError( GH 30308 ) Timestamp.resolution作为属性而不是类属性的错误( GH 29910) pandas.to_datetime()当调用None加注TypeError而不是返回时出现错误NaT(GH 30011) 使用(默认)时对象pandas.to_datetime()失败的错误( GH 29403)dequecache=True Series.item()使用datetime64or timedelta64dtype、DatetimeIndex.item()和TimedeltaIndex.item()返回整数而不是Timestampor Timedelta( GH 30175 )时出现错误 DatetimeIndex添加未优化的错误DateOffset删除时区信息时还存在错误( GH 30336) DataFrame.drop()尝试从 DatetimeIndex 中删除不存在的值会产生令人困惑的错误消息的错误( GH 30399 ) 错误DataFrame.append()会删除新数据的时区感知(GH 30238) Series.cummin()时区Series.cummax()感知数据类型错误地删除其时区(GH 15553) DatetimeArray、TimedeltaArray和中的错误PeriodArray,其中就地加法和减法实际上并未就地运算(GH 24115) pandas.to_datetime()当调用Series存储IntegerArray提升TypeError而不是返回时出现错误Series(GH 30050) 错误地date_range()使用自定义营业时间freq和给定数量periods(GH 30593) PeriodIndex与错误地将整数转换为对象的比较中的错误Period,与Period比较行为不一致(GH 30722) 当尝试将时区感知插入到时区朴素中时,DatetimeIndex.insert()引发 aValueError而不是 a 的错误,反之亦然(GH 30806)TypeErrorTimestampDatetimeIndex 时间增量# 从对象中减goTimedeltaIndex或的错误(GH 29558)TimedeltaArraynp.datetime64 时区# 数字# DataFrame.quantile()零列错误地DataFrame提升错误(GH 23925) DataFrame灵活的不等式比较方法(DataFrame.lt()、、、、 )与对象数据类型和条目未能像其对应项一样引发(GHDataFrame.le() 28079 )DataFrame.gt()DataFrame.ge()complexTypeErrorSeries DataFrame逻辑运算 ( &、、 )中的错误不通过填充 NA 值来匹配行为|( ^GH 28741 )Series DataFrame.interpolate()在分配变量之前按名称指定轴引用变量的错误( GH 29142) Series.var()未通过 ddof 参数传递的可空整数 dtype 系列计算正确值的错误( GH 29128) frac改进了使用> 1 和= False时的错误消息replace(GH 27451) 数字索引中的错误导致可以使用无效的数据类型(例如类似日期时间)实例化Int64Index, UInt64Index, or ( GH 29539 )Float64Index UInt64Index从范围内的值的列表构建时精度损失的错误np.uint64(GH 29526) 当使用范围内的整数时,构造中的错误NumericIndex会导致索引失败( GH 28023)np.uint64 NumericIndex构造中的错误导致使用范围内的整数来UInt64Index索引a ( GH 28279 )Float64Indexnp.uint64DataFrame Series.interpolate()将 method=`index` 与未排序索引一起使用时出现的错误,以前会返回不正确的结果。 (GH 21037) 包含 a 列的错误会错误DataFrame.round()地引发 a ( GH 30063 )DataFrameCategoricalIndexIntervalIndexTypeError 当存在重复索引时Series.pct_change()出现错误( GH 30463)DataFrame.pct_change() 累积操作(例如 cumsum、cummax)中的错误DataFrame错误地转换为 object-dtype(GH 19296) diff丢失扩展类型的 dtype 的错误( GH 30889 ) 当其中一列是可为空整数数据类型时DataFrame.diff引发错误( GH 30967)IndexError 转换# 字符串# Series.str.isalnum()对空调用(和其他“ismmethods”)Series将返回objectdtype 而不是bool(GH 29624) 间隔# 或错误IntervalIndex.get_indexer()地引发 a 的错误( GH 30063 )CategoricalCategoricalIndex targetTypeError pandas.core.dtypes.cast.infer_dtype_from_scalar传递pandas_dtype=True未推断的错误IntervalDtype(GH 30337) 构造函数中的错误,从一个对象Series构造一个导致dtype 而不是(GH 23563)SerieslistIntervalobjectIntervalDtype 错误将IntervalDtype属性kind错误地设置为None而不是"O"( GH 30568 ) IntervalIndex、IntervalArray和中的错误Series,其中等式比较不正确(GH 24112) 索引# 使用反向切片器进行分配时出现错误(GH 26939) DataFrame.explode()当索引中存在重复项时,错误会重复帧( GH 28010) PeriodIndex()使用包含Period( GH 28323 ) ( GH 28337 )的另一种类型的索引重新索引 a 时出现错误 .loc通过 numpy 非 ns 日期时间类型修复列分配( GH 27395) 转换为整数数据类型时未正确处理的Float64Index.astype()错误(GH 28475)np.inf Index.union()当左侧包含重复项时可能会失败(GH 28257) .loc使用非字符串类别的索引进行索引时出现错误CategoricalIndex不起作用(GH 17569、GH 30225) Index.get_indexer_non_unique()在某些情况下可能会失败TypeError,例如在字符串索引中搜索整数时(GH 28257) 错误Float64Index.get_loc()地提高TypeError而不是KeyError(GH 29189) DataFrame.loc()在 1 行 DataFrame 中设置分类值时,数据类型不正确(GH 25495) MultiIndex.get_loc()当输入包含缺失值时无法找到缺失值(GH 19132) Series.__setitem__()当新数据的长度True与值的数量匹配并且新数据不是 aSeries或 an 时,使用布尔索引器错误地分配值的错误np.array( GH 30567 ) 索引中的错误PeriodIndex错误地接受代表年份的整数,请使用 例如ser.loc["2007"]代替ser.loc[2007]( GH 30763 ) 丢失的# 多重索引# 验证给MultiIndex定的构造函数是否与实际的if参数sortorder兼容(默认)(GH 28735)lexsort_depthverify_integrityTrue 如果级别中未给定标签,则系列和 MultiIndex.drop会引发异常( GH 8594)MultiIndex IO # read_csv()现在使用 Python csv 引擎时接受二进制模式文件缓冲区 ( GH 23779 ) DataFrame.to_json()使用 Tuple 作为列或索引值并使用orient="columns"or会产生无效 JSON 的错误orient="index"(GH 20500) 改进无限解析。read_csv()现在将Infinity, +Infinity,解释-Infinity为浮点值 ( GH 10065 ) DataFrame.to_csv()当 的长度na_rep短于文本输入数据时,值被截断的错误。 (GH 25099) DataFrame.to_string()使用显示选项截断值而不是输出完整内容的错误( GH 9784) 错误在于DataFrame.to_json()日期时间列标签不会以 ISO 格式写出orient="table"(GH 28130) 如果文件尚不存在,DataFrame.to_parquet()写入 GCS 将失败的错误( GH 28326 )engine='fastparquet' read_hdf()关闭商店时出现异常时未打开的错误( GH 28699) DataFrame.read_json()使用orient="index"无法维持顺序的错误( GH 28557) 未验证参数DataFrame.to_html()长度的错误( GH 28469)formatters 当参数引用不存在的工作表时出现错误DataFrame.read_excel()(GH 27676)engine='ods'sheet_name pandas.io.formats.style.Styler()浮点值格式错误无法正确显示小数( GH 13257) 和一起DataFrame.to_html()使用时会出现错误。 (GH 25955)formatters=<list>max_cols Styler.background_gradient()无法使用 dtype 的错误Int64(GH 28869) DataFrame.to_clipboard()在 ipython 中无法可靠工作的错误( GH 22707) read_json()默认编码未设置为的错误utf-8(GH 29565) PythonParser处理小数字段时混合 str 和 bytes 的错误( GH 29650 ) read_gbq()现在接受progress_bar_type在数据下载时显示进度条。 (GH 29857) pandas.io.json.json_normalize()指定位置中缺失值record_path会引发错误TypeError( GH 30148 ) read_excel()现在接受二进制数据(GH 15914) read_csv()编码处理仅限于utf-16C 引擎的字符串的错误( GH 24130 ) 绘图# Series.plot()无法绘制布尔值的错误( GH 23719) DataFrame.plot()没有行时无法绘制的错误( GH 27758) DataFrame.plot()在同一轴上绘制多个系列时生成不正确的图例标记的错误( GH 18222) DataFrame.plot()当和数据包含日期时间或时间增量数据时出现错误kind='box'。这些类型现在会自动删除(GH 22799) 错误DataFrame.plot.line()并DataFrame.plot.area()在 x 轴上产生错误的 xlim ( GH 27686、GH 25160、GH 24784 ) DataFrame.boxplot()不接受color类似参数的错误DataFrame.plot.box()(GH 26214) 参数中的错误xticks被忽略DataFrame.plot.bar()(GH 14119) set_option()现在验证提供的绘图后端'plotting.backend'是否在设置选项时而不是在创建绘图时实现后端(GH 28163) DataFrame.plot()现在允许backend关键字参数允许在一个会话中的后端之间进行更改(GH 28619)。 颜色验证中的错误错误地引发了非颜色样式 ( GH 29122 )。 允许DataFrame.plot.scatter()绘制objects和datetime输入数据(GH 18755,GH 30391) 中的错误DataFrame.hist(),xrot=0不适用于by和 子图(GH 30288)。 GroupBy/重新采样/滚动# core.groupby.DataFrameGroupBy.apply()当函数返回时仅显示单个组的输出的错误Index(GH 28652) DataFrame.groupby()多个组中存在错误IndexError,如果任何组包含所有 NA 值,则会引发错误(GH 20519) 与空或一起使用时出现错误Resampler.size()并返回错误的数据类型(GH 28427)Resampler.count()SeriesDataFrame DataFrame.rolling()不允许滚动日期时间的错误axis=1(GH 28192) DataFrame.rolling()不允许滚动多索引级别的错误( GH 15584)。 DataFrame.rolling()不允许滚动单调递减时间索引的错误( GH 19248)。 当(GH 27614)DataFrame.groupby()时不提供按列名称选择的错误axis=1 core.groupby.DataFrameGroupby.agg()无法将 lambda 函数与命名聚合一起使用的错误( GH 27519 ) DataFrame.groupby()按分类列分组时丢失列名称信息的错误( GH 28787 ) 删除由于DataFrame.groupby()和中的命名聚合中的重复输入函数而引发的错误Series.groupby()。以前,如果在同一列上应用相同的函数,则会引发错误,而现在,如果新分配的名称不同,则允许出现错误。 (GH 28426) core.groupby.SeriesGroupBy.value_counts()Grouper即使创建空组也能够处理这种情况( GH 28479) 在 groupby 中使用时core.window.rolling.Rolling.quantile()忽略关键字参数的错误( GH 28779 )interpolation DataFrame.groupby()where any、all和转换函数中的错误nunique将错误地处理重复的列标签 ( GH 21668 ) 时区感知core.groupby.DataFrameGroupBy.agg()的 datetime64 列错误地将结果转换为原始 dtype ( GH 29641 ) DataFrame.groupby()使用 axis=1 并具有单级列索引时出现错误( GH 30208) DataFrame.groupby()在 axis=1 上使用 nunique 时出现错误( GH 30253) 多个类似列表的 q 值和整数列名称DataFrameGroupBy.quantile()中的错误( GH 30289)SeriesGroupBy.quantile() 错误DataFrameGroupBy.pct_change()并SeriesGroupBy.pct_change()导致TypeError何时( GHfill_method 30463 )None 错误Rolling.count()和Expanding.count()参数min_periods被忽略(GH 26996) 重塑# DataFrame.apply()导致错误输出为空的错误DataFrame(GH 28202,GH 21959) DataFrame.stack()创建 MultiIndex 时未正确处理非唯一索引的错误( GH 28301 ) 当和( GH 24893 )时pivot_table()未返回正确类型的错误floatmargins=Trueaggfunc='mean' Bugmerge_asof()无法用于datetime.timedeltakwarg tolerance( GH 28098 ) 错误merge(),没有使用 MultiIndex 正确附加后缀(GH 28518) qcut()现在cut()处理布尔输入(GH 20303) merge_asof()修复以确保在使用容差值时可以使用所有 int 数据类型。以前,每个非 int64 类型都会引发错误MergeError( GH 28870 )。 get_dummies()当columns不是类似列表的值时更好的错误消息( GH 28383) 错误导致名称顺序Index.join()不匹配的无限递归错误。 MultiIndex(GH 25760,GH 28956) Series.pct_change()提供锚定频率会引发错误ValueError(GH 28664) DataFrame.equals()当两个 DataFrame 具有不同顺序的相同列时,在某些情况下错误地返回 True 的错误( GH 28839 ) DataFrame.replace()导致非数字替换器的 dtype 不受尊重的错误( GH 26632) 为ormelt()提供混合字符串和数值会错误地引发错误( GH 29718 )id_varsvalue_varsValueError DataFrame现在,在转置每列具有相同扩展 dtype 的位置时,会保留 Dtype ( GH 30091) merge_asof()合并 tz 感知列left_index和right_ontz 感知列时出现错误( GH 29864 ) 改进了错误消息和文档字符串cut()(GH 13318)qcut()labels=True 级别列表fill_na中缺少参数的错误( GH 30740 )DataFrame.unstack() 稀疏# SparseDataFrame算术运算中的错误错误地将输入转换为浮点数( GH 28107) 当存在名为而不是访问器的列时DataFrame.sparse返回 a时出现错误( GH 30758)Seriessparse operator.xor()使用 boolean-dtype修复SparseArray。现在返回稀疏结果,而不是对象数据类型(GH 31025) 扩展数组# arrays.PandasArray设置标量字符串时出现错误( GH 28118、GH 28150)。 无法将可为 null 的整数与字符串进行比较的错误 ( GH 28930 ) DataFrame构造函数ValueError使用类似列表的数据引发并指定的错误dtype(GH 30280) 其他# 尝试设置display.precision,display.max_rows或display.max_columns使用set_option()除 aNone或正 int 之外的任何内容都会引发ValueError( GH 23348 ) 在嵌套字典中使用DataFrame.replace()重叠键将不再引发,现在匹配平面字典的行为(GH 27660) DataFrame.to_csv()现在Series.to_csv()支持字典作为compression参数,键'method'是压缩方法,当压缩方法是 时,其他作为附加压缩选项'zip'。 (GH 26023) Series.diff()布尔系列错误地引发 a 的错误TypeError(GH 17294) Series.append()TypeError当传递一个元组时将不再引发Series( GH 28410 ) pandas.libs._json.encode()修复调用0d 数组时损坏的错误消息( GH 18878) 反引号DataFrame.query()现在DataFrame.eval()还可以用于使用无效标识符,例如以数字开头的名称、Python 关键字或使用单字符运算符。 (GH 27017) pd.core.util.hashing.hash_pandas_object包含元组的数组被错误地视为不可散列的错误( GH 28969) 附加空列表时DataFrame.append()引发的错误( GH 28769)IndexError 修复AbstractHolidayCalendar以返回 2030 年之后的正确结果(现在可达 2200)( GH 27790 ) 修复了IntegerArray返回inf而不是NaN除以的操作0(GH 27398) 当其他值为or时的固定pow操作(GH 29997)IntegerArray01 Series.count()如果启用 use_inf_as_na 则会引发错误( GH 29478) Index可以在不引发的情况下设置不可散列名称的错误TypeError(GH 29069) DataFrame传递 2Dndarray和扩展 dtype时构造函数中的错误( GH 12513 ) 当提供带有 a和 a 的DataFrame.to_csv()系列时出现错误,被截断为 2 个字符。 (GH 29975)dtype="string"na_repna_rep BugDataFrame.itertuples()将错误地确定命名元组是否可用于 255 列的数据帧 ( GH 28282 ) 处理ExtensionArray 实现object中的嵌套 NumPy 数组( GH 30841 )testing.assert_series_equal() 构造函数中的错误Index错误地允许二维输入数组(GH 13601、GH 27125) 贡献者# 共有 308 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 阿迪亚·帕尼卡斯 + 阿卜杜拉·伊赫桑·塞塞尔 阿比吉特·克里希南 + 亚当·斯图尔特 亚当·克劳姆 + 艾迪森·林奇 艾文戈 + 阿拉斯泰尔·詹姆斯 + 阿尔伯特·维拉诺瓦·德尔·莫拉尔 亚历克斯·基尔科 + 阿尔弗雷多·格兰哈 + 艾伦·唐尼 阿尔普阿里巴尔 + 安德烈亚斯·布尔 + 安德鲁·蒙克 + 安迪 安吉拉·安布罗兹 + 阿尼鲁达·巴塔查吉 + 安吉特·丹卡 + 小安东尼奥·安德劳斯 + 阿尔达·科萨尔 + 阿西什·玛哈帕特拉 + 奥斯汀·哈克特 + 阿维·凯尔曼 + 阿约沃勒T + 巴斯·尼霍尔特 + 本·塞耶 巴拉特·拉古纳坦 巴瓦尼·拉维 布瓦纳 KA + 大头 布莱克·霍金斯 + 金博培 + 布雷特·瑙尔 布赖恩·维格纳尔 布鲁诺·P·木下 + 布莱恩特·莫斯康 + 塞萨尔 H+ 克里斯·斯塔德勒 克里斯·齐默尔曼 + 克里斯托弗·惠兰 克莱门斯·布伦纳 克莱门斯·托布姆 + 康纳·查尔斯 + 丹尼尔·汉克 + 丹尼尔·萨克斯顿 达林·普拉乔克 + 戴夫·休斯 大卫·斯坦斯比 大卫·罗森 + 院长+ 迪潘·达斯 + 迪普亚曼·达塔 多阿姆拉姆 + 多萝西·卡巴罗兹 + 德鲁·希南 + 伊丽莎·梅·萨雷 + 埃丽+ 恩德烈·马克·博尔扎 + 埃里克·布拉塞尔 + 埃里克·黄 + 郑恩燮+ 艾登·维拉纽瓦 + 菲利克斯·迪沃 暂时 + 弗朗西斯科·特鲁齐 + 加布里埃尔·科罗纳 + 加布里埃尔·蒙泰罗 + 加鲁·萨希德 + 格奥尔基·巴切夫 + 吉娜 朱帕萨雷利 + 格里戈里奥斯·贾纳科普洛斯 + 吉列尔梅·莱特 + 吉列尔梅·莎乐美 + 崔庆宰 + 哈沙瓦尔丹·巴奇纳 + 河村晴隆 + 哈桑·基比里格 希尔克·瓦林加 休伯特 休·凯利 + 伊恩·伊夫斯 + 伊格纳西奥·桑托林 + 伊戈尔·菲利波夫 + 欧夫·勒斯蒂格 艾萨克·维尔舒普 + 伊万·贝萨拉博夫 + JMBurley + 杰克·比克内尔 + 雅各布·巴克海特 + 简·科赫 简·皮佩克 + 扬·斯柯达 + 扬·菲利普·格尔克 贾斯珀·JF·范登博斯 + Java+ 杰夫·雷巴克 杰里米·申德尔 杰伦·康德 + 杰西·帕杜 + 曹杰思 + 江悦 嘉祥+ 文智亨 + 吉米·卡林 周金洋 + 若昂·维克托·马蒂内利 + 乔克·阿米兰特+ 约翰·G·埃文斯 + 约翰·沃德 + 乔纳森·拉金 + 乔里斯·范登博什 乔什·迪马斯基 + 约书亚·史密斯 + 乔赛亚·贝克 + 朱莉娅·西格内尔 + 郑东浩 + 贾斯汀·科尔 + 贾斯汀·郑 董凯琪 卡蒂格延 + 凯瑟琳·杨洛夫 + 卡特琳·莱因韦伯 陈纪宗 + 基思·克劳斯 + 凯文·阮 + 凯文·谢泼德 基塞卡·大卫 + 库希克+ 凯尔·布恩 + 凯尔·麦卡希尔 + 劳拉·科拉德博士 + 刘寻客+ 路易斯·黄 + 卢卡斯·Scala托·阿斯图尔 + 路易斯·古斯塔沃 + 路加+ 卢克·谢泼德 + 哈卢索娃 + 梅贝尔·维拉尔巴 马切杰·J + 麦诗珍 马努·纳莱帕 + 马克 马克·加西亚 马可·戈雷利 + 马可·诺依曼 + 马丁·温克尔 + 玛蒂娜·维拉斯 + 马特乌斯+ 马修·罗斯克 马修·谭 + 马克斯·博林布鲁克 陈麦克斯+ 米塞克斯机器 米格尔+ 郑珉奎+ 穆罕默德·阿明·ZGHAL + 莫希特·阿南德 + 妈妈是最好的朋友 + 娜奥米·邦宁 + 内森·阿贝尔 + 尼科·切尔内克 + 奈杰尔·马基 + 小林德忠 + 奥克泰·萨巴克 + 奥利弗·霍夫肯斯 + 奥洛昆·阿德达约 + 奥斯曼+ 奥古詹·奥雷登 + 熊猫开发团队 + 帕特里克·赫洛比尔 + 保罗·李 + 保罗·西格尔 + 彼得·巴耶夫 + 彼得罗·巴蒂斯顿 普拉卡·潘迪 + 普内斯 K+ 拉加夫+ 拉贾+ 拉杰汉斯·贾多 + 拉吉夫·巴拉德瓦吉 + 里克·德·科特 + 罗伊尔 罗希特·桑杰 + 罗南·拉米 + 罗什尼+ 罗伊姆普格+ 鲁沙布·瓦萨尼 + 瑞恩·格鲁特 + 瑞安·拿撒勒 萨梅什·拉科蒂亚 + 塞缪尔·西纳约科 萨米亚克·耆那教 + 莎拉·多尼豪威尔 + 莎拉·马苏德 + 索尔·沙纳布鲁克 + 斯科特·科尔 + SdgJlbl + 塞布+ 谢尔盖·伊夫科 + 沙迪·阿基基 谢尔盖·肖罗霍夫 西德什·波亚雷卡 + 西达坦·奈尔 + 西蒙·吉本斯 西蒙·霍金斯 西蒙·马丁·施罗德 + 索菲安·马希乌 + 苏拉夫·库马尔 + 苏维克·曼达尔 + 金素妍 + 斯帕克尔·拉塞尔-普勒里 + 斯里尼瓦斯·雷迪·塔蒂帕西 (శ్రీనివాస్ రెడ్డి తాటిపర్తి) 斯图尔特·伯格+ 苏马瑙·萨林 西蒙·贝德纳雷克 + 坦贝·塔比莎·阿切尔 + 谭陈 唐和谊+ 坦美·达里巴 + 坦尼娅·杰恩 特尔吉·彼得森 李托马斯+ 提尔·耆那教 + 托拉A+ 汤姆·奥格斯普格 汤米·林奇 + 铃木智之 + 托尼·洛伦佐 无法处理+ 乌韦·科恩 维巴夫·维沙尔 维多利亚·兹丹诺夫斯卡娅 + 维贾扬特+ 维什瓦克·斯里尼瓦桑 + 王爱勇 文焕 韦斯·麦金尼 威尔·艾德 威尔·霍姆格伦 威廉·艾德 威廉·布兰 + 沃特·奥弗迈尔 乌劳拉·奥耶乌斯 + 亚奥兹I+ 亚什·舒克拉 + 王宇+ 田原佑圣 + 亚历山大135 + 阿里姆大师1 阿夫琳格+ 神经节+ 博尔克德布鲁因 勇敢+ 精惠+ 克鲁佐 + 达尔加诺 + 丹妮尔布朗+ 丹尼尔·普劳伦斯 est271 + 弗朗西斯科·苏萨 + 加内夫gv + 加拉新闻+ 格菲扬 H-维蒂纳里 哈斯奈因2808 + 伊安祖尔 + 贾布里特+ 杰布罗克门德尔 杰什瓦尔 + 贾兰博恩324 + 乔伊-罗西 + 内核 逃亡杀手1 克雷+ 莱克西-利新语 + 露西莉奥+ 卢卡斯贝克+ 马赫什巴帕图 + mck619+ 纳塔利尔 纳文考希克2504 + 尼勒普勒 + 恩雷贝纳 奥哈德83 + 皮尔基文 pqzx + 普罗斯特+ pv8493013j + 曲达德+ 斯坦顿+ 鲁穆贾尔29 + 桑加尔沙南 + 萨多尼克+ 萨斯卡卡尔西 + shaido987 + 西克达尔1 史蒂夫耶124 + 正垣 + 蒂姆塞拉+ 特莱顿谷歌+ 托比奶酪 tonywu1999 + 茨维卡斯 + 约根德拉索尼 + zys5945+