Pandas-2-2-中文文档-四十八-

Pandas 2.2 中文文档(四十八)

原文:pandas.pydata.org/docs/

What’s new in 1.0.5 (June 17, 2020)

原文:pandas.pydata.org/docs/whatsnew/v1.0.5.html

这些是 pandas 1.0.5 中的更改。查看 发布说明 获取包括其他 pandas 版本的完整更改日志。

修复的回归问题

  • 修复了在从文件样式对象读取时 read_parquet() 的回归问题 (GH 34467)。

  • 修复了从公共 S3 存储桶读取时的回归问题 (GH 34626)。

请注意,这将再次禁用从 S3 目录读取 Parquet 文件的功能 (GH 26388, GH 34632),这在 1.0.4 版本中添加,但现在目标是 pandas 1.1.0。

  • 修复了在使用不同数据类型的值替换扩展数据类型中的值时,replace() 引发 AssertionError 的回归问题 (GH 34530) ## Bug 修复

  • 修复了在使用 Python 3.8 从源代码构建时错误地获取 NumPy 的错误版本的问题 (GH 34666)

贡献者

一共有 8 人为这个版本提供了补丁。名字后面有 “+” 的人第一次为此版本提供了补丁。

  • Joris Van den Bossche

  • MeeseeksMachine

  • Natalie Jann +

  • Pandas Development Team

  • Simon Hawkins

  • Tom Augspurger

  • William Ayd

  • alimcmaster1

修复的回归问题

  • 修复了在从文件样式对象读取时 read_parquet() 的回归问题 (GH 34467)。

  • 修复了从公共 S3 存储桶读取时的回归问题 (GH 34626)。

请注意,这将再次禁用从 S3 目录读取 Parquet 文件的功能 (GH 26388, GH 34632),这在 1.0.4 版本中添加,但现在目标是 pandas 1.1.0。

  • 修复了在使用不同数据类型的值替换扩展数据类型中的值时,replace() 引发 AssertionError 的回归问题 (GH 34530)

Bug 修复

  • 修复了在使用 Python 3.8 从源代码构建时错误地获取 NumPy 的错误版本的问题 (GH 34666)

贡献者

一共有 8 人为这个版本提供了补丁。名字后面有 “+” 的人第一次为此版本提供了补丁。

  • Joris Van den Bossche

  • MeeseeksMachine

  • Natalie Jann +

  • Pandas Development Team

  • Simon Hawkins

  • 汤姆·奥古斯伯格

  • 威廉·艾德

  • alimcmaster1

1.0.4 中的新特性(2020 年 5 月 28 日)

原文:pandas.pydata.org/docs/whatsnew/v1.0.4.html

这些是 pandas 1.0.4 中的更改。请参阅发布说明以获取包括 pandas 的其他版本在内的完整更改日志。

修复的回归

  • 修复了当 pandas.options.mode.use_inf_as_na 设置为 True 时,Series.isna()DataFrame.isna() 对分类 dtype 抛出异常的回归(GH 33594)。

  • 修复了 DataFrameGroupBy.first()SeriesGroupBy.first()DataFrameGroupBy.last()SeriesGroupBy.last() 中的回归,在对象 dtype 中不保留 None 时(GH 32800)。

  • 修复了使用 numeric_only=True 和 ExtensionArrays 进行 DataFrame 减少时的回归(GH 33256)。

  • 修复了 memory_usage(deep=True) 在对象 dtype 中的性能回归(GH 33012)。

  • 修复了 Categorical.replace() 在新值和替换值相等时替换为 NaN 的回归(GH 33288)。

  • 修复了包含仅 NaN 值的有序 Categorical 的回归,当取最小值或最大值时,会引发而不是返回 NaNGH 33450)。

  • 修复了 DataFrameGroupBy.agg() 使用字典输入时丢失 ExtensionArray dtypes 的回归(GH 32194)。

  • 修复了在使用 xarray 的 CFTimeIndex 进行 “nearest” 方法索引时的能力,一个Index 子类(pydata/xarray#3751, GH 32905)。

  • 修复 DataFrame.describe() 中的回归引发 TypeError: unhashable type: 'dict' 错误 (GH 32409)

  • 修复 DataFrame.replace() 中的回归,如果 to_replace 中的项目不在值中,则将列转换为 object 数据类型 (GH 32988)

  • 当按 PeriodIndex 级别分组时,Series.groupby() 中的回归会引发 ValueError (GH 34010)

  • 修复 DataFrameGroupBy.rolling.apply()SeriesGroupBy.rolling.apply() 中的回归忽略了 args 和 kwargs 参数 (GH 33433)

  • 修复在无序Categorical上使用 np.minnp.max 时错误消息的回归(GH 33115)

  • 修复当提供 datetime64[ns, tz] 值时 DataFrame.loc()Series.loc() 中的回归会抛出错误 (GH 32395) ## Bug fixes

  • 当应用于可空布尔值时,SeriesGroupBy.first()SeriesGroupBy.last()SeriesGroupBy.min()SeriesGroupBy.max() 中的错误返回浮点数 (GH 33071)

  • 在使用固定窗口时,Rolling.min()Rolling.max() 中的错误:多次调用后内存使用量增长。 (GH 30726)

  • 当向私有 s3 存储桶写入无效凭据时,to_parquet() 中的错误未引发 PermissionError。 (GH 27679)

  • 当写入无效的 s3 存储桶时,to_csv() 中的错误已经静默失败。(GH 32486)

  • 当传递 s3 目录路径时,read_parquet() 中的错误会引发 FileNotFoundError。 (GH 26388)

  • 在写入分区 parquet 文件到 s3 时,to_parquet() 中的错误会抛出 AttributeErrorGH 27596

  • DataFrameGroupBy.quantile()SeriesGroupBy.quantile() 中的错误导致当 by 轴包含 NaN 时,分位数会发生偏移(GH 33200GH 33569)。

贡献者

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

  • Daniel Saxton

  • JDkuba +

  • Joris Van den Bossche

  • Kaiqi Dong

  • Mabel Villalba

  • MeeseeksMachine

  • MomIsBestFriend

  • Pandas 开发团队

  • Simon Hawkins

  • Spencer Clark +

  • Tom Augspurger

  • Vikas Pandey +

  • alimcmaster1

  • h-vishal +

  • jbrockmendel

  • mproszewska +

  • neilkg +

  • rebecca-palmer +

修复的回归

  • 修复了当 pandas.options.mode.use_inf_as_na 设置为 True 时,Series.isna()DataFrame.isna() 在分类 dtype 上引发异常的回归(GH 33594)。

  • 修复了在 DataFrameGroupBy.first()SeriesGroupBy.first()DataFrameGroupBy.last()SeriesGroupBy.last() 中,当 object dtype 中不保留 None 时的回归(GH 32800)。

  • 修复了在使用 numeric_only=True 和 ExtensionArrays 时 DataFrame reductions 中的回归(GH 33256)。

  • 修复了在 object dtype 中 memory_usage(deep=True) 的性能回归(GH 33012)。

  • 修复了 Categorical.replace() 中的回归,每当新值和替换值相等时都会用 NaN 替换的问题(GH 33288)。

  • 修复了包含仅包含NaN值的有序Categorical在取最小值或最大值时引发而不是返回NaN的回归问题(GH 33450)

  • 修复了DataFrameGroupBy.agg()中字典输入丢失ExtensionArray dtypes 的回归问题(GH 32194)

  • 修复了在 xarray 的 CFTimeIndex 中保留使用“nearest”方法进行索引的能力的问题,它是Index的子类(pydata/xarray#3751GH 32905)。

  • 修复了DataFrame.describe()引发TypeError: unhashable type: 'dict'的回归问题(GH 32409)

  • 修复了DataFrame.replace()中的回归问题,如果to_replace中的项目不在值中,则将列转换为object dtype(GH 32988)

  • 修复了Series.groupby()在按PeriodIndex级别分组时引发ValueError的回归问题(GH 34010)

  • 修复了DataFrameGroupBy.rolling.apply()SeriesGroupBy.rolling.apply()忽略 args 和 kwargs 参数的回归问题(GH 33433)

  • 修复了在无序的Categorical上使用np.minnp.max时的错误消息回归问题(GH 33115)

  • 修复了当提供datetime64[ns, tz]值时,DataFrame.loc()Series.loc()抛出错误的回归问题(GH 32395)

错误修复

  • 在可空布尔值上应用时,SeriesGroupBy.first()SeriesGroupBy.last()SeriesGroupBy.min()SeriesGroupBy.max()返回浮点数的错误(GH 33071)

  • Rolling.min()Rolling.max()中的错误:使用固定窗口进行多次调用后内存使用量增加(GH 30726)

  • 在将数据写入私有 s3 存储桶时,to_parquet()存在一个 bug,不会引发PermissionError,即使凭据无效也是如此。 (GH 27679)

  • 在写入无效的 s3 存储桶时,to_csv()存在一个潜在的 bug,会静默失败。(GH 32486)

  • 在传递 s3 目录路径时,read_parquet()存在一个 bug,会引发FileNotFoundError。 (GH 26388)

  • 在将分区 parquet 文件写入 s3 时,to_parquet()存在一个 bug,会抛出AttributeError。 (GH 27596)

  • DataFrameGroupBy.quantile()SeriesGroupBy.quantile() 中存在一个 bug,当by轴包含NaN时,分位数会被移位。 (GH 33200, GH 33569)

贡献者

共有 18 人为此版本提供了补丁。 姓名后带“+”的人是首次贡献补丁的人。

  • Daniel Saxton

  • JDkuba +

  • Joris Van den Bossche

  • Kaiqi Dong

  • Mabel Villalba

  • MeeseeksMachine

  • 妈妈是最好的朋友

  • Pandas 开发团队

  • Simon Hawkins

  • Spencer Clark +

  • Tom Augspurger

  • Vikas Pandey +

  • alimcmaster1

  • h-vishal +

  • jbrockmendel

  • mproszewska +

  • neilkg +

  • rebecca-palmer +

1.0.3 的新内容(2020 年 3 月 17 日)

原文:pandas.pydata.org/docs/whatsnew/v1.0.3.html

这些是 pandas 1.0.3 的变化。查看发布说明获取包括其他版本的 pandas 在内的完整更改日志。

修复的回归

  • 修复了当底层数据不可写时 resample.agg 中的回归(GH 31710

  • 修复了带重新索引的 DataFrame 指数运算中的回归(GH 32685) ## Bug 修复

贡献者

总共有 5 人为此版本提供了补丁。名字旁边带有“+”的人第一次为此提供了补丁。

  • MeeseeksMachine

  • Pandas 开发团队

  • Tom Augspurger

  • William Ayd

  • jbrockmendel

修复的回归

  • 修复了当底层数据不可写时 resample.agg 中的回归(GH 31710

  • 修复了带重新索引的 DataFrame 指数运算中的回归(GH 32685

Bug 修复

贡献者

总共有 5 人为此版本提供了补丁。名字旁边带有“+”的人第一次为此提供了补丁。

  • MeeseeksMachine

  • Pandas 开发团队

  • Tom Augspurger

  • William Ayd

  • jbrockmendel

1.0.2 版的新功能(2020 年 3 月 12 日)

原文:pandas.pydata.org/docs/whatsnew/v1.0.2.html

这些是 pandas 1.0.2 中的变化。查看发行说明获取包括其他版本的完整更改日志。

修复的回归问题

分组

  • 修复了当帧具有MultiIndex列和自定义函数时,DataFrameGroupBy.agg()SeriesGroupBy.agg()中的回归问题(GH 31777

  • 修复了groupby(..).rolling(..).apply()raw参数被忽略的回归问题(GH 31754

  • 修复了使用时间偏移时rolling(..).corr()中的回归问题(GH 31789

  • 修复了当存在NaN值时,groupby(..).nunique()中的回归问题,该问题会修改原始值(GH 31950

  • 修复了从内部操作引发ValueErrorDataFrame.groupby中的回归问题(GH 31802

  • 修复了在空输入上调用用户提供的函数时,DataFrameGroupBy.agg()SeriesGroupBy.agg()额外调用一次的回归问题(GH 31760

I/O

  • 修复了在某些类文件对象中未识别encoding选项的read_csv()中的回归问题(GH 31819

  • 修复了在传递了columns关键字参数时,DataFrame.to_excel()中的回归问题(GH 31677

  • 修复了在传递给函数的流被析构函数关闭的ExcelFile中的回归。 (GH 31467)

  • 修复了在读取具有MultiIndex列的 py27 pickle 时,read_pickle()引发UnicodeDecodeError的回归 (GH 31988)

重新索引/对齐

  • 修复了当otherDataFramemethod不是NoneSeries.align()中的回归 (GH 31785)

  • 修复了在使用(带时区信息的)索引和method=nearest重新索引时DataFrame.reindex()Series.reindex()中的回归 (GH 26683)

  • 修复了在DataFrame子类上调用DataFrame.reindex_like()时引发AssertionError的回归 (GH 31925)

  • 修复了在列不匹配的情况下DataFrame算术运算中的回归(GH 31623

其他

  • 修复了在DatetimeIndexTimedeltaIndex上连接时保留freq的简单情况中的回归(GH 32166

  • 修复了在使用datetime64数据类型时,通过整数fill_value传递给Series.shift()时的回归 (GH 32591)

  • 修复了对象类型为布尔值和缺失值的Index在 repr 中的回归(GH 32146

使用可空布尔数组进行索引

以前使用包含NA的可空布尔数组进行索引会引发ValueError,但现在允许使用NA,并将其视为False。 (GH 31503)

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

In [2]: mask = pd.array([True, True, False, None], dtype="boolean")

In [3]: s
Out[3]: 
0    1
1    2
2    3
3    4
dtype: int64

In [4]: mask
Out[4]: 
<BooleanArray>
[True, True, False, <NA>]
Length: 4, dtype: boolean 

pandas 1.0.0-1.0.1

>>> s[mask]
Traceback (most recent call last):
...
ValueError: cannot mask with array containing NA / NaN values 

pandas 1.0.2

In [5]: s[mask]
Out[5]: 
0    1
1    2
dtype: int64 

修复的错误

Datetimelike

  • 修复了Series.astype()中的错误,对于 tz-naive 和 tz-aware 的datetime64 dtype 没有复制(GH 32490

  • 修复了当传递pd.NAto_datetime()会引发的错误(GH 32213

  • 对两个导致超出界限的Timestamp相减时改进了错误消息(GH 31774

分类

  • 修复了当传递可空整数代码时Categorical.from_codes()错误地引发ValueError的错误(GH 31779

  • 修复了当给定包含pd.NA的 numpy 数组时Categorical()构造函数会引发TypeError的错误(GH 31927

  • 修复了在调用时会忽略或崩溃的Categorical中的错误,当使用列表样的to_replace调用Series.replace()时(GH 31720

输入/输出

  • 现在在DataFrame.to_json()中正确地输出空值而不是空对象的pd.NAGH 31615

  • 当 meta 路径中的值不可迭代时修复了pandas.json_normalize()中的错误(GH 31507

  • 修复了pandas.NA的 pickling。以前会返回一个新对象,这会破坏依赖于NA是单例的计算(GH 31847

  • 修复了带有可空无符号整数 dtype 的 parquet 往返中的错误(GH 31896

实验性的 dtype

  • 修复了对已使用"string" dtype 的列的DataFrame.convert_dtypes()中的错误(GH 31731)。

  • 修复了DataFrame.convert_dtypes()中包含整数和字符串混合的系列的错误(GH 32117

  • 修复了DataFrame.convert_dtypes()BooleanDtype列被转换为Int64的错误(GH 32287

  • 修复了使用具有字符串类型的切片索引器设置值时的错误(GH 31772

  • 修复了DataFrameGroupBy.first()SeriesGroupBy.first()DataFrameGroupBy.last()SeriesGroupBy.last()在组中包含pd.NA的对象类型列时会引发TypeError的错误(GH 32123

  • 修复了DataFrameGroupBy.mean()DataFrameGroupBy.median()DataFrameGroupBy.var()DataFrameGroupBy.std()Int64类型列上引发TypeError的错误(GH 32219

Strings

  • 使用pd.NASeries.str.repeat()一起,现在正确输出空值,而不是对向量输入引发错误(GH 31632

Rolling

  • 修复了在时间索引递减时使用变量窗口(由时间持续时间定义)的滚动操作的错误(GH 32385) ## 贡献者

本次发布共有 25 人贡献了补丁。名字后面带有“+”符号的人第一次贡献了补丁。

  • Anna Daglis +

  • Daniel Saxton

  • Irv Lustig

  • Jan Škoda

  • Joris Van den Bossche

  • Justin Zheng

  • Kaiqi Dong

  • Kendall Masse

  • Marco Gorelli

  • Matthew Roeschke

  • MeeseeksMachine

  • MomIsBestFriend

  • Pandas 开发团队

  • Pedro Reys +

  • Prakhar Pandey

  • Robert de Vries +

  • Rushabh Vasani

  • Simon Hawkins

  • Stijn Van Hoey

  • Terji Petersen

  • Tom Augspurger

  • William Ayd

  • alimcmaster1

  • gfyoung

  • jbrockmendel ## 修复回归问题

Groupby

  • 修复了在具有MultiIndex列和自定义函数的框架上失败的DataFrameGroupBy.agg()SeriesGroupBy.agg()的回归问题 (GH 31777)

  • 修复了groupby(..).rolling(..).apply() (RollingGroupby)中raw参数被忽略的回归问题 (GH 31754)

  • 修复了使用时间偏移时rolling(..).corr()的回归问题 (GH 31789)

  • 修复了groupby(..).nunique()在存在NaN值时修改原始值的回归问题 (GH 31950)

  • 修复了DataFrame.groupby在内部操作中引发ValueError的回归问题 (GH 31802)

  • 修复了DataFrameGroupBy.agg()SeriesGroupBy.agg()在空输入上额外调用用户提供的函数的回归问题 (GH 31760)

I/O

  • 修复了read_csv()中某些类似文件对象不识别encoding选项的回归问题 (GH 31819)

  • 修复了DataFrame.to_excel()在传递columns关键字参数时的回归问题 (GH 31677)

  • 修复了ExcelFile中传递给函数的流被析构函数关闭的回归问题 (GH 31467)

  • 修复了使用 MultiIndex 列的 py27 pickle 时 read_pickle() 报错 UnicodeDecodeError 的回归问题 (GH 31988).

重新索引/对齐

  • 修复了当 otherDataFramemethod 不是 NoneSeries.align() 的回归问题 (GH 31785)

  • 在使用(时区感知的)索引和 method=nearest 进行重新索引时,DataFrame.reindex()Series.reindex() 中的回归问题 (GH 26683)

  • 在一个 DataFrame 子类上使用 DataFrame.reindex_like() 引发了 AssertionError 的回归问题 (GH 31925)

  • 修复了DataFrame 算术运算中列不匹配的回归问题 (GH 31623)

其他

  • 修复了在简单情况下在 DatetimeIndexTimedeltaIndex 上连接时保留 freq 的回归问题 (GH 32166)

  • 修复了使用 datetime64 类型时 Series.shift() 的回归问题,当传递整数 fill_value 时 (GH 32591)

  • 修复了具有布尔值和缺失值的对象类型 Index 的 repr 中的回归问题 (GH 32146)

使用可空布尔数组进行索引

以前使用包含 NA 的可空布尔数组进行索引会引发 ValueError,但现在允许这样做,将 NA 视为 False。 (GH 31503)

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

In [2]: mask = pd.array([True, True, False, None], dtype="boolean")

In [3]: s
Out[3]: 
0    1
1    2
2    3
3    4
dtype: int64

In [4]: mask
Out[4]: 
<BooleanArray>
[True, True, False, <NA>]
Length: 4, dtype: boolean 

pandas 1.0.0-1.0.1

>>> s[mask]
Traceback (most recent call last):
...
ValueError: cannot mask with array containing NA / NaN values 

pandas 1.0.2

In [5]: s[mask]
Out[5]: 
0    1
1    2
dtype: int64 

Bug fixes

日期时间类

  • 修复了 Series.astype() 中的一个 bug,对于 tz-naive 和 tz-aware datetime64 dtype 没有复制 (GH 32490)

  • 修复了 to_datetime() 当传递 pd.NA 时会引发错误的 bug (GH 32213)

  • 当减去两个结果为越界 TimedeltaTimestamp 时,改进了错误消息 (GH 31774)

分类

  • 修复了 Categorical.from_codes() 当传递可空整数代码时不正确地引发 ValueError 的 bug。 (GH 31779)

  • 修复了 Categorical() 构造函数的一个 bug,当给定一个包含 pd.NA 的 numpy 数组时会引发 TypeError。(GH 31927)

  • Categorical 中的一个 bug,当使用列表式的 to_replace 调用 Series.replace() 时会忽略或崩溃 (GH 31720)

I/O

  • 使用 pd.NADataFrame.to_json() 现在正确地输出一个 null 值而不是一个空对象 (GH 31615)

  • pandas.json_normalize()中的一个 Bug,当元路径中的值不可迭代时 (GH 31507)

  • 修复了对 pandas.NA 的 pickling。以前会返回一个新对象,这会破坏依赖于 NA 为单例的计算 (GH 31847)

  • 修复了与可空无符号整数 dtypes 的 parquet 往返中的一个 bug (GH 31896).

实验性的 dtypes

  • 修复了DataFrame.convert_dtypes()中的一个 Bug,用于已经使用"string" dtype 的列 (GH 31731).

  • 修复了对混合整数和字符串系列的 DataFrame.convert_dtypes() 中的错误(GH 32117

  • 修复了DataFrame.convert_dtypes()BooleanDtype 列被转换为 Int64 的错误(GH 32287

  • 修复了使用字符串类型的切片索引器设置值时的错误(GH 31772

  • 修复了当组中包含 pd.NA 在对象 dtype 列中时,DataFrameGroupBy.first()SeriesGroupBy.first()DataFrameGroupBy.last()SeriesGroupBy.last() 会引发 TypeError 的错误(GH 32123

  • 修复了当 DataFrameGroupBy.mean()DataFrameGroupBy.median()DataFrameGroupBy.var()DataFrameGroupBy.std()Int64 dtype 列上引发 TypeError 的错误(GH 32219

字符串

  • 使用 pd.NASeries.str.repeat() 现在能正确输出空值,而不是对向量输入引发错误(GH 31632

滚动

  • 修复了在减少的时间索引上对变量窗口(由时间持续时间定义)的滚动操作的错误(GH 32385

贡献者

总共有 25 人为此版本提供了补丁。名字旁边带有“+”符号的人是第一次贡献补丁的人。

  • Anna Daglis +

  • Daniel Saxton

  • Irv Lustig

  • Jan Škoda

  • Joris Van den Bossche

  • Justin Zheng

  • Kaiqi Dong

  • Kendall Masse

  • Marco Gorelli

  • Matthew Roeschke

  • MeeseeksMachine

  • MomIsBestFriend

  • Pandas 开发团队

  • Pedro Reys +

  • Prakhar Pandey

  • Robert de Vries +

  • Rushabh Vasani

  • Simon Hawkins

  • Stijn Van Hoey

  • Terji Petersen

  • Tom Augspurger

  • William Ayd

  • alimcmaster1

  • gfyoung

  • jbrockmendel

1.0.1 中的新内容(2020 年 2 月 5 日)。

原文:pandas.pydata.org/docs/whatsnew/v1.0.1.html

这些是 pandas 1.0.1 中的变化。查看发行说明以获取包括 pandas 的其他版本在内的完整更改日志。

回归修复

  • 修复了使用标签索引而不是位置索引设置切片值的 DataFrame 中的回归(例如 df[-4:] = 1)(GH 31469)。

  • 修复了在使用包含 datetime.date 的切片索引 DatetimeIndexSeriesDataFrame 时的回归(GH 31501)。

  • 修复了当使用 MultiIndex 和非单调索引器时,DataFrame.__setitem__ 抛出 AttributeError 的回归(GH 31449)。

  • 修复了在将具有 >10000 个元素的数值 Series 与类似时间间隔的标量相乘时的 Series 乘法的回归(GH 31457)。

  • 修复了在一些对象 dtype 列上进行 min 等缩减时,.groupby().agg() 抛出 AssertionError 的回归(GH 31522)。

  • 修复了在使用 Cython 化的缩减函数(例如 first)进行分类 dtype 聚合时,.groupby() 聚合的回归(GH 31450)。

  • 修复了当使用返回非 pandas 非标量对象(例如列表或 numpy 数组)的函数调用 DataFrameGroupBy.apply()SeriesGroupBy.apply() 时的回归(GH 31441)。

  • 修复了在 DataFrame.groupby() 中取某一列的最小值或最大值时,如果该列具有周期 dtype,则会引发 TypeError 的回归(GH 31471)。

  • 修复了当使用空的 DataFrame 对 MultiIndex 的层进行分组时,在 DataFrame.groupby() 中的回归(GH 31670)。

  • 修复了在对象 dtype 和非缩减函数的情况下使用 DataFrame.apply() 中的回归问题(GH 31505

  • 修复了 to_datetime() 中的回归问题,在解析非纳秒分辨率日期时间时(GH 31491

  • 修复了 to_csv() 中的回归问题,指定 na_rep 可能会截断写入的值(GH 31447

  • 修复了使用 numpy.str_ 类别进行 Categorical 构造的回归问题(GH 31499

  • 修复了当选择包含单个 datetime64timedelta64 列的行时 DataFrame.loc()DataFrame.iloc() 中的回归问题(GH 31649

  • 修复了设置 pd.options.display.max_colwidth 时出现的回归问题,不接受负整数。此外,已弃用此行为,推荐使用 NoneGH 31532

  • 修复了 objTOJSON.c 中修复返回类型警告的回归问题(GH 31463

  • 修复了当传递可空整数时 qcut() 中的回归问题(GH 31389

  • 修复了使用可空整数 dtype 的 Series 进行赋值时的回归问题(GH 31446

  • 修复了使用标签列表为索引的 DataFrameSeries 进行索引时的性能回归问题(GH 31648

  • 修复了在文件对象 RawIOBase 中使用的 read_csv() 无法识别 encoding 选项的回归问题(GH 31575) ## 弃用

  • 对于 pd.options.display.max_colwidth 的负整数支持已弃用,推荐使用 NoneGH 31532) ## Bug 修复

日期时间

  • 修复了to_datetime()cache=True且存在超出范围值时引发错误的 bug (GH 31491)

数值

  • 修复了在DataFrame.__invert__~运算符)中丢失 dtype 的 bug,混合 dtype 时使用标签而不是位置进行索引,以及对基于扩展数组的SeriesDataFrameGH 23087) (GH 31183)

绘图

  • 绘制 tz-aware 时间序列不再产生 UserWarning (GH 31205)

间隔

  • 修复了使用interval dtype 进行Series.shift()时,将整数或日期时间的间隔数组进行移位时引发TypeError��bug (GH 34195) ## 贡献者

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

  • Daniel Saxton

  • Guillaume Lemaitre

  • Jeff Reback

  • Joris Van den Bossche

  • Kaiqi Dong

  • Marco Gorelli

  • MeeseeksMachine

  • Pandas 开发团队

  • Sebastián Vanrell +

  • Tom Augspurger

  • William Ayd

  • alimcmaster1

  • jbrockmendel

  • paihu +

  • proost ## 修复的回归问题

  • 修复了在使用切片设置值时DataFrame出现的回归问题(例如df[-4:] = 1),通过标签而不是位置进行索引 (GH 31469)

  • 修复了使用包含datetime.date的切片索引DatetimeIndex索引的SeriesDataFrame时出现的回归问题 (GH 31501)

  • 修复了在使用MultiIndex和非单调索引器时,DataFrame.__setitem__引发AttributeError的回归问题 (GH 31449)

  • 修复了当将具有>10000 个元素的数值Series与类似时间间隔的标量相乘时,Series乘法的回归问题 (GH 31457)

  • 修复了在对对象 dtype 列进行一些缩减(如min)时,.groupby().agg()引发AssertionError的回归问题 (GH 31522)

  • 修复了使用 Cython 化的缩减函数(例如first)对分类 dtype 进行.groupby()聚合时的回归问题(GH 31450)

  • 修复了DataFrameGroupBy.apply()SeriesGroupBy.apply()中的回归问题,如果使用返回非 pandas 非标量对象的函数(例如列表或 numpy 数组)调用时(GH 31441

  • 修复了DataFrame.groupby()中的回归问题,当对具有周期 dtype 的列取最小值或最大值时会引发TypeError。 (GH 31471)

  • 修复了DataFrame.groupby()中的回归问题,当空 DataFrame 按 MultiIndex 的级别分组时(GH 31670)。

  • 修复了DataFrame.apply()中的回归问题,当对象 dtype 和非减少函数一起使用时(GH 31505

  • 修复了to_datetime()中的回归问题,解析非纳秒分辨率日期时间时(GH 31491

  • 修复了to_csv()中的回归问题,其中指定na_rep可能会截断写入的值(GH 31447

  • 修复了Categorical构造中的回归问题,使用numpy.str_类别(GH 31499

  • 修复了DataFrame.loc()DataFrame.iloc()中的回归问题,当选择包含单个datetime64timedelta64列的行时(GH 31649)

  • 修复了设置pd.options.display.max_colwidth不接受负整数的回归问题。此外,已弃用此行为,建议使用NoneGH 31532

  • 修复了 objTOJSON.c 中的回归问题,修复了返回类型警告(GH 31463

  • 修复了在传递可空整数时 qcut() 的回归错误。 (GH 31389)

  • 修复了在使用可空整数 dtype 分配给 Series 时的回归错误 (GH 31446)

  • 在使用标签列表为索引的 DataFrameSeries 进行索引时,性能回归问题已修复 (GH 31648)

  • 修复了 read_csv() 中在文件对象 RawIOBase 中使用 encoding 选项未识别的性能回归问题 (GH 31575)

弃用

  • 对于 pd.options.display.max_colwidth 的负整数支持已弃用,建议使用 None (GH 31532)

Bug 修复

日期时间样式

  • 修复了 to_datetime()cache=True 且存在越界值时引发错误的 bug (GH 31491)

数字

  • 在混合 dtype 的情况下,DataFrame.__invert__ (~ 操作符) 以及对于由扩展数组支持的 SeriesDataFrame 中丢失 dtypes 的 bug (GH 31183) 已修复

绘图

  • 绘图时区感知时间序列不再发出 UserWarning (GH 31205)

区间

  • Series.shift() 中的 bug,使用 interval dtype 并将整数或日期时间的间隔数组进行移位时引发 TypeError (GH 34195)

贡献者

总共有 15 人对此版本进行了补丁贡献。 姓名后带“+”的人首次为补丁做出了贡献。

  • Daniel Saxton

  • Guillaume Lemaitre

  • Jeff Reback

  • Joris Van den Bossche

  • Kaiqi Dong

  • Marco Gorelli

  • MeeseeksMachine

  • Pandas 开发团队

  • Sebastián Vanrell +

  • Tom Augspurger

  • William Ayd

  • alimcmaster1

  • jbrockmendel

  • paihu +

  • proost

1.0.0 中的新功能(2020 年 1 月 29 日)

原文:pandas.pydata.org/docs/whatsnew/v1.0.0.html

这些是 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.applyexpanding.apply中使用 Numba

我们已经在apply()apply()中添加了engine关键字,允许用户使用Numba而不是 Cython 执行程序。如果apply函数能够操作 numpy 数组,并且数据集较大(100 万行或更多),则使用 Numba 引擎可以获得显著的性能提升。更多详情,请参阅滚动应用文档 (GH 28987, GH 30936) ### 为滚动操作定义自定义窗口

我们已经添加了pandas.api.indexers.BaseIndexer()类,允许用户定义rolling操作期间如何创建窗口边界。用户可以在pandas.api.indexers.BaseIndexer()子类上定义自己的get_window_bounds方法,该方法将生成用于滚动聚合期间每个窗口的起始和结束索引。有关更多详情和示例用法,请参阅自定义窗口滚动文档 ### 转换为 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.nanNone 用于对象 dtype 数据,pd.NaT 用于类似 datetime 的数据。pd.NA 的目标是提供一个可以在各种数据类型之间一致使用的“缺失”指示符。pd.NA 目前由可空整数和布尔数据类型以及新的字符串数据类型使用(GH 28095)。

警告

实验性:pd.NA的行为仍可能会在没有警告的情况下发生变化。

例如,使用可空整数 dtype 创建一个 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遵循三值逻辑(或Kleene 逻辑)的规则。例如:

In [8]: pd.NA | True
Out[8]: True 

查看有关缺失数据的用户指南中的 NA 部分。### 专用字符串数据类型

我们添加了StringDtype,一个专用于字符串数据的扩展类型。以前,字符串通常存储在对象 dtype 的 NumPy 数组中。 (GH 29975)

警告

StringDtype 目前被视为实验性质。实现和 API 的部分可能会在没有警告的情况下发生更改。

'string'扩展类型解决了对象 dtype NumPy 数组的几个问题:

  1. 您可能会意外地将字符串和非字符串的混合存储在对象 dtype 数组中。StringArray 只能存储字符串。

  2. object dtype 会破坏 dtype 特定的操作,例如DataFrame.select_dtypes()。没有明确的方法可以选择文本而排除非文本,但仍然是对象 dtype 的列。

  3. 在阅读代码时,对象 dtype 数组的内容比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 或列的返回类型也将具有字符串 dtype。

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数据类型。更多信息请参见 Text data types。### 支持缺失值的布尔数据类型

我们添加了BooleanDtype / BooleanArray,这是专门用于布尔数据的扩展类型,可以容纳缺失值。默认的bool数据类型基于 bool-dtype NumPy 数组,该列只能容纳TrueFalse,而不能容纳缺失值。这个新的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`以便更轻松地使用支持的扩展数据类型

为了鼓励使用支持`pd.NA`的扩展数据类型`StringDtype`、`BooleanDtype`、`Int64Dtype`、`Int32Dtype`等,引入了`DataFrame.convert_dtypes()`和`Series.convert_dtypes()`方法。([GH 29752](https://github.com/pandas-dev/pandas/issues/29752)) ([GH 30929](https://github.com/pandas-dev/pandas/issues/30929))

示例:

```py
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

  • Series.to_numpy()Index.to_numpy()DataFrame.to_numpy()添加了na_value参数,用于控制用于缺失数据的值(GH 30322

  • MultiIndex.from_product() 如果未明确提供,将从输入中推断级别名称。(GH 27292)

  • DataFrame.to_latex() 现在接受 captionlabel 参数。(GH 25436)

  • 具有可空整数、新字符串 dtype 和周期数据类型的数据帧现在可以转换为 pyarrow (>=0.15.0),这意味着在使用 pyarrow 引擎时支持写入 Parquet 文件格式。(GH 28368)。完整的 Parquet 往返(写入和读取回来使用 to_parquet() / read_parquet())

  • to_parquet() 现在适当处理 pyarrow 引擎中用户定义模式的 schema 参数。(GH 30270)

  • DataFrame.to_json() 现在接受一个 indent 整数参数,以便美化 JSON 输出。(GH 12004)

  • read_stata() 可以读取 Stata 119 dta 文件。(GH 28250)

  • 实现了 Window.var()Window.std() 函数。(GH 26597)

  • 为非 ASCII 文本增加了 encoding 参数到 DataFrame.to_string()。(GH 28766)

  • DataFrame.to_html() 中增加了 encoding 参数以处理非 ASCII 文本。(GH 28663)

  • Styler.background_gradient() 现在接受 vminvmax 参数。(GH 12145)

  • Styler.format() 添加了 na_rep 参数来帮助格式化缺失值(GH 21527GH 28358

  • read_excel() 现在可以通过传递 engine='pyxlsb' 来读取二进制 Excel(.xlsb)文件。有关更多详细信息和示例用法,请参阅二进制 Excel 文件文档。关闭了GH 8540

  • DataFrame.to_parquet() 中的 partition_cols 参数现在接受字符串了(GH 27117

  • pandas.read_json() 现在解析 NaNInfinity-InfinityGH 12213

  • DataFrame 构造函数保留了 ExtensionArray dtype 与 ExtensionArrayGH 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 23573GH 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 的新 repr

pandas.arrays.IntervalArray 采用与其他数组类相一致的新__repr__ (GH 25022)

pandas 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]') 

pandas 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)。

pandas 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 

pandas 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 

请注意,当提供冲突或潜在歧义的参数时,现在会引发错误。

pandas 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 

pandas 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

pandas 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 

pandas 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):

  1. 字符串数据(包括缺失值)现在返回 arrays.StringArray

  2. 整数数据(包括缺失值)现在返回 arrays.IntegerArray

  3. 布尔数据(包括缺失值)现在返回新的 arrays.BooleanArray

pandas 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 

pandas 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)。

pandas 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 

pandas 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") 将引发错误。

pandas 0.25.x

In [1]: np.asarray(a, dtype="float")
Out[1]:
array([ 1.,  2., nan]) 

pandas 1.0.0

In [41]: np.asarray(a, dtype="float")
Out[41]: array([ 1.,  2., nan]) 

使用具有显式 na_valuearrays.IntegerArray.to_numpy()

In [42]: a.to_numpy(dtype="float", na_value=np.nan)
Out[42]: array([ 1.,  2., nan]) 

缩减可以返回 pd.NA

当执行像 skipna=False 这样的缩减操作时,存在缺失值时结果现在将为 pd.NA 而不是 np.nanGH 30958)。

pandas 0.25.x

In [1]: pd.Series(a).sum(skipna=False)
Out[1]:
nan 

pandas 1.0.0

In [43]: pd.Series(a).sum(skipna=False)
Out[43]: <NA> 

value_counts 返回可为空的整数 dtype

带有可为空整数 dtype 的 Series.value_counts() 现在返回可为空整数 dtype 的值。

pandas 0.25.x

In [1]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype
Out[1]:
dtype('int64') 

pandas 1.0.0

In [44]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype
Out[44]: Int64Dtype() 

有关 pandas.NAnumpy.nan 之间的差异,请参阅 NA 语义。

arrays.IntegerArray的比较现在返回arrays.BooleanArray

arrays.IntegerArray进行比较操作现在返回一个arrays.BooleanArray而不是 NumPy 数组 (GH 29964)。

pandas 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]) 

pandas 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

Categorical包含np.nan时,默认情况下 Categorical.min() 不再返回 np.nan (skipna=True) (GH 25303)

pandas 0.25.x

In [1]: pd.Categorical([1, 2, np.nan], ordered=True).min()
Out[1]: nan 

pandas 1.0.0

In [47]: pd.Categorical([1, 2, np.nan], ordered=True).min()
Out[47]: 1 

空的pandas.Series的默认 dtype

在不指定 dtype 的情况下初始化空的pandas.Series现在会引发 DeprecationWarning (GH 17261)。 默认 dtype 将在未来版本中从 float64 更改为 object,以使其与DataFrameIndex的行为一致。

pandas 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) 

resample 操作的结果 dtype 推断发生了变化

在扩展类型的情况下,DataFrame.resample()聚合的结果 dtype 规则已更改 (GH 31359)。 以前,pandas 会尝试将结果转换回原始 dtype,如果不可能,则返回到通常的推断规则。 现在,只有当结果中的标量值是扩展 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 

pandas 0.25.x

In [1]> df.resample("2D").agg(lambda x: 'a').A.dtype
Out[1]:
CategoricalDtype(categories=['a', 'b'], ordered=False) 

pandas 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) 

这修复了resamplegroupby之间的不一致性。 这也修复了一个潜在的 bug,即结果的可能会根据结果被转换回原始 dtype 的方式而改变。

pandas 0.25.x

In [1] df.resample("2D").agg(lambda x: 'c')
Out[1]:

     A
0  NaN 

pandas 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)。如果已安装,则现在需要:

包名 最低版本 需要 更改
numpy 1.13.3 X
pytz 2015.4 X
python-dateutil 2.6.1 X
bottleneck 1.2.1
numexpr 2.6.2
pytest(开发版) 4.0.2

对于可选库,一般建议使用最新版本。以下表格列出了 pandas 开发过程中当前正在测试的每个库的最低版本。最低测试版本以下的可选库可能仍然可用,但不被视为受支持。

包名 最低版本 更改
beautifulsoup4 4.6.0
fastparquet 0.3.2 X
gcsfs 0.2.2
lxml 3.8.0
matplotlib 2.2.2
numba 0.46.0 X
openpyxl 2.5.7 X
pyarrow 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
xarray 0.8.2
xlrd 1.1.0
xlsxwriter 0.9.8
xlwt 1.2.0

更多信息,请参阅 依赖关系 和 可选依赖项。

构建变更

pandas 已经添加了 pyproject.toml 文件,并且不再将 Cython 化的文件包含在上传到 PyPI 的源分发中 (GH 28341, GH 20775)。如果您正在安装构建好的分发版(wheel)或通过 conda 安装,这对您不会产生任何影响。如果您要从源代码构建 pandas,则在调用 pip install pandas 之前,您不再需要在构建环境中安装 Cython。

其他 API 更改

  • DataFrameGroupBy.transform()SeriesGroupBy.transform() 现在在无效操作名称时引发异常 (GH 27489)

  • pandas.api.types.infer_dtype()现在将返回“integer-na”作为整数和np.nan混合的类型 (GH 27283)

  • MultiIndex.from_arrays()如果显式提供names=None,将不再从数组中推断名称 (GH 27292)

  • 为了改进 tab 补全,pandas 在使用dir内省 pandas 对象时不包括大多数已弃用的属性(例如dir(df))。要查看排除的属性,请查看对象的_deprecations属性,例如pd.DataFrame._deprecations (GH 28805).

  • unique()的返回 dtype 现在与输入 dtype 匹配。 (GH 27874)

  • options.matplotlib.register_converters的默认配置值从True更改为"auto" (GH 18720). 现在,pandas 自定义格式化程序仅适用于由 pandas 创建的图表,通过plot()。 以前,pandas 的格式化程序将应用于在plot()之后创建的所有图表。有关更多信息,请参阅单位注册。

  • Series.dropna()已经删除了其**kwargs参数,改为单个how参数。 以前向**kwargs提供除how之外的任何内容会引发TypeError (GH 29388)

  • 在测试 pandas 时,新的最低要求版本的 pytest 是 5.0.1 (GH 29664)

  • Series.str.__iter__()已被弃用,并将在未来版本中删除 (GH 28277).

  • <NA>添加到read_csv()的默认 NA 值列表中 (GH 30821) ### 文档改进

  • 添加了关于大型数据集的扩展的新部分 (GH 28315).

  • 为 HDF5 数据集添加了关于查询 MultiIndex 的子部分 (GH 28791). ## 弃用

  • Series.item()Index.item()已经取消弃用 (GH 29250)

  • Index.set_value 已被弃用。对于给定的索引 idx,数组 arridx 中的值 idx_val 和新值 validx.set_value(arr, idx_val, val) 等同于 arr[idx.get_loc(idx_val)] = val,应使用后者替代 (GH 28621).

  • is_extension_type() 已被弃用,应使用 is_extension_array_dtype() 替代 (GH 29457)

  • eval() 中关键字参数 “truediv” 已被弃用,并将在将来的版本中移除 (GH 29812)

  • DateOffset.isAnchored()DatetOffset.onOffset() 已被弃用,并将在将来的版本中移除,应使用 DateOffset.is_anchored()DateOffset.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)

  • Categorical.min()Categorical.max() 中的参数 numeric_only 已被弃用,并替换为 skipna (GH 25303)

  • lreshape() 中的参数 label 已被弃用,并将在将来的版本中移除 (GH 29742)

  • pandas.core.index 已被弃用,并将在将来的版本中移除,公共类已在顶级命名空间中可用 (GH 19711)

  • pandas.json_normalize() 现在暴露在顶级命名空间中。json_normalize 作为 pandas.io.json.json_normalize 的用法已经被弃用,推荐使用 pandas.json_normalize() 替代 (GH 27586).

  • pandas.read_json()numpy 参数已被弃用 (GH 28512).

  • DataFrame.to_stata()DataFrame.to_feather()DataFrame.to_parquet() 参数“fname”已弃用,请改用“path”代替 (GH 23574)

  • RangeIndex 的已弃用内部属性 _start_stop_step 现在会引发 FutureWarning 而不是 DeprecationWarning (GH 26581)

  • pandas.util.testing 模块已弃用。请使用文档化的 pandas.testing 中的公共 API,详见 Assertion functions (GH 16232).

  • pandas.SparseArray 已弃用。请使用 pandas.arrays.SparseArray (arrays.SparseArray) 代替。 (GH 30642)

  • Series.take()DataFrame.take() 的参数 is_copy 已弃用,并将在将来的版本中移除。 (GH 27357)

  • Index 上支持多维索引(例如 index[:, None])已弃用,并将在将来的版本中移除,转换为 numpy 数组后再进行索引 (GH 30588)

  • pandas.np 子模块现已弃用。请直接导入 numpy 代替 (GH 30296)

  • pandas.datetime 类现已弃用。请从 datetime 导入代替 (GH 30610)

  • 在将来,diff 将引发 TypeError 而不是隐式丢失扩展类型的 dtype。在调用 diff 之前,请先转换为正确的 dtype (GH 31025)

从分组的 DataFrame 中选择列

当从 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](https://github.com/pandas-dev/pandas/issues/28425))。我们建议改用具有稀疏值的 `Series` 或 `DataFrame`。

**Matplotlib 单位注册**

以前,pandas 会在导入 pandas 的过程中作为副作用向 matplotlib 注册转换器 ([GH 18720](https://github.com/pandas-dev/pandas/issues/18720))。这会改变在导入 pandas 后通过 matplotlib 绘制的图形的输出,即使您直接使用 matplotlib 而不是 `plot()`。

若要在 matplotlib 绘图中使用 pandas 格式化程序,请指定

```py
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()StataReaderStataReader.read() 中删除了先前废弃的关键字“index”,改用“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)

  • 整数 dtype 数组除以Timedelta现在会引发TypeErrorGH 21036)

  • TimedeltaIndexDatetimeIndex不再接受非纳秒 dtype 字符串,如“timedelta64”或“datetime64”,请改用“timedelta64[ns]”和“datetime64[ns]”(GH 24806)

  • pandas.api.types.infer_dtype()中默认的“skipna”参数从False更改为TrueGH 24050)

  • 删除了Series.ixDataFrame.ixGH 26438)

  • 删除了Index.summaryGH 18217)

  • Index构造函数中删除了先前不推荐使用的关键字“fastpath”(GH 23110)

  • 删除了Series.get_valueSeries.set_valueDataFrame.get_valueDataFrame.set_valueGH 17739)

  • 删除了Series.compoundDataFrame.compoundGH 26405)

  • DataFrame.set_index()Series.set_axis()中默认的“inplace”参数从None更改为FalseGH 27600)

  • 删除了Series.cat.categoricalSeries.cat.indexSeries.cat.nameGH 24751)

  • to_datetime()to_timedelta()中删除了先前不推荐使用的关键字“box”;此外,这些现在始终返回DatetimeIndexTimedeltaIndexIndexSeriesDataFrameGH 24486)

  • to_timedelta()TimedeltaTimedeltaIndex 不再允许“M”、“y”或“Y”作为“unit”参数(GH 23264)

  • 从(非公开)offsets.generate_range中删除了先前弃用的关键字“time_rule”,该关键字已移至core.arrays._ranges.generate_range()GH 24157)

  • 当使用类似列表的索引器和缺失标签的DataFrame.loc()Series.loc()时,将不再重新索引(GH 17295)

  • DataFrame.to_excel()Series.to_excel()中不存在的列将不再重新索引(GH 17295)

  • concat()中删除了先前弃用的关键字“join_axes”,请在结果上使用reindex_like代替(GH 22318)

  • DataFrame.sort_index()中删除了先前弃用的关键字“by”,请改用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数据传递给TimedeltaIndextimedelta64数据传递给DatetimeIndex现在会引发TypeErrorGH 23539GH 23937

  • int64值传递给DatetimeIndex并且传递时区时,现在会将值解释为 UTC 中的纳秒时间戳,而不是给定时区中的墙上时间(GH 24559

  • 传递给DataFrame.groupby()的元组现在被专门视为单个键(GH 18314

  • 移除了Index.contains,改用key in indexGH 30103

  • 不再允许在TimestampDatetimeIndexTimedeltaIndex中进行int或整数数组的加减操作,而是使用obj + n * obj.freq而不是obj + nGH 22535

  • 移除了Series.ptpGH 21614

  • 移除了Series.from_arrayGH 18258

  • 移除了DataFrame.from_itemsGH 18458

  • 移除了DataFrame.as_matrixSeries.as_matrixGH 18458

  • 移除了Series.asobjectGH 18477

  • 移除了DataFrame.as_blocksSeries.as_blocksDataFrame.blocksSeries.blocksGH 17656

  • pandas.Series.str.cat()现在默认对齐others,使用join='left'GH 27611

  • pandas.Series.str.cat()不再接受列表形式的嵌套列表了(GH 27611

  • Series.where()Categorical数据类型上(或者在具有Categorical列的DataFrame.where())不再允许设置新的分类(GH 24114

  • DatetimeIndexTimedeltaIndexPeriodIndex 构造器中移除了先前弃用的关键字 “start”、“end” 和 “periods”,请使用 date_range()timedelta_range()period_range() 替代 (GH 23919)

  • DatetimeIndexTimedeltaIndex 构造器中移除了先前弃用的关键字 “verify_integrity” (GH 23919)

  • pandas.core.internals.blocks.make_block 中移除了先前弃用的关键字 “fastpath” (GH 19265)

  • Block.make_block_same_class() 中移除了先前弃用的关键字 “dtype” (GH 19434)

  • 移除了 ExtensionArray._formatting_values。请使用 ExtensionArray._formatter 替代。 (GH 23601)

  • 移除了 MultiIndex.to_hierarchical (GH 21613)

  • 移除了 MultiIndex.labels,请使用 MultiIndex.codes 替代 (GH 23752)

  • MultiIndex 构造器中移除了先前弃用的关键字 “labels”,请使用 “codes” 替代 (GH 23752)

  • 移除了 MultiIndex.set_labels,请使用 MultiIndex.set_codes() 替代 (GH 23752)

  • MultiIndex.set_codes()MultiIndex.copy()MultiIndex.drop() 中移除了先前弃用的关键字 “labels”,请使用 “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 到 usecols(包括)的整数列表(GH 23635

  • DataFrame.to_records() 中移除了先前废弃的关键词 “convert_datetime64”(GH 18902

  • 放弃使用 IntervalIndex.from_intervals,改用 IntervalIndex 构造函数(GH 19263

  • DatetimeIndex.to_series() 中默认的 “keep_tz” 参数从 None 改为 TrueGH 23739

  • 移除了 api.types.is_periodapi.types.is_datetimetzGH 23917

  • 移除了对使用 pandas 0.16 之前版本创建的包含 Categorical 实例的 pickle 的读取支持(GH 27538

  • 移除了 pandas.tseries.plotting.tsplotGH 18627

  • DataFrame.apply() 中移除了先前废弃的关键词 “reduce” 和 “broadcast”(GH 18577

  • 移除了先前废弃的 pandas._testing 中的 assert_raises_regex 函数(GH 29174

  • 移除了 pandas.core.indexes.frozen 中先前废弃的 FrozenNDArray 类(GH 29335

  • read_feather() 中移除了之前废弃的关键字“nthreads”,使用“use_threads”代替(GH 23053

  • 移除了 Index.is_lexsorted_for_tupleGH 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_copySeries.is_copyGH 18812

  • 移除了 DataFrame.get_ftype_countsSeries.get_ftype_countsGH 18243

  • 移除了 DataFrame.ftypesSeries.ftypesSeries.ftypeGH 26744

  • 移除了 Index.get_duplicates,使用 idx[idx.duplicated()].unique() 代替(GH 20239

  • 移除了 Series.clip_upperSeries.clip_lowerDataFrame.clip_upperDataFrame.clip_lowerGH 24203

  • 移除了更改 DatetimeIndex.freqTimedeltaIndex.freq,或 PeriodIndex.freq 的能力(GH 20772

  • 移除了 DatetimeIndex.offsetGH 20730

  • 移除了 DatetimeIndex.asobjectTimedeltaIndex.asobjectPeriodIndex.asobject,使用 astype(object) 代替(GH 29801

  • factorize()中移除了先前弃用的关键字“order”(GH 19751)

  • read_stata()DataFrame.to_stata()中移除了先前弃用的关键字“encoding”(GH 21400)

  • concat()中的默认“sort”参数从None更改为FalseGH 20613)

  • DataFrame.update()中移除了先前弃用的关键字“raise_conflict”,请改用“errors”(GH 23585)

  • DatetimeIndex.shift()TimedeltaIndex.shift()PeriodIndex.shift()中移除了先前弃用的关键字“n”,请改用“periods”(GH 22458)

  • DataFrame.resample()中移除了先前弃用的关键字“how”、“fill_method”和“limit”(GH 30139)

  • 现在将整数传递给具有timedelta64[ns] dtype 的Series.fillna()DataFrame.fillna()会引发TypeErrorGH 24694)

  • 不再支持将多个轴传递给DataFrame.dropna()GH 20995)

  • 移除了Series.nonzero,请使用to_numpy().nonzero()代替(GH 24048)

  • 不再支持将浮点codes传递给Categorical.from_codes(),请改为传递codes.astype(np.int64)GH 21775)

  • Series.str.partition()Series.str.rpartition()中移除了先前弃用的关键字“pat”,请改用“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() 返回 Categorical 而不是 ndarray (GH 27199)

  • 不再支持在 Numpy ufuncs 上的 'outer' 方法,例如在 Series 对象上操作的 np.subtract.outer,将引发 NotImplementedError (GH 27198)

  • 移除了 Series.get_dtype_countsDataFrame.get_dtype_counts (GH 27145)

  • Categorical.take()fill_value 参数的默认值从 True 改为 False (GH 20841)

  • Series.rolling().apply(), DataFrame.rolling().apply(), Series.expanding().apply(), 和 DataFrame.expanding().apply()raw 参数的默认值从 None 改为 False (GH 20584)

  • 移除了 Series.argmin()Series.argmax() 的弃用行为,请使用 Series.idxmin()Series.idxmax() 替代旧行为 (GH 16955)

  • 现在,将带有时区信息的 datetime.datetimeTimestamp 传递给具有 tz 参数的 Timestamp 构造函数会引发 ValueError (GH 23621)

  • 移除了 Series.base, Index.base, Categorical.base, Series.flags, Index.flags, PeriodArray.flags, Series.strides, Index.strides, Series.itemsize, Index.itemsize, Series.data, Index.data (GH 20721)

  • 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() 中移除了先前弃用的关键字“errors” (GH 22644)

  • CategoricalDtype 中的默认“ordered”参数从 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)

  • Categorical.fillna() 中移除了先前弃用的关键字“fill_value”,改用“value”代替(GH 19269)

  • andrews_curves() 中移除了先前弃用的关键字“data”,改用“frame”代替(GH 6956)

  • parallel_coordinates() 中移除了先前弃用的关键字“data”,改用“frame”代替(GH 6956)

  • parallel_coordinates() 中移除了先前弃用的关键字“colors”,改用“color”代替(GH 6956)

  • read_gbq() 中移除了先前弃用的关键字“verbose”和“private_key”(GH 30200)

  • 在具有时区信息的 SeriesDatetimeIndex 上调用 np.arraynp.asarray 现在会返回一个具有时区信息的 Timestamp 对象数组(GH 24596) ## 性能改进

  • 与标量进行 DataFrame 算术和比较操作时的性能改进(GH 24990, GH 29853

  • 与非唯一 IntervalIndex 进行索引时的性能改进(GH 27489

  • MultiIndex.is_monotonic 的性能改进(GH 27495

  • binsIntervalIndex 时,cut() 的性能改进(GH 27668

  • 初始化 DataFrame 使用 range 时的性能改进(GH 30171

  • method"spearman" 时,DataFrame.corr() 的性能改进(GH 28139

  • 当提供要替换的值列表时,DataFrame.replace() 的性能改进(GH 28099

  • DataFrame.select_dtypes() 中使用矢量化而不是循环迭代进行性能改进(GH 28317

  • Categorical.searchsorted()CategoricalIndex.searchsorted() 的性能改进(GH 28795

  • 当将 Categorical 与标量进行比较且标量未在类别中找到时的性能改进(GH 29750

  • 在检查 Categorical 中的值是否等于、大于或大于给定标量时,性能有所提升。如果检查 Categorical 是否小于或小于等于标量,则不会有改进(GH 29820

  • 改进了 Index.equals()MultiIndex.equals() 的性能(GH 29134

  • infer_dtype() 中改进了性能,当 skipnaTrue 时(GH 28814) ## Bug 修复

Categorical

  • 添加了测试以断言 fillna() 在值不是类别中的值时会引发正确的 ValueError 消息(GH 13628

  • Categorical.astype() 中存在错误,当转换为整数时,NaN 值处理不正确(GH 28406

  • 当目标包含重复项时,使用 CategoricalIndexDataFrame.reindex() 会失败,并且如果源包含重复项,则不会失败(GH 28107

  • Categorical.astype() 中存在错误,不允许转换为扩展数据类型(GH 28668

  • merge() 无法连接分类和扩展数据类型列时存在错误(GH 28668

  • Categorical.searchsorted()CategoricalIndex.searchsorted() 现在也适用于无序的分类变量(GH 21667

  • 添加了测试以断言使用 DataFrame.to_parquet()read_parquet() 将字符串类型的 Parquet 回转时会保留分类数据类型(GH 27955

  • Categorical.remove_categories() 中的错误消息更改为始终以集合形式显示无效的移除项(GH 28669

  • 在分类数据类型的 Series 上使用日期访问器时,未返回与在该类型的 Series 上使用 str.() / dt.() 相同类型的对象。例如,当在具有重复条目的 Categorical 上访问 Series.dt.tz_localize() 时��访问器会跳过重复项 (GH 27952)

  • DataFrame.replace()Series.replace() 中的错误,会在分类数据上产生不正确的结果(GH 26988)

  • 调用 Categorical.min()Categorical.max() 时出现的错误,会在空的分类数据上引发 numpy 异常 (GH 30227)

  • 当通过 groupby(..., observed=False) 调用以下方法时,现在还会正确输出未观察到的类别的值 (GH 17605) * core.groupby.SeriesGroupBy.count() * core.groupby.SeriesGroupBy.size() * core.groupby.SeriesGroupBy.nunique() * core.groupby.SeriesGroupBy.nth()

Datetimelike

  • Series.__setitem__() 中的错误,将 np.timedelta64("NaT") 错误地转换为 np.datetime64("NaT"),当插入到具有 datetime64 数据类型的 Series 时(GH 27311)

  • Series.dt() 属性查找在底层数据为只读时出现错误(GH 27529)

  • HDFStore.__getitem__ 中的错误,错误地读取在 Python 2 中创建的 tz 属性(GH 26443)

  • to_datetime()中的一个错误,当传递格式不正确的str数组且使用errors=”coerce”参数时,可能会错误地引发ValueErrorGH 28299

  • core.groupby.SeriesGroupBy.nunique()中存在一个错误,其中NaT值干扰了唯一值的计数(GH 27951

  • Timestamp减法中,从np.datetime64对象中减去一个Timestamp会错误地引发TypeErrorGH 28286

  • 使用Timestamp进行整数或整数 dtype 数组的加法和减法现在会引发NullFrequencyError而不是ValueErrorGH 28268

  • SeriesDataFrame中存在一个错误,当添加或减去一个np.datetime64对象时,整数 dtype 未能引发TypeErrorGH 28080

  • Series.astype()Index.astype()DataFrame.astype()中存在一个错误,当转换为整数 dtype 时未能处理NaTGH 28492

  • Week中存在一个错误,当添加或减去无效类型时,weekday错误地引发AttributeError而不是TypeErrorGH 28530

  • DataFrame的算术操作中,当与 dtype 为'timedelta64[ns]'Series进行操作时存在一个错误(GH 28049

  • core.groupby.generic.SeriesGroupBy.apply()中存在一个错误,当原始 DataFrame 中的列是 datetime 且列标签不是标准整数时,会引发ValueErrorGH 28247

  • pandas._config.localization.get_locales() 中的错误,locales -a 将地区编码为 windows-1252(GH 23638GH 24760GH 27368

  • 使用 timedelta64[ns] 类型调用时未引发 TypeError 的错误 Series.var()GH 28289

  • 内联代码 DatetimeIndex.strftime()Series.dt.strftime() 中的错误,将NaT转换为字符串'NaT'而不是np.nanGH 29578

  • 使用长度不正确的布尔掩码遮盖类似日期时间的数组时未引发 IndexError 的错误(GH 30308

  • Timestamp.resolution 为属性而不是类属性的错误(GH 29910

  • 调用 Nonepandas.to_datetime()TypeError 而不是返回 NaT 的错误(GH 30011

  • 使用 deque 对象时 pandas.to_datetime() 在使用 cache=True(默认)时未成功转换的错误(GH 29403

  • 对于具有 datetime64timedelta64 类型的 Series.item()DatetimeIndex.item()TimedeltaIndex.item() 返回整数而不是 TimestampTimedelta 的错误(GH 30175

  • 在添加非优化的 DateOffsetDatetimeIndex 错误地删除时区信息(GH 30336

  • 在尝试删除不存在的值时 DataFrame.drop() 从 DatetimeIndex 中产生令人困惑的错误消息(GH 30399

  • DataFrame.append()中的一个 bug 会移除新数据的时区感知性(GH 30238

  • Series.cummin()Series.cummax()中的一个 bug,具有时区感知 dtype 的错误删除其时区信息(GH 15553

  • DatetimeArrayTimedeltaArrayPeriodArray中的一个 bug,就地加法和减法实际上并未就地操作(GH 24115

  • 在使用存储IntegerArraySeries调用pandas.to_datetime()时,错误地引发TypeError而不是返回Series的一个 bug(GH 30050

  • date_range()中的一个 bug,使用自定义工作时间作为freq和给定的periods数量时(GH 30593

  • PeriodIndex比较中的一个 bug,将整数不正确地转换为Period对象,与Period比较行为不一致(GH 30722

  • DatetimeIndex.insert()中的一个 bug,在尝试将时区感知的Timestamp插入时区无关的DatetimeIndex时引发ValueError而不是TypeError,反之亦然(GH 30806

时间差

  • np.datetime64对象中减去TimedeltaIndexTimedeltaArray的一个 bug(GH 29558

时区

数值

  • DataFrame.quantile()中的一个 bug,对零列DataFrame不正确地引发异常(GH 23925

  • DataFrame 弹性不等式比较方法(DataFrame.lt()DataFrame.le()DataFrame.gt()DataFrame.ge())与对象类型和 complex 入口的 Series 类似 (GH 28079),未能像它们的 Series 对应项那样引发 TypeError

  • DataFrame 逻辑操作(&|^)中存在错误,未填充 NA 值以匹配 Series 的行为 (GH 28741)

  • 在指定轴名之前引用变量的情况下存在 DataFrame.interpolate() 中的错误 (GH 29142)

  • Series.var() 中的错误,在不通过 ddof 参数传递空置整数 dtype 系列时未计算出正确的值 (GH 29128)

  • 当使用 frac > 1 和 replace = False 时改进了错误消息(GH 27451

  • 数字索引中的错误导致可以使用无效的 dtype(例如类似 datetime 的)实例化 Int64IndexUInt64IndexFloat64Index (GH 29539)

  • 在使用值在 np.uint64 范围内的列表构建时,UInt64Index 出现精度损失的错误 (GH 29526)

  • 在使用 np.uint64 范围内的整数进行索引时,导致索引失败的 NumericIndex 构造错误 (GH 28023)

  • 在使用值在 np.uint64 范围内的整数索引 DataFrame 时,导致 NumericIndex 被转换为 Float64Index 的错误 (GH 28279)

  • 当使用未排序索引的方法=index时,Series.interpolate() 中存在的错误 (GH 21037),之前会返回不正确的结果。

  • DataFrame.round() 中存在漏洞,当具有 CategoricalIndex 列的 DataFrame 错误地引发 TypeErrorGH 30063

  • 当存在重复索引时,Series.pct_change()DataFrame.pct_change() 存在漏洞(GH 30463

  • DataFrame 累积操作(例如 cumsum, cummax)时存在漏洞,将不正确地转换为对象 dtype(GH 19296

  • diff 中存在漏洞导致扩展类型的 dtype 丢失(GH 30889

  • 当其中一列是可空整数 dtype 时,DataFrame.diff 存在漏洞会引发 IndexErrorGH 30967

转换

字符串

  • 对于空的Series调用Series.str.isalnum()(以及其他“ismethods”),会返回object dtype 而不是boolGH 29624

区间

  • IntervalIndex.get_indexer() 中存在漏洞,当 CategoricalCategoricalIndex target 错误地引发 TypeErrorGH 30063

  • pandas.core.dtypes.cast.infer_dtype_from_scalar 中存在漏洞,当传递 pandas_dtype=True 时没有推断出IntervalDtypeGH 30337

  • 修复了Series构造函数中,从Interval对象列表构造Series导致object dtype 而不是IntervalDtype的错误(GH 23563)

  • 修复了IntervalDtypekind属性错误地设置为None而不是"O"的错误(GH 30568)

  • 修复了具有间隔数据的IntervalIndexIntervalArraySeries中相等比较错误的错误(GH 24112)

索引

  • 修复了使用反向切片进行赋值时的错误(GH 26939)

  • 修复了DataFrame.explode()在索引中存在重复项时会复制框架的错误(GH 28010)

  • 修复了使用其他类型索引重新索引PeriodIndex()时出现的错误,该索引包含了一个PeriodGH 28323)(GH 28337)

  • 修复了通过.loc分配列时,使用 numpy 非 ns 日期时间类型时的错误(GH 27395)

  • 修复了Float64Index.astype()np.inf在转换为整数 dtype 时未正确处理的错误(GH 28475)

  • 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)

  • 在设置分类值的 1 行 DataFrame 时,DataFrame.loc()中的错误 dtype (GH 25495)

  • MultiIndex.get_loc()在输入包含缺失值时无法找到缺失值 (GH 19132)

  • 在使用布尔索引器时,Series.__setitem__()中的错误会在新数据的长度与True值的数量匹配且新数据不是Seriesnp.array时错误地分配值 (GH 30567)

  • 使用PeriodIndex进行索引时的错误,错误地接受代表年份的整数,应使用ser.loc["2007"]而不是ser.loc[2007] (GH 30763)

缺失

MultiIndex

  • 构造函数MultiIndex验证给定的sortorder是否与实际的lexsort_depth兼容,如果verify_integrity参数为True(默认)(GH 28735)

  • Series 和 MultiIndex.dropMultiIndex在给定级别上不存在标签时会引发异常 (GH 8594)

IO

  • read_csv()现在在使用 Python csv 引擎时接受二进制模式文件缓冲区 (GH 23779)

  • DataFrame.to_json()中的错误,使用元组作为列或索引值并使用orient="columns"orient="index"会产生无效的 JSON (GH 20500)

  • 改进无穷大解析。read_csv()现在将Infinity+Infinity-Infinity解释为浮点数值 (GH 10065)

  • DataFrame.to_csv()中的错误,当na_rep的长度短于文本输入数据时,值被截断。 (GH 25099)

  • Bug in DataFrame.to_string() 使用显示选项截断值而不是输出完整内容时(GH 9784)

  • Bug in DataFrame.to_json() 使用orient="table"时,日期时间列标签不会以 ISO 格式写出(GH 28130)

  • Bug in DataFrame.to_parquet() 使用engine='fastparquet'写入 GCS 时,如果文件不存在,则会失败(GH 28326)

  • Bug in read_hdf() 当引发异常时关闭未打开的存储(GH 28699)

  • Bug in DataFrame.read_json() 使用orient="index"时无法保持顺序(GH 28557)

  • Bug in DataFrame.to_html() 未验证formatters参数的长度(GH 28469)

  • Bug in DataFrame.read_excel() 使用engine='ods'时,sheet_name参数引用不存在的工作表时(GH 27676)

  • Bug in pandas.io.formats.style.Styler() 对浮点值的格式化未正确显示小数位数(GH 13257)

  • Bug in DataFrame.to_html() 在同时使用formatters=<list>max_cols时。 (GH 25955)

  • Bug in Styler.background_gradient() 无法与 dtype Int64一起使用(GH 28869)

  • Bug in DataFrame.to_clipboard() 在 ipython 中不可靠(GH 22707)

  • Bug in read_json() 中默认编码未设置为utf-8GH 29565)

  • Bug in PythonParser 处理十进制字段时混合使用 str 和 bytes(GH 29650)

  • read_gbq() 现在接受 progress_bar_type 参数,在数据下载时显示进度条。(GH 29857)

  • pandas.io.json.json_normalize() 中存在错误,当 record_path 指定的位置缺失值时会引发 TypeErrorGH 30148

  • read_excel() 现在接受二进制数据(GH 15914

  • read_csv() 中存在错误,其中编码处理仅限于 C 引擎的字符串 utf-16GH 24130

绘图

  • Series.plot() 中,布尔值无法绘制的错误(GH 23719

  • 在没有行时,DataFrame.plot() 无法绘图的错误(GH 27758

  • DataFrame.plot() 在同一轴上绘制多个系列时,产生错误的图例标记(GH 18222

  • kind='box' 且数据包含日期时间或时间间隔数据时,DataFrame.plot() 中存在错误(这些类型现在会自动被忽略)(GH 22799

  • DataFrame.plot.line()DataFrame.plot.area() 在 x 轴上生成错误的 xlim(GH 27686GH 25160GH 24784

  • DataFrame.boxplot() 存在错误,不接受 color 参数,就像 DataFrame.plot.box() 一样(GH 26214

  • 对于 DataFrame.plot.bar(),忽略了 xticks 参数的错误(GH 14119

  • 当设置选项时,set_option() 现在会验证提供给 'plotting.backend' 的绘图后端是否在设置选项时实现了该后端,而不是在创建绘图时验证(GH 28163)。

  • DataFrame.plot() 现在允许使用 backend 关键字参数在一个会话中更改后端(GH 28619)。

  • 颜色验证中的错误漏报非颜色样式的错误(GH 29122)。

  • 允许 DataFrame.plot.scatter() 绘制 objectsdatetime 类型的数据(GH 18755, GH 30391)。

  • 在使用 by 和子图时,DataFrame.hist() 中的 xrot=0 无法正常工作(GH 30288)。

GroupBy/resample/rolling

  • 当函数返回一个 Index 时,core.groupby.DataFrameGroupBy.apply() 中的一个组仅显示来自一个单一组的输出(GH 28652)。

  • 当任何组包含所有 NA 值时,DataFrame.groupby() 中具有多个组的 bug 会引发 IndexErrorGH 20519)。

  • Resampler.size()Resampler.count() 在与空的 SeriesDataFrame 结合使用时返回错误的 dtype(GH 28427)。

  • axis=1 时,DataFrame.rolling() 中不允许在日期时间上进行滚动(GH 28192)。

  • DataFrame.rolling() 中不允许在多级索引级别上滚动的错误(GH 15584)。

  • 在 monotonic decreasing 时间索引上不允许滚动的错误 (GH 19248)。

  • axis=1 时,DataFrame.groupby() 不提供按列名选择的错误 (GH 27614)

  • 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() 忽略 interpolation 关键字参数的错误 (GH 28779)

  • DataFrame.groupby() 中存在的错误,anyallnunique 和 transform 函数会错误地处理重复的列标签(GH 21668

  • core.groupby.DataFrameGroupBy.agg() 中存在的 bug,带有时区感知的 datetime64 列错误地将结果转换为原始 dtype(GH 29641

  • DataFrame.groupby() 中存在的 bug,在使用 axis=1 并且具有单层列索引时出现问题(GH 30208

  • DataFrame.groupby() 中存在的 bug,在 axis=1 上使用 nunique 时出现问题(GH 30253

  • DataFrameGroupBy.quantile()SeriesGroupBy.quantile() 中存在的 bug,当有多个类似列表的 q 值和整数列名时会出现问题(GH 30289

  • DataFrameGroupBy.pct_change()SeriesGroupBy.pct_change() 中存在的 bug,在 fill_methodNone 时导致 TypeError 错误(GH 30463

  • Rolling.count()Expanding.count() 中存在的 bug,在忽略了 min_periods 参数时出现问题(GH 26996

重塑

  • DataFrame.apply() 中存在的 bug,导致空 DataFrame 输出不正确(GH 28202, GH 21959

  • DataFrame.stack() 中存在的 bug,当创建 MultiIndex 时未正确处理非唯一索引(GH 28301

  • pivot_table() 中存在的 bug,在 margins=Trueaggfunc='mean' 时未返回正确的 float 类型(GH 24893

  • merge_asof() 中存在一个 bug,无法使用 datetime.timedelta 作为 tolerance 参数 (GH 28098)

  • merge() 中存在一个 bug,当使用 MultiIndex 时,未能正确添加后缀(GH 28518

  • qcut()cut() 现在处理布尔输入 (GH 20303)

  • 修复确保在使用容差值时,所有 int dtype 都可以在 merge_asof() 中使用。之前,每个非 int64 类型都会引发错误的 MergeError (GH 28870).

  • get_dummies() 中提供更好的错误消息,当 columns 不是类似列表的值时(GH 28383

  • Index.join() 中存在一个 bug,导致不匹配的 MultiIndex 名称顺序引发无限递归错误。 (GH 25760, GH 28956)

  • Series.pct_change() 中存在一个 bug,提供一个锚定频率会引发 ValueError (GH 28664)

  • 在某些情况下,当两个 DataFrame 拥有相同的列但顺序不同时,DataFrame.equals() 错误地返回 True 的 bug(GH 28839

  • DataFrame.replace() 中存在一个 bug,导致非数值替换值的 dtype 未被尊重(GH 26632

  • melt() 中存在一个 bug,当为 id_varsvalue_vars 提供混合字符串和数值时,会错误地引发 ValueErrorGH 29718

  • 当转置一个每列都是相同扩展 dtype 的 DataFrame 时,现在会保留 dtype(GH 30091

  • merge_asof()合并时,当left_index为时区感知型且right_on为时区感知型列时存在错误(GH 29864

  • cut()qcut()中,当labels=True时,改进了错误消息和文档字符串(GH 13318

  • 在具有级别列表的DataFrame.unstack()中,缺少fill_na参数时存在错误 (GH 30740)

稀疏

  • SparseDataFrame中的算术操作存在错误,错误地将输入强制转换为浮点数 (GH 28107)

  • 在存在名为sparse的列时,DataFrame.sparse返回Series而不是访问器时存在错误 (GH 30758)

  • 修复了带有布尔型稀疏数组的operator.xor()。现在返回稀疏结果,而不是对象 dtype (GH 31025)

ExtensionArray

  • 在设置标量字符串时,arrays.PandasArray存在错误 (GH 28118, GH 28150)

  • 可空整数无法与字符串进行比较的错误 (GH 28930)

  • 当具有类似列表的数据且指定了dtype时,DataFrame构造函数会引发ValueError的错误 (GH 30280)

其他

  • 尝试使用set_option()设置display.precisiondisplay.max_rowsdisplay.max_columns为除了None或正整数之外的任何值都会引发ValueError (GH 23348)

  • 使用嵌套字典中的重叠键来调用DataFrame.replace()将不再引发错误,现在匹配扁平字典的行为 (GH 27660)

  • 现在,DataFrame.to_csv()Series.to_csv()支持将字典作为compression参数,其中键'method'是压缩方法,其他键是额外的压缩选项,当压缩方法为'zip'时 (GH 26023)

  • Series.diff()中的错误,布尔系列将错误地引发TypeErrorGH 17294

  • 当传递一个Series的元组时,Series.append()不再引发TypeErrorGH 28410

  • 在调用pandas.libs._json.encode()时出现错误的错误消息被修复,该错误消息在 0d 数组上调用时出现错误(GH 18878

  • DataFrame.query()DataFrame.eval()中的反引号引用现在也可以用于使用无效标识符,比如以数字开头的名称、Python 关键字或使用单个字符操作符的情况(GH 27017

  • pd.core.util.hashing.hash_pandas_object中的错误,包含元组的数组被错误地视为不可哈希(GH 28969

  • 在使用空列表附加时引发IndexErrorDataFrame.append()中的错误被修复(GH 28769

  • 修复AbstractHolidayCalendar在 2030 年后返回正确结果的问题(现在扩展到 2200 年)(GH 27790

  • 修复了IntegerArray对除以0的操作返回inf而不是NaN的问题(GH 27398

  • 当另一个值为01时,修复了pow操作对IntegerArray的影响(GH 29997

  • 在启用use_inf_as_na时,Series.count()引发异常(GH 29478

  • Index中的错误,非可哈希名称可以设置而不引发TypeErrorGH 29069

  • 在传递 2D ndarray和扩展 dtype 时,DataFrame构造函数中的错误被修复(GH 12513

  • 当提供了一个带有dtype="string"na_rep的系列时,在DataFrame.to_csv()中的错误,na_rep被截断为 2 个字符。 (GH 29975)

  • DataFrame.itertuples() 的一个 bug,它会错误地确定是否可以使用命名元组来处理 255 列的数据帧(GH 28282

  • testing.assert_series_equal() 中处理嵌套的 NumPy object 数组,用于 ExtensionArray 实现(GH 30841

  • Index 构造函数中的一个 bug,它错误地允许二维输入数组(GH 13601, GH 27125

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

  • Aaditya Panikath +

  • Abdullah İhsan Seçer

  • Abhijeet Krishnan +

  • Adam J. Stewart

  • Adam Klaum +

  • Addison Lynch

  • Aivengoe +

  • Alastair James +

  • Albert Villanova del Moral

  • Alex Kirko +

  • Alfredo Granja +

  • Allen Downey

  • Alp Arıbal +

  • Andreas Buhr +

  • Andrew Munch +

  • Andy

  • Angela Ambroz +

  • Aniruddha Bhattacharjee +

  • Ankit Dhankhar +

  • Antonio Andraues Jr +

  • Arda Kosar +

  • Asish Mahapatra +

  • Austin Hackett +

  • Avi Kelman +

  • AyowoleT +

  • Bas Nijholt +

  • Ben Thayer

  • Bharat Raghunathan

  • Bhavani Ravi

  • Bhuvana KA +

  • Big Head

  • Blake Hawkins +

  • Bobae Kim +

  • Brett Naul

  • Brian Wignall

  • Bruno P. Kinoshita +

  • Bryant Moscon +

  • Cesar H +

  • Chris Stadler

  • Chris Zimmerman +

  • Christopher Whelan

  • Clemens Brunner

  • Clemens Tolboom +

  • Connor Charles +

  • Daniel Hähnke +

  • Daniel Saxton

  • Darin Plutchok +

  • Dave Hughes

  • David Stansby

  • DavidRosen +

  • Dean +

  • Deepan Das +

  • Deepyaman Datta

  • DorAmram +

  • Dorothy Kabarozi +

  • Drew Heenan +

  • Eliza Mae Saret +

  • Elle +

  • Endre Mark Borza +

  • Eric Brassell +

  • Eric Wong +

  • Eunseop Jeong +

  • Eyden Villanueva +

  • Felix Divo

  • ForTimeBeing +

  • Francesco Truzzi +

  • Gabriel Corona +

  • Gabriel Monteiro +

  • Galuh Sahid +

  • Georgi Baychev +

  • Gina

  • GiuPassarelli +

  • Grigorios Giannakopoulos +

  • Guilherme Leite +

  • Guilherme Salomé +

  • Gyeongjae Choi +

  • Harshavardhan Bachina +

  • Harutaka Kawamura +

  • 哈桑·基比里格

  • Hielke Walinga

  • Hubert

  • Hugh Kelley +

  • Ian Eaves +

  • Ignacio Santolin +

  • Igor Filippov +

  • Irv Lustig

  • Isaac Virshup +

  • Ivan Bessarabov +

  • JMBurley +

  • Jack Bicknell +

  • Jacob Buckheit +

  • Jan Koch

  • Jan Pipek +

  • Jan Škoda +

  • Jan-Philip Gehrcke

  • Jasper J.F. van den Bosch +

  • Javad +

  • Jeff Reback

  • Jeremy Schendel

  • Jeroen Kant +

  • Jesse Pardue +

  • Jethro Cao +

  • 江越

  • Jiaxiang +

  • Jihyung Moon +

  • Jimmy Callin

  • Jinyang Zhou +

  • Joao Victor Martinelli +

  • Joaq Almirante +

  • John G Evans +

  • John Ward +

  • Jonathan Larkin +

  • Joris Van den Bossche

  • Josh Dimarsky +

  • Joshua Smith +

  • Josiah Baker +

  • Julia Signell +

  • Jung Dong Ho +

  • Justin Cole +

  • Justin Zheng

  • Kaiqi Dong

  • Karthigeyan +

  • Katherine Younglove +

  • Katrin Leinweber

  • Kee Chong Tan +

  • Keith Kraus +

  • Kevin Nguyen +

  • Kevin Sheppard

  • Kisekka David +

  • Koushik +

  • Kyle Boone +

  • Kyle McCahill +

  • Laura Collard,博士 +

  • LiuSeeker +

  • Louis Huynh +

  • Lucas Scarlato Astur +

  • Luiz Gustavo +

  • Luke +

  • Luke Shepard +

  • MKhalusova +

  • Mabel Villalba

  • Maciej J +

  • Mak Sze Chun

  • Manu NALEPA +

  • Marc

  • Marc Garcia

  • Marco Gorelli +

  • Marco Neumann +

  • Martin Winkel +

  • Martina G. Vilas +

  • Mateusz +

  • Matthew Roeschke

  • Matthew Tan +

  • Max Bolingbroke

  • Max Chen +

  • MeeseeksMachine

  • Miguel +

  • MinGyo Jung +

  • Mohamed Amine ZGHAL +

  • Mohit Anand +

  • MomIsBestFriend +

  • Naomi Bonnin +

  • Nathan Abel +

  • Nico Cernek +

  • Nigel Markey +

  • Noritada Kobayashi +

  • Oktay Sabak +

  • Oliver Hofkens +

  • Oluokun Adedayo +

  • Osman +

  • Oğuzhan Öğreden +

  • Pandas 开发团队 +

  • Patrik Hlobil +

  • Paul Lee +

  • Paul Siegel +

  • Petr Baev +

  • Pietro Battiston

  • Prakhar Pandey +

  • Puneeth K +

  • Raghav +

  • Rajat +

  • Rajhans Jadhao +

  • Rajiv Bharadwaj +

  • Rik-de-Kort +

  • Roei.r

  • Rohit Sanjay +

  • Ronan Lamy +

  • Roshni +

  • Roymprog +

  • Rushabh Vasani +

  • Ryan Grout +

  • Ryan Nazareth

  • Samesh Lakhotia +

  • Samuel Sinayoko

  • Samyak Jain +

  • Sarah Donehower +

  • Sarah Masud +

  • Saul Shanabrook +

  • Scott Cole +

  • SdgJlbl +

  • Seb +

  • Sergei Ivko +

  • Shadi Akiki

  • Shorokhov Sergey

  • Siddhesh Poyarekar +

  • Sidharthan Nair +

  • Simon Gibbons

  • Simon Hawkins

  • Simon-Martin Schröder +

  • Sofiane Mahiou +

  • Sourav kumar +

  • Souvik Mandal +

  • Soyoun Kim +

  • Sparkle Russell-Puleri +

  • Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)

  • Stuart Berg +

  • Sumanau Sareen

  • Szymon Bednarek +

  • Tambe Tabitha Achere +

  • Tan Tran

  • Tang Heyi +

  • Tanmay Daripa +

  • Tanya Jain

  • Terji Petersen

  • Thomas Li +

  • Tirth Jain +

  • Tola A +

  • Tom Augspurger

  • Tommy Lynch +

  • Tomoyuki Suzuki +

  • Tony Lorenzo

  • Unprocessable +

  • Uwe L. Korn

  • Vaibhav Vishal

  • Victoria Zdanovskaya +

  • Vijayant +

  • Vishwak Srinivasan +

  • WANG Aiyong

  • Wenhuan

  • Wes McKinney

  • Will Ayd

  • Will Holmgren

  • William Ayd

  • William Blan +

  • Wouter Overmeire

  • Wuraola Oyewusi +

  • YaOzI +

  • Yash Shukla +

  • Yu Wang +

  • Yusei Tahara +

  • alexander135 +

  • alimcmaster1

  • avelineg +

  • bganglia +

  • bolkedebruin

  • bravech +

  • chinhwee +

  • cruzzoe +

  • dalgarno +

  • daniellebrown +

  • danielplawrence

  • est271 +

  • francisco souza +

  • ganevgv +

  • garanews +

  • gfyoung

  • h-vetinari

  • hasnain2808 +

  • ianzur +

  • jalbritt +

  • jbrockmendel

  • jeschwar +

  • jlamborn324 +

  • joy-rosie +

  • kernc

  • killerontherun1

  • krey +

  • lexy-lixinyu +

  • lucyleeow +

  • lukasbk +

  • maheshbapatu +

  • mck619 +

  • nathalier

  • naveenkaushik2504 +

  • nlepleux +

  • nrebena

  • ohad83 +

  • pilkibun

  • pqzx +

  • proost +

  • pv8493013j +

  • qudade +

  • rhstanton +

  • rmunjal29 +

  • sangarshanan +

  • sardonick +

  • saskakarsi +

  • shaido987 +

  • ssikdar1

  • steveayers124 +

  • tadashigaki +

  • timcera +

  • tlaytongoogle +

  • tobycheese

  • tonywu1999 +

  • tsvikas +

  • yogendrasoni +

  • zys5945 +

新的弃用政策

从 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-breaking 变更仅会在主要版本中进行(除了实验性功能)

更多信息,请参阅版本政策。

功能增强

rolling.applyexpanding.apply中使用 Numba

我们在apply()apply()中添加了一个engine关键字,允许用户使用Numba而不是 Cython 执行程序。如果 apply 函数可以操作 numpy 数组并且数据集较大(100 万行或更多),使用 Numba 引擎可以获得显着的性能提升。更多详情,请参阅滚动应用文档 (GH 28987, GH 30936) ### 定义滚动操作的自定义窗口

我们添加了一个pandas.api.indexers.BaseIndexer()类,允许用户在rolling操作期间定义窗口边界的生成方式。用户可以在pandas.api.indexers.BaseIndexer()子类上定义自己的get_window_bounds方法,该方法将为滚动聚合期间每个窗口生成的起始和结束索引。更多详情和示例用法,请参阅自定义窗口滚动文档 ### 转换为 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 | 
```  ### 在`rolling.apply`和`expanding.apply`中使用 Numba

我们在`apply()`和`apply()`中添加了一个`engine`关键字,允许用户使用[Numba](https://numba.pydata.org/)而不是 Cython 执行程序。如果 apply 函数可以操作 numpy 数组并且数据集较大(100 万行或更多),使用 Numba 引擎可以获得显着的性能提升。更多详情,请参阅滚动应用文档 ([GH 28987](https://github.com/pandas-dev/pandas/issues/28987), [GH 30936](https://github.com/pandas-dev/pandas/issues/30936))

### 定义滚动操作的自定义窗口

我们添加了一个允许用户定义在`rolling`操作期间如何创建窗口边界的`pandas.api.indexers.BaseIndexer()`类。用户可以在`pandas.api.indexers.BaseIndexer()`子类上定义自己的`get_window_bounds`方法,该方法将为滚动聚合期间使用的每个窗口生成起始和结束索引。有关更多详细信息和示例用法,请参阅自定义窗口滚动文档

### 转换为 Markdown

我们添加了`to_markdown()`用于创建 Markdown 表格 ([GH 11052](https://github.com/pandas-dev/pandas/issues/11052))

```py
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.nanNone 用于 object 数据类型,pd.NaT 用于类似日期时间的数据。pd.NA 的目标是提供一种可以跨数据类型一致使用的“缺失”指示器。pd.NA 目前由可空整数和布尔数据类型以及新的字符串数据类型使用 (GH 28095)。

警告

实验性: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遵循三值逻辑(或Kleene 逻辑)的规则。例如:

In [8]: pd.NA | True
Out[8]: True 

欲了解更多,请参阅 NA 部分中有关缺失数据的用户指南。### 专用字符串数据类型

我们添加了StringDtype,一个专门用于字符串数据的扩展类型。以前,字符串通常存储在 object 数据类型的 NumPy 数组中。(GH 29975)

警告

StringDtype目前被视为实验性的。实现和部分 API 可能会在没有警告的情况下更改。

'string' 扩展类型解决了 object 数据类型 NumPy 数组的几个问题:

  1. object数据类型的数组中,你可能会意外地存储字符串和非字符串的混合体。而StringArray只能存储字符串。

  2. object dtype 破坏了特定于 dtype 的操作,例如DataFrame.select_dtypes()。没有明确的方法可以仅选择文本而排除非文本但仍为 object-dtype 列。

  3. 当阅读代码时,object dtype 数组的内容不如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 或列的返回类型也将具有字符串 dtype。

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数据类型。有关更多信息,请参见 Text data types。### 支持带有缺失值的布尔数据类型

我们增加了BooleanDtype / BooleanArray,一个专门用于布尔数据的扩展类型,可以容纳缺失值。默认的基于 bool-dtype NumPy 数组的bool数据类型,列只能保存TrueFalse,而不能保存缺失值。这个新的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`以便于使用支持的扩展数据类型

为了鼓励使用支持`pd.NA`的扩展数据类型`StringDtype`、`BooleanDtype`、`Int64Dtype`、`Int32Dtype`等,引入了`DataFrame.convert_dtypes()`和`Series.convert_dtypes()`方法。 ([GH 29752](https://github.com/pandas-dev/pandas/issues/29752)) ([GH 30929](https://github.com/pandas-dev/pandas/issues/30929))

示例:

```py
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()等读取器读取数据后尤其有用。有关说明,请参见这里。### 实验性NA标量表示缺失值

引入了一个新的pd.NA值(单例)来表示标量缺失值。到目前为止,pandas 使用了几个值来表示缺失数据:np.nan用于浮点数据,np.nanNone用于对象类型数据,pd.NaT用于类似日期时间的数据。pd.NA的目标是提供一个可以在各种数据类型中一致使用的“缺失”指示器。pd.NA目前被可空整数和布尔数据类型以及新的字符串数据类型使用(GH 28095)。

警告

实验性质: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遵循三值逻辑(或Kleene 逻辑)的规则。例如:

In [8]: pd.NA | True
Out[8]: True 

欲了解更多,请参阅 NA 部分中关于缺失数据的用户指南。

专用字符串数据类型

我们添加了StringDtype,这是专门用于字符串数据的扩展类型。以前,字符串通常存储在对象类型的 NumPy 数组中。(GH 29975)

警告

StringDtype目前被视为实验性质。实现和部分 API 可能会在没有警告的情况下发生变化。

'string'扩展类型解决了对象类型 NumPy 数组的几个问题:

  1. 你可能会在对象类型数组中意外存储混合的字符串和非字符串。StringArray只能存储字符串。

  2. object数据类型会破坏特定于数据类型的操作,比如DataFrame.select_dtypes()。没有明确的方法可以选择文本而排除非文本,但仍然是对象类型的列。

  3. 在阅读代码时,对象类型数组的内容不如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数据类型基于布尔类型的 NumPy 数组,该列只能保存TrueFalse,而不能是缺失值。这个新的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方法简化了对支持的扩展数据类型的使用

为了鼓励使用支持pd.NA的扩展数据类型StringDtypeBooleanDtypeInt64DtypeInt32Dtype等,引入了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() 现在接受 captionlabel 参数(GH 25436

  • 具有可空整数、新字符串数据类型和周期数据类型的数据帧现在可以转换为 pyarrow(>=0.15.0),这意味着在使用 pyarrow 引擎时支持写入 Parquet 文件格式(GH 28368)。完整的 Parquet 往返(写入并使用 to_parquet() / read_parquet() 读取)从 pyarrow >= 0.16 开始支持(GH 20612)。

  • to_parquet() 现在适当地处理了 pyarrow 引擎中用户定义模式的 schema 参数。(GH 30270

  • DataFrame.to_json() 现在接受一个 indent 整数参数,以启用 JSON 输出的漂亮打印(GH 12004

  • read_stata() 现在可以读取 Stata 119 dta 文件。(GH 28250

  • 实现了 Window.var()Window.std() 函数(GH 26597

  • 对于非 ASCII 文本,DataFrame.to_string() 现在增加了 encoding 参数(GH 28766

  • 对于非 ASCII 文本,DataFrame.to_html() 现在增加了 encoding 参数(GH 28663

  • Styler.background_gradient() 现在接受 vminvmax 参数(GH 12145

  • Styler.format() 现在添加了 na_rep 参数,以帮助格式化缺失值(GH 21527GH 28358

  • read_excel() 现在可以通过传递 engine='pyxlsb' 来读取二进制 Excel(.xlsb)文件。有关更多详情和示例用法,请参阅二进制 Excel 文件文档。关闭 GH 8540

  • DataFrame.to_parquet() 中,partition_cols 参数现在接受一个字符串(GH 27117

  • pandas.read_json() 现在解析 NaNInfinity-InfinityGH 12213

  • DataFrame 构造函数保留了与 ExtensionArraydtype 相同的 ExtensionArrayGH 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()来更新名称。

为了向后兼容,您仍然可以通过 levels 访问名称。

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的新 repr。

pandas.arrays.IntervalArray采用了一个新的__repr__,与其他数组类一致(GH 25022

pandas 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]') 

pandas 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)。

pandas 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 

pandas 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 

现在提供了错误提示,当提供冲突或潜在模糊的参数时会引发错误。

pandas 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 

pandas 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

pandas 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 

pandas 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):

  1. 字符串数据(包括缺失值)现在返回arrays.StringArray

  2. 整数数据(包括缺失值)现在返回arrays.IntegerArray

  3. 布尔数据(包括缺失值)现在返回新的arrays.BooleanArray

pandas 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 

pandas 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)。

pandas 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 

pandas 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")现在会引发异常。

pandas 0.25.x

In [1]: np.asarray(a, dtype="float")
Out[1]:
array([ 1.,  2., nan]) 

pandas 1.0.0

In [41]: np.asarray(a, dtype="float")
Out[41]: array([ 1.,  2., nan]) 

使用带有显式na_valuearrays.IntegerArray.to_numpy()

In [42]: a.to_numpy(dtype="float", na_value=np.nan)
Out[42]: array([ 1.,  2., nan]) 

缩减操作可能返回pd.NA

在执行诸如带有skipna=False的求和等缩减操作时,在存在缺失值时,结果现在将是pd.NA而不是np.nanGH 30958)。

pandas 0.25.x

In [1]: pd.Series(a).sum(skipna=False)
Out[1]:
nan 

pandas 1.0.0

In [43]: pd.Series(a).sum(skipna=False)
Out[43]: <NA> 

value_counts 返回可空整数 dtype

带有可空整数 dtype 的Series.value_counts()现在为值返回可空整数 dtype。

pandas 0.25.x

In [1]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype
Out[1]:
dtype('int64') 

pandas 1.0.0

In [44]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype
Out[44]: Int64Dtype() 

更多关于pandas.NAnumpy.nan之间差异的信息,请参阅 NA 语义。

arrays.IntegerArray比较返回arrays.BooleanArray

arrays.IntegerArray上的比较操作现在返回一个arrays.BooleanArray而不是一个 NumPy 数组(GH 29964)。

pandas 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]) 

pandas 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

Categorical包含np.nan时,默认情况下Categorical.min()不再返回np.nan(skipna=True)(GH 25303

pandas 0.25.x

In [1]: pd.Categorical([1, 2, np.nan], ordered=True).min()
Out[1]: nan 

pandas 1.0.0

In [47]: pd.Categorical([1, 2, np.nan], ordered=True).min()
Out[47]: 1 

空的pandas.Series的默认数据类型

在不指定数据类型的情况下初始化空的pandas.Series现在会引发DeprecationWarningGH 17261)。默认数据类型将在未来版本中从float64更改为object,以使其与DataFrameIndex的行为保持一致。

pandas 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) 

聚合操作的结果数据类型推断变化

DataFrame.resample()聚合中,结果数据类型的规则已经针对扩展类型发生了变化(GH 31359)。以前,pandas 会尝试将结果转换回原始数据类型,如果不可能,则退回到通常的推断规则。现在,只有当结果中的标量值是扩展数据类型的标量类型的实例时,pandas 才会返回原始数据类型的结果。

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 

pandas 0.25.x

In [1]> df.resample("2D").agg(lambda x: 'a').A.dtype
Out[1]:
CategoricalDtype(categories=['a', 'b'], ordered=False) 

pandas 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) 

这修复了resamplegroupby之间的不一致性。这也修复了一个潜在的 bug,即结果的可能会根据将结果转换回原始数据类型的方式而改变。

pandas 0.25.x

In [1] df.resample("2D").agg(lambda x: 'c')
Out[1]:

     A
0  NaN 

pandas 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)。如果已安装,我们现在要求:

包名 最低版本 必需 更改
numpy 1.13.3 X
pytz 2015.4 X
python-dateutil 2.6.1 X
bottleneck 1.2.1
numexpr 2.6.2
pytest(开发) 4.0.2

对于 可选库,一般建议使用最新版本。以下表格列出了在 pandas 开发过程中当前正在测试的每个库的最低版本。最低测试版本以下的可选库可能仍然可用,但不被视为受支持的。

最低版本 已更改
beautifulsoup4 4.6.0
fastparquet 0.3.2 X
gcsfs 0.2.2
lxml 3.8.0
matplotlib 2.2.2
numba 0.46.0 X
openpyxl 2.5.7 X
pyarrow 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
xarray 0.8.2
xlrd 1.1.0
xlsxwriter 0.9.8
xlwt 1.2.0

查看 依赖项 和 可选依赖项 以获取更多信息。

构建更改

pandas 添加了 pyproject.toml 文件,并且不再在上传到 PyPI 的源分发包中包含 Cython 编译过的文件(GH 28341GH 20775)。如果您正在安装构建好的分发包(wheel)或通过 conda 安装,这对您不会有任何影响。如果您从源代码构建 pandas,则在调用 pip install pandas 之前,您不再需要在构建环境中安装 Cython。

其他 API 更改

  • DataFrameGroupBy.transform()SeriesGroupBy.transform() 现在在无效的操作名称上引发错误(GH 27489

  • pandas.api.types.infer_dtype() 现在将返回“integer-na”作为整数和 np.nan 混合的类型(GH 27283

  • MultiIndex.from_arrays() 现在不会从数组中推断名称,如果明确提供了 names=None,则不再推断(GH 27292

  • 为了改善 tab 补全,pandas 在使用dir对 pandas 对象进行内省时不包括大多数已弃用的属性(例如dir(df))。要查看排除了哪些属性,请参见对象的_deprecations属性,例如pd.DataFrame._deprecationsGH 28805)。

  • unique()的返回 dtype 现在与输入 dtype 匹配了(GH 27874)。

  • options.matplotlib.register_converters的默认配置值从True更改为"auto"GH 18720)。现在,pandas 自定义格式化程序只会应用于通过plot()创建的绘图。以前,pandas 的格式化程序会应用于所有在plot()之后创建的绘图。更多信息,请参阅单位注册。

  • Series.dropna()已删除其**kwargs参数,改为使用单个how参数。以前提供给**kwargs的除了how之外的任何内容都会引发TypeErrorGH 29388)。

  • 在测试 pandas 时,pytest 的新最低要求版本为 5.0.1(GH 29664)。

  • Series.str.__iter__()已弃用,将在将来的版本中删除(GH 28277)。

  • read_csv()的默认 NA 值列表中添加了<NA>GH 30821)。### 文档改进

  • 增加了关于大型数据集的扩展的新章节(GH 28315)。

  • 增加了关于 HDF5 数据集的查询多索引的子节(GH 28791)。### 避免使用MultiIndex.levels中的名称

作为对MultiIndex进行较大重构的一部分,level 名称现在与 levels 分开存储了(GH 27242)。我们建议使用MultiIndex.names来访问名称,并使用Index.set_names()来更新名称。

为了向后兼容,你仍然可以通过 levels 访问名称。

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 的新 repr。

pandas.arrays.IntervalArray 采用了新的 __repr__,与其他数组类相符 (GH 25022)。

pandas 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]') 

pandas 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)。

pandas 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 

pandas 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 

请注意,当提供冲突或可能引起歧义的参数时,现在会引发错误。

pandas 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 

pandas 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)。

pandas 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 

pandas 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):

  1. 字符串数据(包括缺失值)现在返回 arrays.StringArray

  2. 整数数据(包括缺失值)现在返回 arrays.IntegerArray

  3. 布尔数据(包括缺失值)现在返回新的 arrays.BooleanArray

pandas 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 

pandas 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)。

pandas 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 

pandas 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 数组

当转换为 NumPy 数组时,缺失值将是pd.NA,无法转换为浮点数。因此,调用np.asarray(integer_array, dtype="float")现在会引发错误。

pandas 0.25.x

In [1]: np.asarray(a, dtype="float")
Out[1]:
array([ 1.,  2., nan]) 

pandas 1.0.0

In [41]: np.asarray(a, dtype="float")
Out[41]: array([ 1.,  2., nan]) 

使用带有显式na_valuearrays.IntegerArray.to_numpy()

In [42]: a.to_numpy(dtype="float", na_value=np.nan)
Out[42]: array([ 1.,  2., nan]) 

缩减可以返回 pd.NA

当执行诸如使用skipna=False的求和等缩减操作时,在存在缺失值的情况下,结果现在将是pd.NA,而不是np.nanGH 30958)。

pandas 0.25.x

In [1]: pd.Series(a).sum(skipna=False)
Out[1]:
nan 

pandas 1.0.0

In [43]: pd.Series(a).sum(skipna=False)
Out[43]: <NA> 

value_counts 返回可空整数 dtype

具有可空整数 dtype 的Series.value_counts()现在为值返回可空整数 dtype。

pandas 0.25.x

In [1]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype
Out[1]:
dtype('int64') 

pandas 1.0.0

In [44]: pd.Series([2, 1, 1, None], dtype="Int64").value_counts().dtype
Out[44]: Int64Dtype() 

更多关于pandas.NAnumpy.nan之间差异的信息,请参见 NA 语义。

arrays.IntegerArray的比较现在返回arrays.BooleanArray

arrays.IntegerArray上的比较操作现在返回arrays.BooleanArray而不是 NumPy 数组(GH 29964)。

pandas 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]) 

pandas 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

Categorical包含np.nan时,默认情况下(skipna=True),Categorical.min()不再返回np.nanGH 25303)。

pandas 0.25.x

In [1]: pd.Categorical([1, 2, np.nan], ordered=True).min()
Out[1]: nan 

pandas 1.0.0

In [47]: pd.Categorical([1, 2, np.nan], ordered=True).min()
Out[47]: 1 

空的 pandas.Series 的默认 dtype

初始化一个空的 pandas.Series,如果不指定 dtype,现在将引发 DeprecationWarning (GH 17261)。默认的 dtype 将在未来版本中从 float64 更改为 object,以保持与 DataFrameIndex 的行为一致。

pandas 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) 

resample 操作的结果 dtype 推断发生变化

DataFrame.resample() 聚合结果的结果 dtype 规则已更改为扩展类型 (GH 31359)。以前,pandas 将尝试将结果转换回原始 dtype,如果这不可能,则返回通常的推断规则。现在,只有当结果中的标量值是扩展 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 

pandas 0.25.x

In [1]> df.resample("2D").agg(lambda x: 'a').A.dtype
Out[1]:
CategoricalDtype(categories=['a', 'b'], ordered=False) 

pandas 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) 

这修复了 resamplegroupby 之间的不一致性。这也修复了一个潜在的 bug,即结果的 values 可能会根据如何将结果转换回原始 dtype 而改变。

pandas 0.25.x

In [1] df.resample("2D").agg(lambda x: 'c')
Out[1]:

     A
0  NaN 

pandas 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)。如果安装了,我们现在需要:

最低版本 必需 已更改
numpy 1.13.3 X
pytz 2015.4 X
python-dateutil 2.6.1 X
bottleneck 1.2.1
numexpr 2.6.2
pytest (dev) 4.0.2

对于可选库,通常建议使用最新版本。以下表格列出了在 pandas 开发过程中当前正在测试的每个库的最低版本。低于最低测试版本的可选库可能仍然可用,但不被视为受支持。

最低版本 已更改
beautifulsoup4 4.6.0
fastparquet 0.3.2 X
gcsfs 0.2.2
lxml 3.8.0
matplotlib 2.2.2
numba 0.46.0 X
openpyxl 2.5.7 X
pyarrow 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
xarray 0.8.2
xlrd 1.1.0
xlsxwriter 0.9.8
xlwt 1.2.0

查看依赖项和可选依赖项以获取更多信息。

构建更改

pandas 已添加了一个pyproject.toml文件,并且将不再在上传到 PyPI 的源分发中包含 cythonized 文件(GH 28341GH 20775)。如果您正在安装构建好的分发(wheel)或通过 conda 安装,这对您不会有任何影响。如果您正在从源代码构建 pandas,则在调用pip install pandas之前,您不再需要在构建环境中安装 Cython。

其他 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内省 pandas 对象时不包括大多数已弃用的属性(例如dir(df))。要查看排除的属性,请查看对象的_deprecations属性,例如pd.DataFrame._deprecationsGH 28805)。

  • unique() 的返回 dtype 现在与输入 dtype 匹配。(GH 27874)

  • options.matplotlib.register_converters 的默认配置值从 True 更改为 "auto" (GH 18720)。现在,pandas 自定义格式化程序仅应用于通过 plot() 创建的 pandas 绘图。之前,pandas 的格式化程序将应用于在 plot() 之后创建的所有绘图。更多信息请参见单位注册。

  • Series.dropna() 已删除其 **kwargs 参数,改为单个 how 参数。以前,向 **kwargs 提供除 how 以外的任何内容都会引发 TypeError (GH 29388)

  • 在测试 pandas 时,pytest 的新最低版本要求为 5.0.1 (GH 29664)

  • Series.str.__iter__() 已被弃用,并将在将来的版本中删除 (GH 28277).

  • read_csv() 的默认 NA 值列表中添加了 <NA> (GH 30821)

文档改进

  • 添加了关于大数据集的扩展的新部分 (GH 28315).

  • 为 HDF5 数据集添加了查询 MultiIndex 的子部分 (GH 28791).

弃用

  • Series.item()Index.item() 已被 _ 取消弃用 _ (GH 29250)

  • Index.set_value 已被弃用。对于给定的索引 idx、数组 arridx 中的 idx_val 值和新值 validx.set_value(arr, idx_val, val) 等同于 arr[idx.get_loc(idx_val)] = val,应该使用后者 (GH 28621).

  • is_extension_type() 已被弃用,应使用 is_extension_array_dtype() 代替 (GH 29457)

  • eval() 的关键字参数“truediv”已被弃用,并将在将来的版本中删除 (GH 29812)

  • DateOffset.isAnchored()DatetOffset.onOffset() 已被弃用,并将在将来的版本中删除,请改用 DateOffset.is_anchored()DateOffset.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)

  • Categorical.min()Categorical.max() 的参数 numeric_only 已经被弃用,替换为 skipna (GH 25303)

  • lreshape() 的参数 label 已弃用,将来版本将移除 (GH 29742)

  • pandas.core.index 已被弃用,将来版本将移除,公共类已经移到顶层命名空间 (GH 19711)

  • pandas.json_normalize() 现在在顶层命名空间中公开。使用 json_normalize 作为 pandas.io.json.json_normalize 已经弃用,建议使用 pandas.json_normalize() (GH 27586).

  • pandas.read_json()numpy 参数已弃用 (GH 28512).

  • DataFrame.to_stata()DataFrame.to_feather()DataFrame.to_parquet() 的参数 “fname” 已被弃用,请使用 “path” (GH 23574)

  • RangeIndex 的已弃用的内部属性 _start_stop_step 现在会引发 FutureWarning 而不是 DeprecationWarning (GH 26581)

  • pandas.util.testing 模块已被弃用,请使用文档中记录的 pandas.testing 的公共 API,见 Assertion functions (GH 16232).

  • pandas.SparseArray已被弃用。请使用pandas.arrays.SparseArrayarrays.SparseArray)(GH 30642)。

  • Series.take()DataFrame.take()的参数is_copy已被弃用,并将在将来的版本中移除。(GH 27357)

  • Index进行多维索引(例如index[:, None])已被弃用,并将在将来的版本中移除,应在索引之前转换为 numpy 数组(GH 30588)。

  • pandas.np子模块现已被弃用。请直接导入 numpy(GH 30296)。

  • pandas.datetime类现已弃用。请从datetime导入(GH 30610)。

  • diff将来会引发TypeError而不是隐式丢失扩展类型的 dtype。调用diff之前,请先转换为正确的 dtype(GH 31025)。

从分组的 DataFrame 中选择列

当从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

SparseSeriesSparseDataFrameDataFrame.to_sparse方法已被移除(GH 28425)。我们建议改用具有稀疏值的SeriesDataFrame

Matplotlib 单位注册

以前,pandas 会在导入 pandas 的副作用下向 matplotlib 注册转换器(GH 18720)。这会改变使用 matplotlib 直接而不是plot()绘制的图表的输出。

要在 matplotlib 图表中使用 pandas 格式化程序,请指定

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()StataReaderStataReader.read()中移除了先前弃用的关键字“index”,请改用“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

  • Timedelta对整数数据类型的数组进行 floor 除现在会引发TypeErrorGH 21036

  • TimedeltaIndexDatetimeIndex不再接受“timedelta64”或“datetime64”等非纳秒 dtype 字符串,改用“timedelta64[ns]”和“datetime64[ns]”(GH 24806

  • pandas.api.types.infer_dtype()中默认的“skipna”参数从False更改为TrueGH 24050

  • 移除了Series.ixDataFrame.ixGH 26438

  • 移除了Index.summaryGH 18217

  • Index构造函数中移除了先前废弃的关键字“fastpath”(GH 23110

  • 移除了Series.get_valueSeries.set_valueDataFrame.get_valueDataFrame.set_valueGH 17739

  • 移除了Series.compoundDataFrame.compoundGH 26405

  • DataFrame.set_index()Series.set_axis()中默认的“inplace”参数从None更改为FalseGH 27600

  • 移除了Series.cat.categoricalSeries.cat.indexSeries.cat.nameGH 24751

  • to_datetime()to_timedelta()中移除了先前废弃的关键字“box”;另外,现在这些函数总是返回DatetimeIndexTimedeltaIndexIndexSeriesDataFrameGH 24486

  • to_timedelta()TimedeltaTimedeltaIndex不再允许“M”、“y”或“Y”作为“unit”参数(GH 23264

  • 从(非公开的)offsets.generate_range中移除了先前废弃的关键字“time_rule”,该关键字已移至core.arrays._ranges.generate_range()GH 24157

  • 当使用类似列表的索引器和缺失标签的DataFrame.loc()Series.loc()时,将不再重新索引(GH 17295)

  • 当存在不存在的列时,DataFrame.to_excel()Series.to_excel()将不再重新索引(GH 17295)

  • concat()中删除了先前弃用的关键字“join_axes”;改为在结果上使用reindex_likeGH 22318)

  • DataFrame.sort_index()中删除了先前弃用的关键字“by”,改用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数据传递给TimedeltaIndextimedelta64数据传递给DatetimeIndex现在会引发TypeErrorGH 23539, GH 23937)

  • int64值传递给DatetimeIndex和时区现在将值解释为 UTC 中的纳秒时间戳,而不是给定时区中的墙时间(GH 24559)

  • 传递���DataFrame.groupby()的元组现在被专门视为单个键 (GH 18314)

  • 移除了Index.contains,应该使用key in index代替 (GH 30103)

  • TimestampDatetimeIndexTimedeltaIndex中不再允许对int或整数数组进行加减操作,应该使用obj + n * obj.freq代替obj + n (GH 22535)

  • 移除了Series.ptp (GH 21614)

  • 移除了Series.from_array (GH 18258)

  • 移除了DataFrame.from_items (GH 18458)

  • 移除了DataFrame.as_matrixSeries.as_matrix (GH 18458)

  • 移除了Series.asobject (GH 18477)

  • 移除了DataFrame.as_blocksSeries.as_blocksDataFrame.blocksSeries.blocks (GH 17656)

  • pandas.Series.str.cat()现在默认对齐others,使用join='left' (GH 27611)

  • pandas.Series.str.cat()不再接受列表样式内部的列表样式了 (GH 27611)

  • 使用Categorical dtype 的Series.where()(或者使用Categorical列的DataFrame.where())不再允许设置新的类别 (GH 24114)

  • DatetimeIndexTimedeltaIndexPeriodIndex构造函数中删除了先前弃用的关键字“start”、“end”和“periods”,改用date_range()timedelta_range()period_range()代替(GH 23919)

  • DatetimeIndexTimedeltaIndex构造函数中删除了先前弃用的关键字“verify_integrity”(GH 23919)

  • pandas.core.internals.blocks.make_block中删除了先前弃用的关键字“fastpath”(GH 19265)

  • Block.make_block_same_class()中删除了先前弃用的关键字“dtype”(GH 19434)

  • 删除了ExtensionArray._formatting_values。改用ExtensionArray._formatter代替(GH 23601)

  • 删除了MultiIndex.to_hierarchicalGH 21613)

  • 删除了MultiIndex.labels,改用MultiIndex.codes代替(GH 23752)

  • MultiIndex构造函数中删除了先前弃用的关键字“labels”,改用“codes”代替(GH 23752)

  • 删除了MultiIndex.set_labels,改用MultiIndex.set_codes()代替(GH 23752)

  • MultiIndex.set_codes()MultiIndex.copy()MultiIndex.drop()中删除了先前弃用的关键字“labels”,改用“codes”代替(GH 23752)

  • 不再支持旧版 HDF5 格式(GH 29787

  • 不再允许将 dtype 别名(例如‘datetime64[ns, UTC]’)传递给DatetimeTZDtype,请改用DatetimeTZDtype.construct_from_string()GH 23990

  • read_excel()中移除了先前弃用的关键字“skip_footer”,改用“skipfooter”(GH 18836

  • read_excel()不再允许将整数值用作参数usecols,而是传递从 0 到usecols(含)的整数列表(GH 23635

  • DataFrame.to_records()中移除了先前弃用的关键字“convert_datetime64”(GH 18902

  • 放弃使用IntervalIndex.from_intervals,改用IntervalIndex构造函数(GH 19263

  • DatetimeIndex.to_series()中的默认“keep_tz��参数从None更改为TrueGH 23739

  • 移除了api.types.is_periodapi.types.is_datetimetzGH 23917

  • 不再支持读取包含使用 pandas 0.16 之前版本创建的Categorical实例的 pickle 文件(GH 27538

  • 移除了pandas.tseries.plotting.tsplotGH 18627

  • DataFrame.apply()中移除了先前弃用的关键字“reduce”和“broadcast”(GH 18577

  • pandas._testing中移除了先前弃用的assert_raises_regex函数(GH 29174

  • pandas.core.indexes.frozen中移除了先前弃用的FrozenNDArray类(GH 29335

  • 移除了先前弃用的关键字“nthreads”从read_feather(),请使用“use_threads”代替(GH 23053

  • 移除了Index.is_lexsorted_for_tupleGH 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_copySeries.is_copyGH 18812

  • 移除了DataFrame.get_ftype_countsSeries.get_ftype_countsGH 18243

  • 移除了DataFrame.ftypesSeries.ftypesSeries.ftype([GH 26744](https://github.com/pandas-dev/pandas/issues/26744)

  • 移除了Index.get_duplicates,请使用idx[idx.duplicated()].unique()代替(GH 20239

  • 移除了Series.clip_upperSeries.clip_lowerDataFrame.clip_upperDataFrame.clip_lowerGH 24203

  • 移除了修改DatetimeIndex.freqTimedeltaIndex.freqPeriodIndex.freq的能力(GH 20772

  • 移除了DatetimeIndex.offsetGH 20730

  • 移除了DatetimeIndex.asobjectTimedeltaIndex.asobjectPeriodIndex.asobject,请使用astype(object)代替(GH 29801

  • factorize()中删除了先前弃用的关键字“order”(GH 19751

  • read_stata()DataFrame.to_stata()中删除了先前弃用的关键字“encoding”(GH 21400

  • concat()中的默认“sort”参数从None更改为FalseGH 20613

  • DataFrame.update()中删除了先前弃用的关键字“raise_conflict”,现在使用“errors”代替(GH 23585

  • DatetimeIndex.shift()TimedeltaIndex.shift()PeriodIndex.shift()中删除了先前弃用的关键字“n”,现在使用“periods”代替(GH 22458

  • DataFrame.resample()中删除了先前弃用的关键字“how”、“fill_method”和“limit”(GH 30139

  • 现在使用timedelta64[ns] dtype 将整数传递给Series.fillna()DataFrame.fillna()会引发TypeErrorGH 24694

  • 不再支持将多个轴传递给DataFrame.dropna()GH 20995

  • 移除了Series.nonzero,现在使用to_numpy().nonzero()代替(GH 24048

  • 将浮点 dtype codes传递给Categorical.from_codes()不再受支持,现在传递codes.astype(np.int64)GH 21775

  • Series.str.partition()Series.str.rpartition()中删除了先前弃用的关键字“pat”,现在使用“sep”代替(GH 23767

  • 移除了Series.putGH 27106

  • 移除了Series.realSeries.imagGH 27106

  • 移除了Series.to_denseDataFrame.to_denseGH 26684

  • 移除了Index.dtype_str,现在使用str(index.dtype)代替(GH 27106

  • Categorical.ravel()现在返回一个Categorical而不是一个ndarrayGH 27199

  • Numpy ufuncs 上的‘outer’方法,例如np.subtract.outerSeries对象上的操作不再支持,并将引发NotImplementedErrorGH 27198

  • 移除了Series.get_dtype_countsDataFrame.get_dtype_countsGH 27145

  • Categorical.take()fill_value参数的默认值从True更改为FalseGH 20841

  • Series.rolling().apply()DataFrame.rolling().apply()Series.expanding().apply()DataFrame.expanding().apply()raw参数的默认值从None更改为False([GH 20584](https://github.com/pandas-dev/pandas/issues/20584)

  • 移除了Series.argmin()Series.argmax()的弃用行为,现在使用Series.idxmin()Series.idxmax()来获得旧行为(GH 16955

  • 将带有时区信息的datetime.datetimeTimestamp传递给带有tz参数的Timestamp构造函数现在会引发ValueErrorGH 23621

  • 移除了Series.baseIndex.baseCategorical.baseSeries.flagsIndex.flagsPeriodArray.flagsSeries.stridesIndex.stridesSeries.itemsizeIndex.itemsizeSeries.dataIndex.dataGH 20721

  • Timedelta.resolution()更改为匹配标准库datetime.timedelta.resolution的行为,对于旧行为,请使用Timedelta.resolution_string()GH 26839)

  • 删除了Timestamp.weekday_nameDatetimeIndex.weekday_nameSeries.dt.weekday_nameGH 18164)

  • Timestamp.tz_localize()DatetimeIndex.tz_localize()Series.tz_localize()中删除了先前弃用的关键字“errors”(GH 22644)

  • CategoricalDtype中的默认“ordered”参数从None更改为FalseGH 26336)

  • Series.set_axis()DataFrame.set_axis()现在要求将“labels”作为第一个参数,并将“axis”作为可选的命名参数(GH 30089)

  • 删除了to_msgpackread_msgpackDataFrame.to_msgpackSeries.to_msgpack���GH 27103)

  • 删除了Series.compressGH 21930)

  • Categorical.fillna()中删除了先前弃用的关键字“fill_value”,请改用“value”(GH 19269)

  • andrews_curves()中删除了先前弃用的关键字“data”,请改用“frame”(GH 6956)

  • parallel_coordinates()中删除了先前弃用的关键字“data”,请改用“frame”(GH 6956)

  • parallel_coordinates()中删除了先前弃用的关键字“colors”,请改用“color”(GH 6956)

  • read_gbq()中删除了先前弃用的关键字“verbose”和“private_key”(GH 30200)

  • 现在,在 tz-aware 的 SeriesDatetimeIndex 上调用 np.arraynp.asarray 将返回 tz-aware 的 Timestamp 对象数组(GH 24596

性能提升

  • 在使用标量进行 DataFrame 算术和比较操作时,性能有所提升(GH 24990, GH 29853

  • 在使用非唯一的 IntervalIndex 进行索引时,性能有所提升(GH 27489

  • MultiIndex.is_monotonic 中的性能有所提升(GH 27495

  • cut() 中,当 bins 是一个非唯一的 IntervalIndex 时,性能有所提升(GH 27668

  • 当使用 range 初始化一个 DataFrame 时,性能有所提升(GH 30171

  • method"spearman" 时,DataFrame.corr() 的性能有所提升(GH 28139

  • 当提供一个替换值列表时,DataFrame.replace() 的性能有所提升(GH 28099

  • 通过使用向量化而不是迭代循环,在 DataFrame.select_dtypes() 中的性能有所提升(GH 28317

  • Categorical.searchsorted()CategoricalIndex.searchsorted() 的性能有所提升(GH 28795

  • 当将一个 Categorical 与一个标量进行比较且标量未在类别中找到时,性能有所提升(GH 29750

  • 在检查Categorical中的值是否等于、大于或大于给定标量时,性能有所提升。如果检查Categorical是否小于或小于等于标量,则不会有改进(GH 29820)

  • Index.equals()MultiIndex.equals()中的性能有所提升(GH 29134)

  • infer_dtype()中,当skipnaTrue时性能有所提升(GH 28814)

Bug 修复

分类

  • 添加了测试以确保fillna()在值不是类别中的值时引发正确的ValueError消息(GH 13628)

  • 修复了Categorical.astype()中处理NaN值时转换为整数时的错误(GH 28406)

  • 当目标包含重复项时,使用CategoricalIndexDataFrame.reindex()会失败,并且如果源包含重复项,则不会失败(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上使用日期访问器时,未返回与在该类型的Series上使用str.() / dt.()相同类型的对象。例如,当在具有重复条目的Categorical上访问Series.dt.tz_localize()时,访问器会跳过重复项(GH 27952)

  • 修复了DataFrame.replace()Series.replace()中对分类数据给出不正确结果的错误(GH 26988)

  • 修复了在空分类上调用Categorical.min()Categorical.max()会引发 numpy 异常的错误(GH 30227)

  • 通过groupby(..., observed=False)调用时,以下方法现在在未观察到的类别上也能正确输出值(GH 17605) * core.groupby.SeriesGroupBy.count() * core.groupby.SeriesGroupBy.size() * core.groupby.SeriesGroupBy.nunique() * core.groupby.SeriesGroupBy.nth()

日期时间类

  • 在插入到具有 datetime64 数据类型的Series时,Series.__setitem__()错误地将np.timedelta64("NaT")转��为np.datetime64("NaT")的错误(GH 27311)

  • 在底层数据为只读时,Series.dt()属性查找中存在错误(GH 27529)

  • 修复了HDFStore.__getitem__错误地读取在 Python 2 中创建的 tz 属性的错误(GH 26443)

  • to_datetime() 中存在一个错误,传递错误=”coerce”的格式不正确的 str 数组可能会错误地引发 ValueErrorGH 28299)。

  • core.groupby.SeriesGroupBy.nunique() 中存在一个错误,NaT 值干扰了唯一值的计数(GH 27951)。

  • Timestamp 减法中,当从 np.datetime64 对象中减去 Timestamp 时,错误地引发 TypeErrorGH 28286)。

  • 现在,对带有 Timestamp 的整数或整数类型数组的加法和减法将引发 NullFrequencyError 而不是 ValueErrorGH 28268)。

  • 当对整数类型的 SeriesDataFrame 添加或减去 np.datetime64 对象时,会失败地引发TypeError,存在一个错误(GH 28080)。

  • Series.astype()Index.astype()DataFrame.astype() 中存在一个错误,当转换为整数类型时未能处理 NaTGH 28492)。

  • Week中存在一个错误,当添加或减去无效类型时,weekday会错误地引发AttributeError而不是TypeErrorGH 28530)。

  • 在操作带有 'timedelta64[ns]' 类型的 Series 时,DataFrame 的算术运算存在一个错误(GH 28049)。

  • core.groupby.generic.SeriesGroupBy.apply() 中存在一个错误,在原始 DataFrame 中的某一列是日期时间,并且列标签不是标准整数时,会引发 ValueErrorGH 28247)。

  • pandas._config.localization.get_locales() 中存在 Bug,导致 locales -a 将区域设置列表编码为 windows-1252 (GH 23638, GH 24760, GH 27368)

  • 在调用带有 timedelta64[ns] 数据类型时,Series.var() 出现 Bug,未能引发 TypeError 错误 (GH 28289)

  • 在调用 DatetimeIndex.strftime()Series.dt.strftime() 时出现 Bug,将 NaT 转换为字符串 'NaT' 而不是 np.nan (GH 29578)

  • 在使用长度不正确的布尔蒙版屏蔽类似日期时间的数组时,未引发 IndexError 错误,存在 Bug (GH 30308)

  • Timestamp.resolution 是一个属性而不是类属性,存在 Bug (GH 29910)

  • 当调用 pandas.to_datetime() 时传入 None 时,应该返回 NaT,但是出现 Bug,引发 TypeError 错误 (GH 30011)

  • 在使用 cache=True(默认情况下)时,pandas.to_datetime() 在处理 deque 对象时出现 Bug,导致失败 (GH 29403)

  • 在调用带有 datetime64timedelta64 数据类型时,Series.item()DatetimeIndex.item()TimedeltaIndex.item() 函数返回整数而不是 TimestampTimedelta (GH 30175)

  • 在执行 DatetimeIndex 加法时,添加非优化的 DateOffset 会错误地丢弃时区信息,存在 Bug (GH 30336)

  • 在尝试从 DatetimeIndex 中删除不存在的值时,DataFrame.drop() 出现 Bug,会产生令人困惑的错误信息 (GH 30399)

  • DataFrame.append() 函数中存在一个 bug,会删除新数据的时区信息 (GH 30238)

  • 在具有时区感知 dtype 的 Series.cummin()Series.cummax() 函数中存在一个 bug,错误地丢弃了其时区信息 (GH 15553)

  • DatetimeArrayTimedeltaArrayPeriodArray 中存在一个 bug,就地加法和减法实际上没有就地操作 (GH 24115)

  • 在调用时存在一个 bug,在存储 IntegerArraySeries 上调用 pandas.to_datetime() 会引发 TypeError 而不是返回 Series (GH 30050)

  • date_range() 函数中存在一个 bug,当自定义工作时间为 freq 并给定 periods 数量时,会出现问题 (GH 30593)

  • 在与 PeriodIndex 比较时存在一个 bug,将整数错误地转换为 Period 对象,与 Period 比较行为不一致 (GH 30722)

  • DatetimeIndex.insert() 函数中存在一个 bug,在尝试将带有时区信息的 Timestamp 插入到没有时区信息的 DatetimeIndex 或反之时,错误地引发 ValueError 而不是 TypeError (GH 30806)

时间差

  • 在从 np.datetime64 对象减去 TimedeltaIndexTimedeltaArray 时存在一个 bug (GH 29558)

时区

数值

  • DataFrame.quantile() 函数中存在一个 bug,当零列 DataFrame 时,错误地触发异常 (GH 23925)

  • DataFrame灵活的不等比较方法(DataFrame.lt()DataFrame.le()DataFrame.gt()DataFrame.ge())与对象 dtype 和complex条目失败,未像它们的Series对应物那样引发TypeErrorGH 28079

  • DataFrame逻辑操作(&|^)中的错误,未像Series那样通过填充 NA 值匹配行为(GH 28741

  • DataFrame.interpolate()中的错误,指定轴名称引用变量之前未分配(GH 29142

  • Series.var()中的错误,当传递一个可空整数 dtype 序列时,未通过 ddof 参数计算正确的值(GH 29128

  • 当使用frac > 1 和replace = False 时,改进了错误消息(GH 27451

  • 数值索引中的错误导致可以用无效 dtype(例如类似日期时间的)实例化Int64IndexUInt64IndexFloat64IndexGH 29539

  • UInt64Index在从值在np.uint64范围内的列表构造时存在精度丢失的错误(GH 29526

  • NumericIndex构造中的错误导致当使用np.uint64范围内的整数时索引失败(GH 28023

  • NumericIndex构造中的错误导致当使用np.uint64范围内的整数索引DataFrame时,UInt64Index被转换为Float64IndexGH 28279

  • 在使用未排序索引的情况下,使用 method=index时的Series.interpolate()存在错误,之前会返回不正确的结果(GH 21037

  • DataFrame.round()中的错误,其中具有CategoricalIndexDataFrameIntervalIndex列会错误地引发TypeErrorGH 30063)

  • 当存在重复索引时,Series.pct_change()DataFrame.pct_change()中的错误(GH 30463)

  • DataFrame中的累积操作错误地转换为对象 dtype(例如 cumsum,cummax)(GH 19296)

  • diff中丢失扩展类型的 dtype(GH 30889)

  • 在一个列是可空整数 dtype 时,DataFrame.diff引发IndexError的错误(GH 30967)

转换

字符串

  • 在空Series上调用Series.str.isalnum()(以及其他“ismethods”)将返回object dtype 而不是boolGH 29624)

区间

  • IntervalIndex.get_indexer()中的错误,其中CategoricalCategoricalIndextarget会错误地引发TypeErrorGH 30063)

  • pandas.core.dtypes.cast.infer_dtype_from_scalar中存在的错误,传递pandas_dtype=True时未推断出IntervalDtypeGH 30337)

  • Series 构造函数中的错误,从一个 Interval 对象的 list 构造一个 Series 导致 object 类型而不是 IntervalDtypeGH 23563)

  • IntervalDtype 中的错误,其中 kind 属性错误地设置为 None 而不是 "O" (GH 30568)

  • 具有间隔数据的 IntervalIndexIntervalArraySeries 中的错误,其中等式比较不正确 (GH 24112)

索引

  • 使用反向切片进行赋值的错误 (GH 26939)

  • DataFrame.explode() 中的错误会在索引中存在重复时重复帧 (GH 28010)

  • 重新索引一个包含 PeriodPeriodIndex() 与包含其他类型的索引的错误 (GH 28323) (GH 28337)

  • 修复通过 .loc 分配列时,使用 numpy 非 ns datetime 类型的错误 (GH 27395)

  • Float64Index.astype() 中的错误,在将 np.inf 强制转换为整数 dtype 时未正确处理 (GH 28475)

  • Index.union() 可能在左侧包含重复项时失败 (GH 28257)

  • 使用 .loc 进行索引时的错误,其中索引是一个具有非字符串类别的 CategoricalIndex 无法正常工作 (GH 17569, GH 30225)

  • Index.get_indexer_non_unique() 在某些情况下可能会出现 TypeError 错误,例如在字符串索引中搜索整数时 (GH 28257)

  • Float64Index.get_loc() 中出现的错误,错误地引发 TypeError 而不是 KeyErrorGH 29189

  • 在设置 1 行 DataFrame 中的分类值时,DataFrame.loc() 中出现的 dtype 不正确的错误(GH 25495

  • 当输入包含缺失值时,MultiIndex.get_loc() 无法找到缺失值(GH 19132

  • 在长度与 True 值的数量匹配且新数据不是 Seriesnp.array 时,Series.__setitem__() 中的错误分配值布尔索引器时引发的错误(GH 30567

  • 在使用 PeriodIndex 进行索引时的错误,错误地接受表示年份的整数,应使用例如 ser.loc["2007"] 而不是 ser.loc[2007]GH 30763

缺失

多重索引

  • 如果 verify_integrity 参数为 True(默认),则构造 MultiIndex 将验证给定的 sortorder 是否与实际的 lexsort_depth 兼容(GH 28735

  • 使用 MultiIndex 的 Series 和 MultiIndex .drop 在给定级别上不存在标签时引发异常(GH 8594

输入输出

  • 当使用 Python csv 引擎时,read_csv() 现在接受二进制模式文件缓冲区(GH 23779

  • 在使用元组作为列或索引值且使用 orient="columns"orient="index" 时,DataFrame.to_json() 中存在错误,会生成无效的 JSON(GH 20500

  • 改进无穷大解析。read_csv() 现在将 Infinity+Infinity-Infinity 解释为浮点值(GH 10065

  • 在长度 na_rep 比文本输入数据短时,DataFrame.to_csv() 中的值被截断的错误(GH 25099

  • DataFrame.to_string() 中存在一个错误,使用显示选项截断值而不是输出完整内容(GH 9784

  • DataFrame.to_json() 中存在一个错误,使用 orient="table" 时,日期时间列标签未以 ISO 格式写出(GH 28130

  • DataFrame.to_parquet() 中存在一个错误,如果文件不存在,则使用 engine='fastparquet' 写入到 GCS 会失败(GH 28326

  • read_hdf() 中存在一个错误,在引发异常时关闭了未打开的存储(GH 28699

  • DataFrame.read_json() 中存在一个错误,使用 orient="index" 时无法保持顺序(GH 28557

  • DataFrame.to_html() 中存在一个错误,未验证 formatters 参数的长度(GH 28469

  • DataFrame.read_excel() 中存在一个错误,当 engine='ods' 时,sheet_name 参数引用不存在的工作表时(GH 27676

  • pandas.io.formats.style.Styler() 中存在一个错误,浮点数的格式化未正确显示小数位数(GH 13257

  • DataFrame.to_html() 中存在一个错误,当同时使用 formatters=<list>max_cols 时(GH 25955

  • Styler.background_gradient() 中存在一个错误,无法处理 dtypeInt64 的数据(GH 28869

  • DataFrame.to_clipboard() 中存在一个错误,它在 ipython 中无法可靠工作(GH 22707

  • read_json() 中存在一个错误,默认编码未设置为 utf-8GH 29565

  • PythonParser 中存在一个错误,当处理十进制字段时,字符串和字节会混合在一起(GH 29650

  • read_gbq() 现在接受 progress_bar_type 参数,在数据下载时显示进度条。(GH 29857)

  • pandas.io.json.json_normalize() 中存在一个 bug,在 record_path 指定的位置缺少值会引发 TypeErrorGH 30148)

  • read_excel() 现在接受二进制数据(GH 15914)

  • read_csv() 中存在一个 bug,其编码处理仅限于 C 引擎中的字符串 utf-16GH 24130)

绘图

  • Series.plot() 中存在一个 bug,无法绘制布尔值(GH 23719)

  • DataFrame.plot() 中存在一个 bug,在没有行时无法绘图(GH 27758)

  • DataFrame.plot() 中存在一个 bug,当在同一轴上绘制多个系列时,会产生错误的图例标记(GH 18222)

  • DataFrame.plot() 中存在一个 bug,在 kind='box' 且数据包含日期时间或时间间隔数据时。这些类型现在会自动丢弃(GH 22799)

  • DataFrame.plot.line()DataFrame.plot.area() 中存在 bug,在 x 轴上产生错误的 xlim(GH 27686, GH 25160, GH 24784)

  • DataFrame.boxplot() 存在一个 bug,不接受像 DataFrame.plot.box() 那样的 color 参数(GH 26214)

  • DataFrame.plot.bar() 中的 xticks 参数被忽略了一个 bug(GH 14119)

  • set_option() 现在验证提供给 'plotting.backend' 的绘图后端是否在设置选项时实现了该后端,而不是在创建绘图时 (GH 28163)

  • DataFrame.plot() 现在允许一个 backend 关键字参数,以允许在一个会话中在不同的后端之间切换 (GH 28619).

  • 颜色验证中的 bug 错误地对非颜色样式进行引发 (GH 29122).

  • 允许 DataFrame.plot.scatter() 绘制 objectsdatetime 类型的数据 (GH 18755, GH 30391)

  • DataFrame.hist() 中的 bug,xrot=0by 和子图不兼容 (GH 30288).

GroupBy/resample/rolling

  • core.groupby.DataFrameGroupBy.apply() 中的 bug 只显示单个组的输出,当函数返回一个 Index 时 (GH 28652)

  • 当多个组中的任何一个组含有所有 NA 值时,DataFrame.groupby() 中出现的 bug 引发 IndexError (GH 20519)

  • 当与空的 SeriesDataFrame 一起使用时,Resampler.size()Resampler.count() 返回错误的 dtype (GH 28427)

  • axis=1 时,DataFrame.rolling() 不允许在 datetimes 上滚动 (GH 28192)

  • DataFrame.rolling()中的错误,不允许在多级索引级别上执行滚动操作(GH 15584)。

  • DataFrame.rolling()中的错误,不允许在单调递减的时间索引上执行滚动操作(GH 19248)。

  • DataFrame.groupby()中存在错误,当axis=1时,不提供按列名选择的功能(GH 27614)。

  • 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)。

  • core.window.rolling.Rolling.quantile()中存在错误,当在groupby中使用时,会忽略interpolation关键字参数(GH 28779)。

  • DataFrame.groupby()中存在错误,anyallnunique和转换函数会错误处理重复的列标签(GH 21668)。

  • 在带有时区信息的 datetime64 列中,core.groupby.DataFrameGroupBy.agg()中的错误将结果错误地转换为原始 dtype(GH 29641

  • 在使用 axis=1 并且具有单层列索引时,DataFrame.groupby()中的错误(GH 30208

  • 在使用 axis=1 时,DataFrame.groupby()中的错误 nunique(GH 30253

  • 当具有多个列表样式的 q 值和整数列名称时,DataFrameGroupBy.quantile()SeriesGroupBy.quantile()中的错误(GH 30289

  • fill_methodNone时,DataFrameGroupBy.pct_change()SeriesGroupBy.pct_change()中的错误导致TypeErrorGH 30463

  • Rolling.count()Expanding.count()参数中,min_periods被忽略的错误(GH 26996

重塑

  • DataFrame.apply()中的错误,导致空的DataFrame输出不正确(GH 28202, GH 21959

  • 在创建 MultiIndex 时,DataFrame.stack()中的错误未正确处理非唯一索引(GH 28301

  • pivot_table()中的错误,在margins=Trueaggfunc='mean'时未返回正确的类型floatGH 24893

  • merge_asof() 中修复了无法使用 datetime.timedelta 作为 tolerance kwarg 的问题(GH 28098

  • merge() 中出现的问题已修复,与 MultiIndex 一起时未正确追加后缀(GH 28518

  • qcut()cut() 现在可以处理布尔值输入(GH 20303

  • 确保在使用容差值时,所有 int dtypes 都可以在 merge_asof() 中使用。之前,每个非 int64 类型都会引发错误的 MergeErrorGH 28870

  • get_dummies()columns 不是类似列表的值时,现在会提供更好的错误消息(GH 28383

  • Index.join() 中出现的问题已修复,导致 MultiIndex 名称顺序不匹配时出现无限递归错误(GH 25760, GH 28956

  • Bug Series.pct_change() 中提供锚定频率会引发 ValueError 的问题已修复(GH 28664

  • 在某些情况下,当两个 DataFrame 以不同顺序具有相同列时,DataFrame.equals() 错误地返回 True 的问题已修复(GH 28839

  • DataFrame.replace() 中出现的问题已修复,导致非数值替换器的 dtype 未被尊重(GH 26632

  • 在为 id_varsvalue_vars 提供混合字符串和数值的情况下,melt() 中出现的问题已修复,错误地引发 ValueErrorGH 29718

  • 在转置每列都是相同扩展 dtype 的 DataFrame 时,现在会保留 dtype(GH 30091

  • 在合并时出现了merge_asof()的错误,合并在一个带时区的 left_index 和一个带时区的列 right_on 上时出现问题 (GH 29864)

  • 改进了当labels=True时的 cut()qcut() 的错误消息和文档字符串(GH 13318)

  • 对带有列表级别的DataFrame.unstack() 缺少 fill_na 参数的错误 (GH 30740)

稀疏

  • SparseDataFrame 中的算术运算错误地将输入转换为浮点数 (GH 28107)

  • 在存在名为 sparse 的列而不是访问器时,DataFrame.sparse 返回 Series 的错误 (GH 30758)

  • 修复了带有布尔型 SparseArrayoperator.xor()。现在返回稀疏结果,而不是对象类型 (GH 31025)

ExtensionArray

  • 在设置标量字符串时arrays.PandasArray中出现的错误 (GH 28118, GH 28150).

  • 可空整数无法与字符串进行比较的错误 (GH 28930)

  • 当列表样式数据和指定了 dtype 时,DataFrame 构造函数会引发 ValueError 的错误 (GH 30280)

其他

  • 尝试使用 set_option() 设置 display.precisiondisplay.max_rowsdisplay.max_columns 为除了None或正整数之外的任何值都会引发 ValueError (GH 23348)

  • 使用带有重叠键的嵌套字典的DataFrame.replace()不再引发异常,现在与平坦字典的行为匹配 (GH 27660)

  • DataFrame.to_csv()Series.to_csv() 现在支持字典作为 compression 参数,其中键 'method' 是压缩方法,其他键是附加的压缩选项,当压缩方法是 'zip' 时。 (GH 26023)

  • 在布尔序列中,Series.diff()存在错误地引发TypeError的问题 (GH 17294)

  • 当传递Series的元组时,Series.append()将不再引发TypeError (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()引发IndexError的错误已修复 (GH 28769)

  • 修复AbstractHolidayCalendar以返回 2030 年后的正确结果(现在延伸到 2200 年)(GH 27790)

  • 修复IntegerArray在除以0时返回inf而不是NaN的问题 (GH 27398)

  • 当另一个值为01时,已修复了IntegerArraypow操作(GH 29997

  • 当启用 use_inf_as_na 时,在Series.count()中存在错误引发 (GH 29478)

  • 在非可散列名称的Index中存在错误,但未引发TypeError (GH 29069)

  • 在传递二维ndarray和扩展 dtype 时的DataFrame构造函数中存在错误(GH 12513

  • 在使用dtype="string"na_rep提供系列时,DataFrame.to_csv()存在错误,na_rep被截断为 2 个字符。 (GH 29975)

  • DataFrame.itertuples() 中的错误,会错误地确定是否可以将命名元组用于 255 列的数据框 (GH 28282)

  • 处理 testing.assert_series_equal() 中的嵌套 NumPy object 数组,用于 ExtensionArray 实现 (GH 30841)

  • Index 构造函数中存在错误,错误地允许二维输入数组 (GH 13601, GH 27125)

分类

  • 添加测试以确保当值不是来自类别时,fillna() 会引发正确的 ValueError 消息 (GH 13628)

  • Categorical.astype() 中的错误,在转换为整数时,NaN 值处理不正确 (GH 28406)

  • 当目标包含重复项时,DataFrame.reindex()CategoricalIndex 结合使用会失败,并且如果源包含重复项则不会失败 (GH 28107)

  • Categorical.astype() 中的错误,不允许转换为扩展 dtype (GH 28668)

  • merge() 中的错误,无法在分类和扩展 dtype 列上进行连接 (GH 28668)

  • Categorical.searchsorted()CategoricalIndex.searchsorted() 现在也适用于无序分类 (GH 21667)

  • 添加测试以确保使用 DataFrame.to_parquet()read_parquet() 将字符串类型的 parquet 回转时会保留分类 dtype (GH 27955)

  • Categorical.remove_categories() 中更改错误消息,始终将无效的移除项显示为集合 (GH 28669)

  • 在日期时间类别的分类数据Series上使用日期访问器时,未返回与在该类型的Series上使用str.() / dt.()相同类型的对象。例如,在具有重复条目的Categorical上访问Series.dt.tz_localize()时,访问器会跳过重复项(GH 27952)

  • DataFrame.replace()Series.replace()中的错误会在分类数据上产生不正确的结果(GH 26988)

  • 在空分类中调用Categorical.min()Categorical.max()会引发 numpy 异常的错误(GH 30227)

  • 通过groupby(..., observed=False)调用时,以下方法现在在未观察到的类别上也能正确输出值(GH 17605) * core.groupby.SeriesGroupBy.count() * core.groupby.SeriesGroupBy.size() * core.groupby.SeriesGroupBy.nunique() * core.groupby.SeriesGroupBy.nth()

日期时间类

  • Series.__setitem__()中的错误,当插入到具有 datetime64 dtype 的Series时,不正确地将np.timedelta64("NaT")转换为np.datetime64("NaT")GH 27311)

  • 在只读数据的情况下,Series.dt()属性查找中存在错误(GH 27529)

  • HDFStore.__getitem__中的错误,不正确地读取在 Python 2 中创建的 tz 属性(GH 26443)

  • to_datetime() 中的 Bug,通过 errors=”coerce” 传递格式不正确的 str 数组可能错误地导致引发 ValueErrorGH 28299)

  • core.groupby.SeriesGroupBy.nunique() 中的 Bug,NaT 值干扰了唯一值的计数(GH 27951)

  • Timestamp 减法中,从 Timestamp 减去 np.datetime64 对象时错误地引发 TypeErrorGH 28286)

  • 使用 Timestamp 进行整数或整数 dtype 数组的加法和减法现在将引发 NullFrequencyError 而不是 ValueErrorGH 28268)

  • SeriesDataFrame 中的 Bug,整数 dtype 未能在添加或减去 np.datetime64 对象时引发 TypeErrorGH 28080)

  • Series.astype()Index.astype()DataFrame.astype() 中的 Bug,当转换为整数 dtype 时未能处理 NaTGH 28492)

  • Week 中的 Bug,当添加或减去无效类型时,weekday 错误地引发 AttributeError 而不是 TypeErrorGH 28530)

  • DataFrame 进行算术运算时,与 dtype 为 'timedelta64[ns]'Series 进行操作时的 Bug(GH 28049)

  • core.groupby.generic.SeriesGroupBy.apply() 中的 Bug 导致当原始 DataFrame 中的列是日期时间且列标签不是标准整数时引发 ValueErrorGH 28247)

  • pandas._config.localization.get_locales() 函数中 locales -a 将本地化列表编码为 windows-1252 的 Bug(GH 23638, GH 24760, GH 27368

  • Series.var() 函数在使用 timedelta64[ns] 类型时未能引发 TypeError 的 Bug(GH 28289

  • DatetimeIndex.strftime()Series.dt.strftime() 函数中 NaT 被转换为字符串 'NaT' 而不是 np.nan 的 Bug(GH 29578

  • 使用错误长度的布尔掩码掩盖类似日期时间的数组而不引发 IndexError 的 Bug(GH 30308

  • Timestamp.resolution 属性应该是一个类属性而不是一个属性的 Bug(GH 29910

  • pandas.to_datetime() 函数在传递 None 时抛出 TypeError 而不是返回 NaT 的 Bug(GH 30011

  • pandas.to_datetime() 函数在使用 cache=True(默认情况下)时无法正确处理 deque 对象的 Bug(GH 29403

  • Series.item() 函数在使用 datetime64timedelta64 类型、DatetimeIndex.item()TimedeltaIndex.item() 返回整数而不是 TimestampTimedelta 的 Bug(GH 30175

  • 在将非优化的 DateOffset 添加到 DatetimeIndex 时错误地丢弃时区信息的 Bug(GH 30336

  • DataFrame.drop() 函数尝试从 DatetimeIndex 中删除不存在的值时会产生令人困惑的错误消息的 Bug(GH 30399

  • DataFrame.append() 中的错误会移除新数据的时区感知性 (GH 30238)

  • Series.cummin()Series.cummax() 中的错误,具有时区感知的数据类型错误地删除其时区 (GH 15553)

  • DatetimeArrayTimedeltaArrayPeriodArray 中的错误,就地加法和减法实际上没有就地操作 (GH 24115)

  • pandas.to_datetime() 在使用存储 IntegerArraySeries 时提出 TypeError 而不是返回 Series 的错误 (GH 30050)

  • date_range() 中的错误,使用自定义工作时间作为 freq 并给定 periods 的数量 (GH 30593)

  • PeriodIndex 比较中的错误,将整数错误地转换为 Period 对象,与 Period 比较行为不一致 (GH 30722)

  • DatetimeIndex.insert() 中的错误,在尝试将具有时区感知的 Timestamp 插入时区不感知的 DatetimeIndex 或反之时提出 ValueError 而不是 TypeError (GH 30806)

时间间隔

  • TimedeltaIndexTimedeltaArray 减去 np.datetime64 对象的错误 (GH 29558)

时区

数字

  • DataFrame.quantile() 中的错误,使用零列DataFrame 错误地提出(GH 23925)

  • DataFrame灵活的不等比较方法(DataFrame.lt()DataFrame.le()DataFrame.gt()DataFrame.ge())与对象类型和complex条目一起失败,未像它们的Series对应物那样引发TypeErrorGH 28079

  • DataFrame逻辑操作(&|^)中存在错误,不像Series那样通过填充 NA 值来匹配行为(GH 28741

  • DataFrame.interpolate()中存在错误,指定轴名称引用变量之前未分配(GH 29142

  • Series.var()中存在错误,未通过ddof参数计算具有可空整数 dtype 系列的正确值(GH 29128

  • 当使用frac > 1 且replace = False 时,改进了错误消息(GH 27451

  • 数值索引中存在错误,导致可以用无效 dtype(例如类似日期时间的)实例化Int64IndexUInt64IndexFloat64IndexGH 29539

  • 在从值在np.uint64范围内的列表构造时,UInt64Index存在精度丢失的错误(GH 29526

  • 在使用np.uint64范围内的整数时,NumericIndex构造中存在导致索引失败的错误(GH 28023

  • 在使用np.uint64范围内的整数索引DataFrame时,导致NumericIndex构造中存在错误,将UInt64Index转换为Float64IndexGH 28279

  • 当使用method=index且索引未排序时,在Series.interpolate()中存在错误,之前会返回不正确的结果(GH 21037

  • DataFrame.round()中的错误,其中具有CategoricalIndexDataFrameIntervalIndex列将错误地引发TypeErrorGH 30063

  • 当存在重复索引时,在Series.pct_change()DataFrame.pct_change()中的错误(GH 30463

  • DataFrame累积操作(例如 cumsum,cummax)中的错误,将不正确地转换为 object-dtype(GH 19296

  • diff中的错误导致扩展类型丢失 dtype(GH 30889

  • DataFrame.diff中的错误在其中一个列是可空整数 dtype 时引发IndexErrorGH 30967

转换

字符串

区间

  • IntervalIndex.get_indexer()中的错误,其中CategoricalCategoricalIndex target会错误地引发TypeErrorGH 30063

  • pandas.core.dtypes.cast.infer_dtype_from_scalar中的错误,传递pandas_dtype=True未推断出IntervalDtypeGH 30337

  • Series构造函数中存在的错误,从Interval对象的list构造Series导致结果为object dtype 而不是IntervalDtypeGH 23563

  • IntervalDtype中存在的错误,其中kind属性错误地设置为None而不是"O"GH 30568

  • 在区间数据的IntervalIndexIntervalArraySeries中存在的错误,导致相等比较不正确(GH 24112

索引

  • 在使用反向切片的赋值中存在的错误(GH 26939

  • 在存在索引重复项的情况下,DataFrame.explode()会复制帧(GH 28010

  • 在使用另一类型索引重新索引PeriodIndex()时存在的错误,该索引包含PeriodGH 28323)(GH 28337

  • 通过.loc进行列赋值时,存在使用 numpy 非纳秒日期时间类型的错误(GH 27395

  • Float64Index.astype()中存在的错误,在将np.inf强制转换为整数 dtype 时未正确处理(GH 28475

  • 当左侧包含重复值时,Index.union()可能会失败(GH 28257

  • 在使用.loc索引时存在的错误,其中索引是具有非字符串类别的CategoricalIndex时不起作用(GH 17569GH 30225

  • Index.get_indexer_non_unique()在某些情况下可能会出现TypeError,例如在字符串索引中搜索整数时(GH 28257

  • Float64Index.get_loc() 中存在错误引发 TypeError 而不是 KeyError 时,存在错误(GH 29189

  • 在设置单行 DataFrame 中的 Categorical 值时,DataFrame.loc() 中存在 dtype 错误(GH 25495

  • 当输入包含缺失值时,MultiIndex.get_loc() 无法找到缺失值(GH 19132

  • 当新数据的长度与 True 值的数量相匹配且新数据不是 Seriesnp.array 时,Series.__setitem__() 中存在错误分配值的布尔索引器(GH 30567

  • 使用 PeriodIndex 进行索引时存在错误,错误地接受表示年份的整数,应该使用例如 ser.loc["2007"] 而不是 ser.loc[2007]GH 30763

缺失

多重索引

  • verify_integrity 参数为 True(默认值)时,MultiIndex 的构造函数验证给定的 sortorder 是否与实际的 lexsort_depth 兼容(GH 28735

  • 当标签不在给定级别中时,Series 和 MultiIndex 的 .drop 会引发异常(GH 8594

输入/输出

  • read_csv() 现在在使用 Python csv 引擎时接受二进制模式文件缓冲区(GH 23779

  • DataFrame.to_json() 存在错误,当使用元组作为列或索引值并且使用 orient="columns"orient="index" 时,会产生无效的 JSON(GH 20500

  • 改进了无穷大的解析。read_csv() 现在将 Infinity+Infinity-Infinity 解释为浮点值(GH 10065

  • na_rep 的长度短于文本输入数据时,DataFrame.to_csv() 中存在错误截断值的情况(GH 25099

  • Bug in DataFrame.to_string() 使用显示选项截断值而不是输出完整内容(GH 9784)

  • Bug in DataFrame.to_json() 使用orient="table"时,日期时间列标签不会以 ISO 格式输出(GH 28130)

  • Bug in DataFrame.to_parquet() 使用engine='fastparquet'写入 GCS 时,如果文件不存在,则会失败(GH 28326)

  • Bug in read_hdf() 当引发异常时关闭未打开的存储(GH 28699)

  • Bug in DataFrame.read_json() 使用orient="index"时不会保持顺序(GH 28557)

  • Bug in DataFrame.to_html() formatters参数的长度未经验证(GH 28469)

  • Bug in DataFrame.read_excel() 使用engine='ods'时,当sheet_name参数引用一个不存在的工作表时(GH 27676)

  • Bug in pandas.io.formats.style.Styler() 对浮点值的格式化未正确显示小数位数(GH 13257)

  • Bug in DataFrame.to_html() 在同时使用formatters=<list>max_cols时。(GH 25955)

  • Bug in Styler.background_gradient() 无法与 dtype Int64一起工作(GH 28869)

  • Bug in DataFrame.to_clipboard() 无法在 ipython 中可靠工作(GH 22707)

  • Bug in read_json() 默认编码未设置为utf-8GH 29565)

  • Bug in PythonParser 处理十进制字段时,混合使用 str 和 bytes(GH 29650)

  • read_gbq()现在接受progress_bar_type参数,在数据下载时显示进度条。(GH 29857)

  • pandas.io.json.json_normalize()中的错误,当record_path指定的位置缺失值时会引发TypeErrorGH 30148)

  • read_excel()现在接受二进制数据(GH 15914)

  • read_csv()中的错误,编码处理仅限于 C 引擎的字符串utf-16GH 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()绘制objectsdatetime类型的数据(GH 18755, GH 30391)

  • DataFrame.hist()中的错误,xrot=0by和子图不兼容(GH 30288).

GroupBy/resample/rolling

  • core.groupby.DataFrameGroupBy.apply()中的错误,当函数返回一个Index时,只显示单个组的输出(GH 28652)

  • DataFrame.groupby()中的错误,当存在多个组时,如果任何组包含所有 NA 值,则会引发IndexErrorGH 20519)

  • Resampler.size()Resampler.count()中的错误,在与空的SeriesDataFrame一起使用时返回错误的 dtype(GH 28427)

  • DataFrame.rolling()中的错误,当axis=1时,不允许在日期时间上滚动(GH 28192)

  • DataFrame.rolling()不允许在多级索引级别上滚动的错误(GH 15584

  • 在单调递减的时间索引上使用DataFrame.rolling()时会出现的错误(GH 19248

  • axis=1时,DataFrame.groupby()中未提供按列名选择的错误(GH 27614

  • 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

  • 在分组内使用时,core.window.rolling.Rolling.quantile()忽略interpolation关键字参数的错误(GH 28779

  • DataFrame.groupby()中存在的错误,会导致anyallnunique和 transform 函数不正确处理重复的列标签(GH 21668

  • 修复了具有时区感知的 datetime64 列的 core.groupby.DataFrameGroupBy.agg() 在不正确地将结果转换为原始 dtype 的错误 (GH 29641)

  • 修复了在使用 axis=1 并且有单级列索引时 DataFrame.groupby() 的错误 (GH 30208)

  • 修复了在使用 axis=1 时 DataFrame.groupby() 上的 nunique 的错误 (GH 30253)

  • 修复了具有多个类似列表的 q 值和整数列名时 DataFrameGroupBy.quantile()SeriesGroupBy.quantile() 的错误 (GH 30289)

  • 修复了在 fill_methodNoneDataFrameGroupBy.pct_change()SeriesGroupBy.pct_change() 导致 TypeError 的错误 (GH 30463)

  • 修复了 Rolling.count()Expanding.count() 参数中的错误,min_periods 被忽略了 (GH 26996)

重塑

  • 修复了 DataFrame.apply() 中的错误,在空的 DataFrame 中导致了不正确的输出 (GH 28202, GH 21959)

  • 修复了 DataFrame.stack() 在创建 MultiIndex 时没有正确处理非唯一索引的错误 (GH 28301)

  • 修复了 pivot_table()margins=Trueaggfunc='mean' 时没有返回正确类型 float 的错误 (GH 24893)

  • Bug merge_asof() 不能使用 datetime.timedelta 作为 tolerance 参数 (GH 28098)

  • merge() 中存在 Bug,没有正确地附加后缀到 MultiIndex 中 (GH 28518)

  • qcut()cut() 现在处理布尔型输入 (GH 20303)

  • 修复确保所有 int 类型都可以在 merge_asof() 中使用容差值。之前,每个非 int64 类型都会引发错误的 MergeError (GH 28870).

  • get_dummies() 中提供更好的错误消息,当 columns 不是类似列表的值时 (GH 28383)

  • Index.join() 中存在 Bug,导致不匹配的 MultiIndex 名称顺序时出现无限递归错误。 (GH 25760, GH 28956)

  • Bug Series.pct_change() 在提供锚定频率时会抛出 ValueError (GH 28664)

  • DataFrame.equals() 存在一个 Bug,在某些情况下错误地返回 True,当两个 DataFrame 的列以不同顺序相同时 (GH 28839)

  • DataFrame.replace() 中存在 Bug,导致非数值替换项的 dtype 未被尊重 (GH 26632)

  • melt() 中存在 Bug,当为 id_varsvalue_vars 提供混合字符串和数值时,会错误地引发 ValueError (GH 29718)

  • 当转置一个每列都是相同扩展 dtype 的 DataFrame 时,现在会保留 dtype (GH 30091)

  • 在具有 tz-aware left_index 和 tz-aware 列的情况下,在 merge_asof() 上合并的错误已修复 (GH 29864)

  • labels=True 时,在 cut()qcut() 中的错误消息和文档字符串已改进 (GH 13318)

  • 使用列表级别时,DataFrame.unstack() 中缺失的 fill_na 参数的错误已修复 (GH 30740)

Sparse

  • SparseDataFrame 中的算术操作错误地将输入转换为浮点数的错误已修复 (GH 28107)

  • 在存在命名为 sparse 的列而不是访问器时,DataFrame.sparse 返回 Series 的错误已修复 (GH 30758)

  • 使用布尔类型 SparseArrayoperator.xor() 的错误已修复。现在返回稀疏结果,而不是对象 dtype (GH 31025)

ExtensionArray

  • 在设置标量字符串时出现的 arrays.PandasArray 中的错误已修复 (GH 28118, GH 28150)。

  • 可空整数无法与字符串进行比较的错误已修复 (GH 28930)

  • DataFrame 构造函数在使用类似列表的数据和指定 dtype 时引发 ValueError 的错误已修复 (GH 30280)

其他

  • 尝试使用 set_option() 设置 display.precisiondisplay.max_rowsdisplay.max_columns 为非 None 或正整数时将引发 ValueError (GH 23348)

  • 在嵌套字典中使用 DataFrame.replace() 并且键发生重叠时将不再引发错误,现在与平坦字典的行为一致 (GH 27660)

  • DataFrame.to_csv()Series.to_csv() 现在支持将字典作为 compression 参数,键 'method' 是压缩方法,其他键是额外的压缩选项,当压缩方法为 'zip' 时 (GH 26023)

  • Series.diff() 中存在一个 Bug,当布尔系列会错误地引发 TypeError 时 (GH 17294)

  • 当传递一个 Series 的元组时,Series.append() 不再引发 TypeError (GH 28410)

  • 在调用 pandas.libs._json.encode() 时修复了错误消息损坏的问题,该函数作用于 0 维数组 (GH 18878)

  • DataFrame.query()DataFrame.eval() 中,现在还可以使用反引号引用来使用无效标识符,如以数字开头的名称,python 关键字或使用单字符运算符。 (GH 27017)

  • pd.core.util.hashing.hash_pandas_object 中存在一个 Bug,其中包含元组的数组被错误地视为不可散列 (GH 28969)

  • 在使用空列表追加时,DataFrame.append() 引发 IndexError 的 Bug (GH 28769)

  • 修复了 AbstractHolidayCalendar 在 2030 年后返回正确结果的问题(现在可延续到 2200 年) (GH 27790)

  • 修复了 IntegerArray 在除以 0 时返回 inf 而不是 NaN 的问题 (GH 27398)

  • 当另一个值为 01 时,修复了 IntegerArraypow 运算问题 (GH 29997)

  • 在启用 use_inf_as_na 时,Series.count() 引发错误 (GH 29478)

  • Index 中存在一个 Bug,非可散列名称可以设置而不引发 TypeError (GH 29069)

  • 在通过传递二维 ndarray 和扩展 dtype 时,DataFrame 构造函数中存在一个 Bug (GH 12513)

  • 在向 DataFrame.to_csv() 提供具有 dtype="string"na_rep 的系列时存在 Bug,na_rep 被截断为 2 个字符。 (GH 29975)

  • DataFrame.itertuples()中的错误,错误地确定是否可以为 255 列的数据框使用命名元组(GH 28282)

  • 处理嵌套的 NumPy object数组在testing.assert_series_equal()中用于 ExtensionArray 实现(GH 30841

  • Index构造函数中的错误,错误地允许二维输入数组(GH 13601, GH 27125)

贡献者

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

  • Aaditya Panikath +

  • Abdullah İhsan Seçer

  • Abhijeet Krishnan +

  • Adam J. Stewart

  • Adam Klaum +

  • Addison Lynch

  • Aivengoe +

  • Alastair James +

  • Albert Villanova del Moral

  • Alex Kirko +

  • Alfredo Granja +

  • Allen Downey

  • Alp Arıbal +

  • Andreas Buhr +

  • Andrew Munch +

  • Andy

  • Angela Ambroz +

  • Aniruddha Bhattacharjee +

  • Ankit Dhankhar +

  • Antonio Andraues Jr +

  • Arda Kosar +

  • Asish Mahapatra +

  • Austin Hackett +

  • Avi Kelman +

  • AyowoleT +

  • Bas Nijholt +

  • Ben Thayer

  • Bharat Raghunathan

  • Bhavani Ravi

  • Bhuvana KA +

  • Big Head

  • Blake Hawkins +

  • Bobae Kim +

  • Brett Naul

  • Brian Wignall

  • Bruno P. Kinoshita +

  • Bryant Moscon +

  • Cesar H +

  • Chris Stadler

  • Chris Zimmerman +

  • Christopher Whelan

  • Clemens Brunner

  • Clemens Tolboom +

  • Connor Charles +

  • Daniel Hähnke +

  • Daniel Saxton

  • Darin Plutchok +

  • Dave Hughes

  • David Stansby

  • DavidRosen +

  • Dean +

  • Deepan Das +

  • Deepyaman Datta

  • DorAmram +

  • Dorothy Kabarozi +

  • Drew Heenan +

  • Eliza Mae Saret +

  • Elle +

  • Endre Mark Borza +

  • Eric Brassell +

  • Eric Wong +

  • Eunseop Jeong +

  • Eyden Villanueva +

  • Felix Divo

  • ForTimeBeing +

  • Francesco Truzzi +

  • Gabriel Corona +

  • Gabriel Monteiro +

  • Galuh Sahid +

  • Georgi Baychev +

  • Gina

  • GiuPassarelli +

  • Grigorios Giannakopoulos +

  • Guilherme Leite +

  • Guilherme Salomé +

  • Gyeongjae Choi +

  • Harshavardhan Bachina +

  • Harutaka Kawamura +

  • Hassan Kibirige

  • Hielke Walinga

  • Hubert

  • Hugh Kelley +

  • Ian Eaves +

  • Ignacio Santolin +

  • Igor Filippov +

  • Irv Lustig

  • Isaac Virshup +

  • Ivan Bessarabov +

  • JMBurley +

  • Jack Bicknell +

  • Jacob Buckheit +

  • Jan Koch

  • Jan Pipek +

  • Jan Škoda +

  • Jan-Philip Gehrcke

  • Jasper J.F. van den Bosch +

  • Javad +

  • Jeff Reback

  • Jeremy Schendel

  • Jeroen Kant +

  • Jesse Pardue +

  • Jethro Cao +

  • Jiang Yue

  • Jiaxiang +

  • Jihyung Moon +

  • Jimmy Callin

  • Jinyang Zhou +

  • Joao Victor Martinelli +

  • Joaq Almirante +

  • John G Evans +

  • John Ward +

  • Jonathan Larkin +

  • Joris Van den Bossche

  • Josh Dimarsky +

  • Joshua Smith +

  • Josiah Baker +

  • Julia Signell +

  • Jung Dong Ho +

  • Justin Cole +

  • Justin Zheng

  • Kaiqi Dong

  • Karthigeyan +

  • Katherine Younglove +

  • Katrin Leinweber

  • Kee Chong Tan +

  • Keith Kraus +

  • Kevin Nguyen +

  • Kevin Sheppard

  • Kisekka David +

  • Koushik +

  • Kyle Boone +

  • Kyle McCahill +

  • Laura Collard, PhD +

  • 刘寻找者 +

  • Louis Huynh +

  • Lucas Scarlato Astur +

  • Luiz Gustavo +

  • Luke +

  • Luke Shepard +

  • MKhalusova +

  • Mabel Villalba

  • Maciej J +

  • 麦思成

  • Manu NALEPA +

  • Marc

  • Marc Garcia

  • Marco Gorelli +

  • Marco Neumann +

  • Martin Winkel +

  • Martina G. Vilas +

  • Mateusz +

  • Matthew Roeschke

  • Matthew Tan +

  • Max Bolingbroke

  • Max Chen +

  • MeeseeksMachine

  • Miguel +

  • MinGyo Jung +

  • Mohamed Amine ZGHAL +

  • Mohit Anand +

  • MomIsBestFriend +

  • Naomi Bonnin +

  • Nathan Abel +

  • Nico Cernek +

  • Nigel Markey +

  • Noritada Kobayashi +

  • Oktay Sabak +

  • Oliver Hofkens +

  • Oluokun Adedayo +

  • Osman +

  • Oğuzhan Öğreden +

  • Pandas Development Team +

  • Patrik Hlobil +

  • Paul Lee +

  • Paul Siegel +

  • Petr Baev +

  • Pietro Battiston

  • Prakhar Pandey +

  • Puneeth K +

  • Raghav +

  • Rajat +

  • Rajhans Jadhao +

  • Rajiv Bharadwaj +

  • Rik-de-Kort +

  • Roei.r

  • Rohit Sanjay +

  • Ronan Lamy +

  • Roshni +

  • Roymprog +

  • Rushabh Vasani +

  • Ryan Grout +

  • Ryan Nazareth

  • Samesh Lakhotia +

  • Samuel Sinayoko

  • Samyak Jain +

  • Sarah Donehower +

  • Sarah Masud +

  • Saul Shanabrook +

  • Scott Cole +

  • SdgJlbl +

  • Seb +

  • Sergei Ivko +

  • 沙迪·阿基基

  • Shorokhov Sergey

  • Siddhesh Poyarekar +

  • Sidharthan Nair +

  • Simon Gibbons

  • Simon Hawkins

  • Simon-Martin Schröder +

  • Sofiane Mahiou +

  • Sourav kumar +

  • Souvik Mandal +

  • Soyoun Kim +

  • Sparkle Russell-Puleri +

  • Srinivas Reddy Thatiparthy (斯里尼瓦斯·雷迪·塔蒂帕蒂)

  • Stuart Berg +

  • Sumanau Sareen

  • Szymon Bednarek +

  • Tambe Tabitha Achere +

  • Tan Tran

  • 唐鹤一 +

  • Tanmay Daripa +

  • Tanya Jain

  • Terji Petersen

  • Thomas Li +

  • Tirth Jain +

  • Tola A +

  • Tom Augspurger

  • Tommy Lynch +

  • Tomoyuki Suzuki +

  • Tony Lorenzo

  • Unprocessable +

  • 乌韦·L·科恩

  • Vaibhav Vishal

  • Victoria Zdanovskaya +

  • Vijayant +

  • Vishwak Srinivasan +

  • 王艾勇

  • 文欢

  • 韦斯·麦金尼

  • Will Ayd

  • 威尔·霍姆格伦

  • William Ayd

  • William Blan +

  • Wouter Overmeire

  • Wuraola Oyewusi +

  • YaOzI +

  • Yash Shukla +

  • 余旺 +

  • Yusei Tahara +

  • alexander135 +

  • alimcmaster1

  • avelineg +

  • bganglia +

  • bolkedebruin

  • bravech +

  • chinhwee +

  • cruzzoe +

  • dalgarno +

  • daniellebrown +

  • danielplawrence

  • est271 +

  • francisco souza +

  • ganevgv +

  • garanews +

  • gfyoung

  • h-vetinari

  • hasnain2808 +

  • ianzur +

  • jalbritt +

  • jbrockmendel

  • jeschwar +

  • jlamborn324 +

  • joy-rosie +

  • kernc

  • killerontherun1

  • krey +

  • lexy-lixinyu +

  • lucyleeow +

  • lukasbk +

  • maheshbapatu +

  • mck619 +

  • nathalier

  • naveenkaushik2504 +

  • nlepleux +

  • nrebena

  • ohad83 +

  • pilkibun

  • pqzx +

  • proost +

  • pv8493013j +

  • qudade +

  • rhstanton +

  • rmunjal29 +

  • sangarshanan +

  • sardonick +

  • saskakarsi +

  • shaido987 +

  • ssikdar1

  • steveayers124 +

  • tadashigaki +

  • timcera +

  • tlaytongoogle +

  • tobycheese

  • tonywu1999 +

  • tsvikas +

  • yogendrasoni +

  • zys5945 +

posted @ 2024-06-26 10:32  绝不原创的飞龙  阅读(3)  评论(0编辑  收藏  举报