Pandas-2-2-中文文档-四十八-
Pandas 2.2 中文文档(四十八)
What’s new in 1.0.5 (June 17, 2020)
这些是 pandas 1.0.5 中的更改。查看 发布说明 获取包括其他 pandas 版本的完整更改日志。
修复的回归问题
请注意,这将再次禁用从 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
修复的回归问题
请注意,这将再次禁用从 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 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的回归,当取最小值或最大值时,会引发而不是返回NaN(GH 33450)。 -
修复了
DataFrameGroupBy.agg()使用字典输入时丢失ExtensionArraydtypes 的回归(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.min或np.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()中的错误会抛出AttributeError(GH 27596) -
DataFrameGroupBy.quantile()和SeriesGroupBy.quantile()中的错误导致当by轴包含NaN时,分位数会发生偏移(GH 33200、GH 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()中字典输入丢失ExtensionArraydtypes 的回归问题(GH 32194) -
修复了在 xarray 的 CFTimeIndex 中保留使用“nearest”方法进行索引的能力的问题,它是
Index的子类(pydata/xarray#3751,GH 32905)。 -
修复了
DataFrame.describe()引发TypeError: unhashable type: 'dict'的回归问题(GH 32409) -
修复了
DataFrame.replace()中的回归问题,如果to_replace中的项目不在值中,则将列转换为objectdtype(GH 32988) -
修复了
Series.groupby()在按PeriodIndex级别分组时引发ValueError的回归问题(GH 34010) -
修复了
DataFrameGroupBy.rolling.apply()和SeriesGroupBy.rolling.apply()忽略 args 和 kwargs 参数的回归问题(GH 33433) -
修复了在无序的
Categorical上使用np.min或np.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 1.0.3 的变化。查看发布说明获取包括其他版本的 pandas 在内的完整更改日志。
修复的回归
贡献者
总共有 5 人为此版本提供了补丁。名字旁边带有“+”的人第一次为此提供了补丁。
-
MeeseeksMachine
-
Pandas 开发团队
-
Tom Augspurger
-
William Ayd
-
jbrockmendel
修复的回归
Bug 修复
贡献者
总共有 5 人为此版本提供了补丁。名字旁边带有“+”的人第一次为此提供了补丁。
-
MeeseeksMachine
-
Pandas 开发团队
-
Tom Augspurger
-
William Ayd
-
jbrockmendel
1.0.2 版的新功能(2020 年 3 月 12 日)
这些是 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) -
修复了从内部操作引发
ValueError的DataFrame.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)
重新索引/对齐
-
修复了当
other是DataFrame且method不是None时Series.align()中的回归 (GH 31785) -
修复了在使用(带时区信息的)索引和
method=nearest重新索引时DataFrame.reindex()和Series.reindex()中的回归 (GH 26683) -
修复了在
DataFrame子类上调用DataFrame.reindex_like()时引发AssertionError的回归 (GH 31925) -
修复了在列不匹配的情况下
DataFrame算术运算中的回归(GH 31623)
其他
-
修复了在
DatetimeIndex或TimedeltaIndex上连接时保留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 的datetime64dtype 没有复制(GH 32490) -
修复了当传递
pd.NA时to_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.NA(GH 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.NA与Series.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).
重新索引/对齐
-
修复了当
other是DataFrame且method不是None时Series.align()的回归问题 (GH 31785) -
在使用(时区感知的)索引和
method=nearest进行重新索引时,DataFrame.reindex()和Series.reindex()中的回归问题 (GH 26683) -
在一个
DataFrame子类上使用DataFrame.reindex_like()引发了AssertionError的回归问题 (GH 31925) -
修复了
DataFrame算术运算中列不匹配的回归问题 (GH 31623)
其他
-
修复了在简单情况下在
DatetimeIndex或TimedeltaIndex上连接时保留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-awaredatetime64dtype 没有复制 (GH 32490) -
修复了
to_datetime()当传递pd.NA时会引发错误的 bug (GH 32213) -
当减去两个结果为越界
Timedelta的Timestamp时,改进了错误消息 (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.NA与DataFrame.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()在Int64dtype 列上引发TypeError的错误(GH 32219)
字符串
- 使用
pd.NA与Series.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 1.0.1 中的变化。查看发行说明以获取包括 pandas 的其他版本在内的完整更改日志。
回归修复
-
修复了使用标签索引而不是位置索引设置切片值的
DataFrame中的回归(例如df[-4:] = 1)(GH 31469)。 -
修复了在使用包含
datetime.date的切片索引DatetimeIndex的Series或DataFrame时的回归(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) -
修复了当选择包含单个
datetime64或timedelta64列的行时DataFrame.loc()和DataFrame.iloc()中的回归问题(GH 31649) -
修复了设置
pd.options.display.max_colwidth时出现的回归问题,不接受负整数。此外,已弃用此行为,推荐使用None(GH 31532) -
修复了 objTOJSON.c 中修复返回类型警告的回归问题(GH 31463)
-
修复了当传递可空整数时
qcut()中的回归问题(GH 31389) -
修复了使用可空整数 dtype 的
Series进行赋值时的回归问题(GH 31446) -
修复了使用标签列表为索引的
DataFrame或Series进行索引时的性能回归问题(GH 31648) -
修复了在文件对象
RawIOBase中使用的read_csv()无法识别encoding选项的回归问题(GH 31575) ## 弃用 -
对于
pd.options.display.max_colwidth的负整数支持已弃用,推荐使用None(GH 31532) ## Bug 修复
日期时间
- 修复了
to_datetime()在cache=True且存在超出范围值时引发错误的 bug (GH 31491)
数值
- 修复了在
DataFrame.__invert__(~运算符)中丢失 dtype 的 bug,混合 dtype 时使用标签而不是位置进行索引,以及对基于扩展数组的Series和DataFrame(GH 23087) (GH 31183)
绘图
- 绘制 tz-aware 时间序列不再产生 UserWarning (GH 31205)
间隔
- 修复了使用
intervaldtype 进行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索引的Series或DataFrame时出现的回归问题 (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()中的回归问题,当选择包含单个datetime64或timedelta64列的行时(GH 31649) -
修复了设置
pd.options.display.max_colwidth不接受负整数的回归问题。此外,已弃用此行为,建议使用None(GH 31532) -
修复了 objTOJSON.c 中的回归问题,修复了返回类型警告(GH 31463)
-
修复了在传递可空整数时
qcut()的回归错误。 (GH 31389) -
修复了在使用可空整数 dtype 分配给
Series时的回归错误 (GH 31446) -
在使用标签列表为索引的
DataFrame或Series进行索引时,性能回归问题已修复 (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__(~操作符) 以及对于由扩展数组支持的Series和DataFrame中丢失 dtypes 的 bug (GH 31183) 已修复
绘图
- 绘图时区感知时间序列不再发出 UserWarning (GH 31205)
区间
Series.shift()中的 bug,使用intervaldtype 并将整数或日期时间的间隔数组进行移位时引发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 1.0.0 中的更改。请参阅发布说明获取包括 pandas 其他版本的完整更新日志。
注意
pandas 1.0 版本删除了在以前版本中已弃用的许多功能(有关概述,请参阅下文)。建议首先升级到 pandas 0.25,并确保您的代码在没有警告的情况下正常工作,然后再升级到 pandas 1.0。
新的弃用策略
从 pandas 1.0.0 开始,pandas 将采用SemVer的一个变体进行版本发布。简而言之,
-
弃用将在次要发布版本中引入(例如 1.1.0,1.2.0,2.1.0,…)
-
弃用将在主要发布版本中实施(例如 1.0.0,2.0.0,3.0.0,…)
-
仅在主要发布版本中进行 API 破坏性更改(除了实验性功能)
更多信息,请参阅版本策略。
增强功能
在rolling.apply和expanding.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.nan 或 None 用于对象 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 数组的几个问题:
-
您可能会意外地将字符串和非字符串的混合存储在对象 dtype 数组中。StringArray 只能存储字符串。
-
objectdtype 会破坏 dtype 特定的操作,例如DataFrame.select_dtypes()。没有明确的方法可以只选择文本而排除非文本,但仍然是对象 dtype 的列。 -
在阅读代码时,对象 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 数组,该列只能容纳True或False,而不能容纳缺失值。这个新的BooleanArray可以通过在单独的掩码中跟踪来存储缺失值。(GH 29555, GH 30095, GH 31131)
In [15]: pd.Series([True, False, None], dtype=pd.BooleanDtype())
Out[15]:
0 True
1 False
2 <NA>
dtype: boolean
你也可以使用别名"boolean"。
In [16]: s = pd.Series([True, False, None], dtype="boolean")
In [17]: s
Out[17]:
0 True
1 False
2 <NA>
dtype: boolean
``` ### 方法`convert_dtypes`以便更轻松地使用支持的扩展数据类型
为了鼓励使用支持`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()现在接受caption和label参数。(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()现在接受vmin和vmax参数。(GH 12145) -
read_excel()现在可以通过传递engine='pyxlsb'来读取二进制 Excel(.xlsb)文件。有关更多详细信息和示例用法,请参阅二进制 Excel 文件文档。关闭了GH 8540。 -
DataFrame.to_parquet()中的partition_cols参数现在接受字符串了(GH 27117) -
pandas.read_json()现在解析NaN、Infinity和-Infinity(GH 12213) -
DataFrame 构造函数保留了
ExtensionArraydtype 与ExtensionArray(GH 11363) -
DataFrame.sort_values()和Series.sort_values()现在增加了ignore_index关键字,可以在排序后重置索引(GH 30114) -
DataFrame.sort_index()和Series.sort_index()现在增加了ignore_index关键字,可以重置索引(GH 30114) -
DataFrame.drop_duplicates()现在增加了ignore_index关键字,可以重置索引(GH 30114) -
添加了新的写入器以导出版本为 118 和 119 的 Stata dta 文件,
StataWriterUTF8。这些文件格式支持导出包含 Unicode 字符的字符串。格式 119 支持包含超过 32,767 个变量的数据集(GH 23573,GH 30959) -
Series.map()现在接受collections.abc.Mapping的子类作为映射器(GH 29733) -
为存储关于数据集的全局元数据添加了一个实验性
attrs(GH 29062) -
Timestamp.fromisocalendar()现在与 python 3.8 及以上版本兼容 (GH 28115) -
DataFrame.to_pickle()和read_pickle()现在接受 URL (GH 30163) ## 反向不兼容的 API 更改
避免使用来自 MultiIndex.levels 的名称
作为对 MultiIndex 的较大重构的一部分,级别名称现在与级别分开存储 (GH 27242)。我们建议使用 MultiIndex.names 访问名称,并使用 Index.set_names() 更新名称。
为了向后兼容,您仍然可以通过级别访问名称。
In [24]: mi = pd.MultiIndex.from_product([[1, 2], ['a', 'b']], names=['x', 'y'])
In [25]: mi.levels[0].name
Out[25]: 'x'
然而,不再可能通过级别更新MultiIndex的名称。
In [26]: mi.levels[0].name = "new name"
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[26], line 1
----> 1 mi.levels[0].name = "new name"
File ~/work/pandas/pandas/pandas/core/indexes/base.py:1690, in Index.name(self, value)
1686 @name.setter
1687 def name(self, value: Hashable) -> None:
1688 if self._no_setting_name:
1689 # Used in MultiIndex.levels to avoid silently ignoring name updates.
-> 1690 raise RuntimeError(
1691 "Cannot set name on a level of a MultiIndex. Use "
1692 "'MultiIndex.set_names' instead."
1693 )
1694 maybe_extract_name(value, None, type(self))
1695 self._name = value
RuntimeError: Cannot set name on a level of a MultiIndex. Use 'MultiIndex.set_names' instead.
In [27]: mi.names
Out[27]: FrozenList(['x', 'y'])
要更新,请使用MultiIndex.set_names,它返回一个新的MultiIndex。
In [28]: mi2 = mi.set_names("new name", level=0)
In [29]: mi2.names
Out[29]: FrozenList(['new name', 'y'])
IntervalArray 的新 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):
-
字符串数据(包括缺失值)现在返回
arrays.StringArray。 -
整数数据(包括缺失值)现在返回
arrays.IntegerArray。 -
布尔数据(包括缺失值)现在返回新的
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_value 的 arrays.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.nan(GH 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.NA 和 numpy.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,以使其与DataFrame和Index的行为一致。
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)
这修复了resample和groupby之间的不一致性。 这也修复了一个潜在的 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,数组arr,idx中的值idx_val和新值val,idx.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.plot 或 matplotlib.Axes.plot 绘制日期类似对象时的情况。更多信息请参见用于时间序列绘图的自定义格式化程序。
其他删除
-
从
read_stata(),StataReader和StataReader.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现在会引发TypeError(GH 21036) -
TimedeltaIndex和DatetimeIndex不再接受非纳秒 dtype 字符串,如“timedelta64”或“datetime64”,请改用“timedelta64[ns]”和“datetime64[ns]”(GH 24806) -
将
pandas.api.types.infer_dtype()中默认的“skipna”参数从False更改为True(GH 24050) -
删除了
Series.ix和DataFrame.ix(GH 26438) -
删除了
Index.summary(GH 18217) -
从
Index构造函数中删除了先前不推荐使用的关键字“fastpath”(GH 23110) -
删除了
Series.get_value,Series.set_value,DataFrame.get_value,DataFrame.set_value(GH 17739) -
删除了
Series.compound和DataFrame.compound(GH 26405) -
将
DataFrame.set_index()和Series.set_axis()中默认的“inplace”参数从None更改为False(GH 27600) -
删除了
Series.cat.categorical,Series.cat.index,Series.cat.name(GH 24751) -
从
to_datetime()和to_timedelta()中删除了先前不推荐使用的关键字“box”;此外,这些现在始终返回DatetimeIndex、TimedeltaIndex、Index、Series或DataFrame(GH 24486) -
to_timedelta()、Timedelta和TimedeltaIndex不再允许“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数据传递给TimedeltaIndex或timedelta64数据传递给DatetimeIndex现在会引发TypeError(GH 23539、GH 23937) -
将
int64值传递给DatetimeIndex并且传递时区时,现在会将值解释为 UTC 中的纳秒时间戳,而不是给定时区中的墙上时间(GH 24559) -
传递给
DataFrame.groupby()的元组现在被专门视为单个键(GH 18314) -
移除了
Index.contains,改用key in index(GH 30103) -
不再允许在
Timestamp、DatetimeIndex、TimedeltaIndex中进行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_matrix、Series.as_matrix(GH 18458) -
移除了
Series.asobject(GH 18477) -
移除了
DataFrame.as_blocks、Series.as_blocks、DataFrame.blocks、Series.blocks(GH 17656) -
pandas.Series.str.cat()现在默认对齐others,使用join='left'(GH 27611) -
pandas.Series.str.cat()不再接受列表形式的嵌套列表了(GH 27611) -
Series.where()在Categorical数据类型上(或者在具有Categorical列的DataFrame.where())不再允许设置新的分类(GH 24114) -
从
DatetimeIndex、TimedeltaIndex、PeriodIndex构造器中移除了先前弃用的关键字 “start”、“end” 和 “periods”,请使用date_range()、timedelta_range()和period_range()替代 (GH 23919) -
从
DatetimeIndex和TimedeltaIndex构造器中移除了先前弃用的关键字 “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改为True(GH 23739) -
移除了
api.types.is_period和api.types.is_datetimetz(GH 23917) -
移除了对使用 pandas 0.16 之前版本创建的包含
Categorical实例的 pickle 的读取支持(GH 27538) -
移除了
pandas.tseries.plotting.tsplot(GH 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_tuple(GH 29305) -
在
DataFrame.aggregate(),Series.aggregate(),core.groupby.DataFrameGroupBy.aggregate(),core.groupby.SeriesGroupBy.aggregate(),core.window.rolling.Rolling.aggregate()中移除了对嵌套重命名的支持(GH 29608) -
移除了
Series.valid;使用Series.dropna()代替(GH 18800) -
移除了
DataFrame.is_copy,Series.is_copy(GH 18812) -
移除了
DataFrame.get_ftype_counts,Series.get_ftype_counts(GH 18243) -
移除了
DataFrame.ftypes,Series.ftypes,Series.ftype(GH 26744) -
移除了
Index.get_duplicates,使用idx[idx.duplicated()].unique()代替(GH 20239) -
移除了
Series.clip_upper,Series.clip_lower,DataFrame.clip_upper,DataFrame.clip_lower(GH 24203) -
移除了更改
DatetimeIndex.freq,TimedeltaIndex.freq,或PeriodIndex.freq的能力(GH 20772) -
移除了
DatetimeIndex.offset(GH 20730) -
移除了
DatetimeIndex.asobject,TimedeltaIndex.asobject,PeriodIndex.asobject,使用astype(object)代替(GH 29801) -
从
factorize()中移除了先前弃用的关键字“order”(GH 19751) -
从
read_stata()和DataFrame.to_stata()中移除了先前弃用的关键字“encoding”(GH 21400) -
将
concat()中的默认“sort”参数从None更改为False(GH 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()会引发TypeError(GH 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_counts和DataFrame.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.datetime或Timestamp传递给具有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) -
在具有时区信息的
Series和DatetimeIndex上调用np.array和np.asarray现在会返回一个具有时区信息的Timestamp对象数组(GH 24596) ## 性能改进 -
与非唯一
IntervalIndex进行索引时的性能改进(GH 27489) -
MultiIndex.is_monotonic的性能改进(GH 27495) -
当
bins是IntervalIndex时,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()中改进了性能,当skipna为True时(GH 28814) ## Bug 修复
Categorical
-
添加了测试以断言
fillna()在值不是类别中的值时会引发正确的ValueError消息(GH 13628) -
在
Categorical.astype()中存在错误,当转换为整数时,NaN值处理不正确(GH 28406) -
当目标包含重复项时,使用
CategoricalIndex的DataFrame.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”参数时,可能会错误地引发ValueError(GH 28299) -
在
core.groupby.SeriesGroupBy.nunique()中存在一个错误,其中NaT值干扰了唯一值的计数(GH 27951) -
在
Timestamp减法中,从np.datetime64对象中减去一个Timestamp会错误地引发TypeError(GH 28286) -
使用
Timestamp进行整数或整数 dtype 数组的加法和减法现在会引发NullFrequencyError而不是ValueError(GH 28268) -
在
Series和DataFrame中存在一个错误,当添加或减去一个np.datetime64对象时,整数 dtype 未能引发TypeError(GH 28080) -
在
Series.astype()、Index.astype()和DataFrame.astype()中存在一个错误,当转换为整数 dtype 时未能处理NaT(GH 28492) -
在
Week中存在一个错误,当添加或减去无效类型时,weekday错误地引发AttributeError而不是TypeError(GH 28530) -
在
DataFrame的算术操作中,当与 dtype 为'timedelta64[ns]'的Series进行操作时存在一个错误(GH 28049) -
在
core.groupby.generic.SeriesGroupBy.apply()中存在一个错误,当原始 DataFrame 中的列是 datetime 且列标签不是标准整数时,会引发ValueError(GH 28247) -
在
pandas._config.localization.get_locales()中的错误,locales -a将地区编码为 windows-1252(GH 23638,GH 24760,GH 27368) -
使用
timedelta64[ns]类型调用时未引发TypeError的错误Series.var()(GH 28289) -
内联代码
DatetimeIndex.strftime()和Series.dt.strftime()中的错误,将NaT转换为字符串'NaT'而不是np.nan(GH 29578) -
使用长度不正确的布尔掩码遮盖类似日期时间的数组时未引发
IndexError的错误(GH 30308) -
Timestamp.resolution为属性而不是类属性的错误(GH 29910) -
调用
None时pandas.to_datetime()报TypeError而不是返回NaT的错误(GH 30011) -
使用
deque对象时pandas.to_datetime()在使用cache=True(默认)时未成功转换的错误(GH 29403) -
对于具有
datetime64或timedelta64类型的Series.item(),DatetimeIndex.item()和TimedeltaIndex.item()返回整数而不是Timestamp或Timedelta的错误(GH 30175) -
在添加非优化的
DateOffset时DatetimeIndex错误地删除时区信息(GH 30336) -
在尝试删除不存在的值时
DataFrame.drop()从 DatetimeIndex 中产生令人困惑的错误消息(GH 30399) -
DataFrame.append()中的一个 bug 会移除新数据的时区感知性(GH 30238) -
Series.cummin()和Series.cummax()中的一个 bug,具有时区感知 dtype 的错误删除其时区信息(GH 15553) -
DatetimeArray、TimedeltaArray和PeriodArray中的一个 bug,就地加法和减法实际上并未就地操作(GH 24115) -
在使用存储
IntegerArray的Series调用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对象中减去TimedeltaIndex或TimedeltaArray的一个 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 的)实例化
Int64Index、UInt64Index或Float64Index(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错误地引发TypeError(GH 30063) -
当存在重复索引时,
Series.pct_change()和DataFrame.pct_change()存在漏洞(GH 30463) -
在
DataFrame累积操作(例如 cumsum, cummax)时存在漏洞,将不正确地转换为对象 dtype(GH 19296) -
在
diff中存在漏洞导致扩展类型的 dtype 丢失(GH 30889) -
当其中一列是可空整数 dtype 时,
DataFrame.diff存在漏洞会引发IndexError(GH 30967)
转换
字符串
- 对于空的
Series调用Series.str.isalnum()(以及其他“ismethods”),会返回objectdtype 而不是bool(GH 29624)
区间
-
在
IntervalIndex.get_indexer()中存在漏洞,当Categorical或CategoricalIndextarget错误地引发TypeError(GH 30063) -
在
pandas.core.dtypes.cast.infer_dtype_from_scalar中存在漏洞,当传递pandas_dtype=True时没有推断出IntervalDtype(GH 30337) -
修复了
Series构造函数中,从Interval对象列表构造Series导致objectdtype 而不是IntervalDtype的错误(GH 23563) -
修复了
IntervalDtype中kind属性错误地设置为None而不是"O"的错误(GH 30568) -
修复了具有间隔数据的
IntervalIndex、IntervalArray和Series中相等比较错误的错误(GH 24112)
索引
-
修复了使用反向切片进行赋值时的错误(GH 26939)
-
修复了
DataFrame.explode()在索引中存在重复项时会复制框架的错误(GH 28010) -
修复了使用其他类型索引重新索引
PeriodIndex()时出现的错误,该索引包含了一个Period(GH 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值的数量匹配且新数据不是Series或np.array时错误地分配值 (GH 30567) -
使用
PeriodIndex进行索引时的错误,错误地接受代表年份的整数,应使用ser.loc["2007"]而不是ser.loc[2007](GH 30763)
缺失
MultiIndex
-
构造函数
MultiIndex验证给定的sortorder是否与实际的lexsort_depth兼容,如果verify_integrity参数为True(默认)(GH 28735) -
Series 和 MultiIndex
.drop与MultiIndex在给定级别上不存在标签时会引发异常 (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()无法与 dtypeInt64一起使用(GH 28869) -
Bug in
DataFrame.to_clipboard()在 ipython 中不可靠(GH 22707) -
Bug in
read_json()中默认编码未设置为utf-8(GH 29565) -
Bug in
PythonParser处理十进制字段时混合使用 str 和 bytes(GH 29650) -
read_gbq()现在接受progress_bar_type参数,在数据下载时显示进度条。(GH 29857) -
在
pandas.io.json.json_normalize()中存在错误,当record_path指定的位置缺失值时会引发TypeError(GH 30148) -
read_excel()现在接受二进制数据(GH 15914) -
read_csv()中存在错误,其中编码处理仅限于 C 引擎的字符串utf-16(GH 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 27686,GH 25160,GH 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()绘制objects和datetime类型的数据(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 会引发IndexError(GH 20519)。 -
Resampler.size()和Resampler.count()在与空的Series或DataFrame结合使用时返回错误的 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()中存在的错误,any、all、nunique和 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_method为None时导致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=True且aggfunc='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_vars或value_vars提供混合字符串和数值时,会错误地引发ValueError(GH 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
其他
-
尝试使用
set_option()设置display.precision、display.max_rows或display.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) -
在使用空列表附加时引发
IndexError的DataFrame.append()中的错误被修复(GH 28769) -
修复
AbstractHolidayCalendar在 2030 年后返回正确结果的问题(现在扩展到 2200 年)(GH 27790) -
修复了
IntegerArray对除以0的操作返回inf而不是NaN的问题(GH 27398) -
当另一个值为
0或1时,修复了pow操作对IntegerArray的影响(GH 29997) -
在启用
use_inf_as_na时,Series.count()引发异常(GH 29478) -
在
Index中的错误,非可哈希名称可以设置而不引发TypeError(GH 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()中处理嵌套的 NumPyobject数组,用于 ExtensionArray 实现(GH 30841)
共有 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.apply和expanding.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.nan 或 None 用于 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 数组的几个问题:
-
在
object数据类型的数组中,你可能会意外地存储字符串和非字符串的混合体。而StringArray只能存储字符串。 -
objectdtype 破坏了特定于 dtype 的操作,例如DataFrame.select_dtypes()。没有明确的方法可以仅选择文本而排除非文本但仍为 object-dtype 列。 -
当阅读代码时,
objectdtype 数组的内容不如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数据类型,列只能保存True或False,而不能保存缺失值。这个新的BooleanArray也可以通过在一个单独的掩码中跟踪来存储缺失值。 (GH 29555, GH 30095, GH 31131)
In [15]: pd.Series([True, False, None], dtype=pd.BooleanDtype())
Out[15]:
0 True
1 False
2 <NA>
dtype: boolean
您也可以使用别名"boolean"。
In [16]: s = pd.Series([True, False, None], dtype="boolean")
In [17]: s
Out[17]:
0 True
1 False
2 <NA>
dtype: boolean
```### 方法`convert_dtypes`以便于使用支持的扩展数据类型
为了鼓励使用支持`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.nan或None用于对象类型数据,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 数组的几个问题:
-
你可能会在对象类型数组中意外存储混合的字符串和非字符串。
StringArray只能存储字符串。 -
object数据类型会破坏特定于数据类型的操作,比如DataFrame.select_dtypes()。没有明确的方法可以仅选择文本而排除非文本,但仍然是对象类型的列。 -
在阅读代码时,对象类型数组的内容不如
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 数组,该列只能保存True或False,而不能是缺失值。这个新的BooleanArray也可以通过在单独的掩码中跟踪这些值来存储缺失值。(GH 29555, GH 30095, GH 31131)
In [15]: pd.Series([True, False, None], dtype=pd.BooleanDtype())
Out[15]:
0 True
1 False
2 <NA>
dtype: boolean
你也可以使用别名"boolean"。
In [16]: s = pd.Series([True, False, None], dtype="boolean")
In [17]: s
Out[17]:
0 True
1 False
2 <NA>
dtype: boolean
convert_dtypes方法简化了对支持的扩展数据类型的使用
为了鼓励使用支持pd.NA的扩展数据类型StringDtype、BooleanDtype、Int64Dtype、Int32Dtype等,引入了DataFrame.convert_dtypes()和Series.convert_dtypes()方法。(GH 29752) (GH 30929)
例如:
In [18]: df = pd.DataFrame({'x': ['abc', None, 'def'],
....: 'y': [1, 2, np.nan],
....: 'z': [True, False, True]})
....:
In [19]: df
Out[19]:
x y z
0 abc 1.0 True
1 None 2.0 False
2 def NaN True
In [20]: df.dtypes
Out[20]:
x object
y float64
z bool
dtype: object
In [21]: converted = df.convert_dtypes()
In [22]: converted
Out[22]:
x y z
0 abc 1 True
1 <NA> 2 False
2 def <NA> True
In [23]: converted.dtypes
Out[23]:
x string[python]
y Int64
z boolean
dtype: object
在使用类似read_csv()和read_excel()这样的读取器读取数据后,这尤其有用。请参阅此处了解详细描述。
其他增强功能
-
DataFrame.to_string()添加了max_colwidth参数,用于控制何时截断宽列(GH 9784) -
将
na_value参数添加到Series.to_numpy()、Index.to_numpy()和DataFrame.to_numpy(),以控制用于缺失数据的值(GH 30322) -
MultiIndex.from_product()如果未明确提供,则从输入中推断级别名称(GH 27292) -
DataFrame.to_latex()现在接受caption和label参数(GH 25436) -
具有可空整数、新字符串数据类型和周期数据类型的数据帧现在可以转换为
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()现在接受vmin和vmax参数(GH 12145) -
Styler.format()现在添加了na_rep参数,以帮助格式化缺失值(GH 21527,GH 28358) -
read_excel()现在可以通过传递engine='pyxlsb'来读取二进制 Excel(.xlsb)文件。有关更多详情和示例用法,请参阅二进制 Excel 文件文档。关闭 GH 8540。 -
在
DataFrame.to_parquet()中,partition_cols参数现在接受一个字符串(GH 27117) -
pandas.read_json()现在解析NaN、Infinity和-Infinity(GH 12213) -
DataFrame 构造函数保留了与
ExtensionArray的dtype相同的ExtensionArray(GH 11363) -
DataFrame.sort_values()和Series.sort_values()现在具有ignore_index关键字以在排序后重置索引(GH 30114) -
DataFrame.sort_index()和Series.sort_index()现在具有ignore_index关键字来重置索引(GH 30114) -
DataFrame.drop_duplicates()现在具有ignore_index关键字来重置索引(GH 30114) -
添加了一个新的写入器用于导出版本为 118 和 119 的 Stata dta 文件,
StataWriterUTF8。这些文件格式支持导出包含 Unicode 字符的字符串。格式 119 支持具有超过 32,767 个变量的数据集(GH 23573, GH 30959) -
Series.map()现在接受collections.abc.Mapping子类作为映射器(GH 29733) -
添加了一个实验性的
attrs来存储关于数据集的全局元数据(GH 29062) -
Timestamp.fromisocalendar()现在兼容 Python 3.8 及以上版本(GH 28115) -
DataFrame.to_pickle()和read_pickle()现在接受 URL(GH 30163)
向后不兼容的 API 更改
避免使用来自MultiIndex.levels的名称
作为对MultiIndex的较大重构的一部分,级别名称现在与级别分开存储(GH 27242)。我们建议使用MultiIndex.names来访问名称,并使用Index.set_names()来更新名称。
为了向后兼容,您仍然可以通过 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):
-
字符串数据(包括缺失值)现在返回
arrays.StringArray。 -
整数数据(包括缺失值)现在返回
arrays.IntegerArray。 -
布尔数据(包括缺失值)现在返回新的
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_value的arrays.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.nan(GH 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.NA和numpy.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现在会引发DeprecationWarning(GH 17261)。默认数据类型将在未来版本中从float64更改为object,以使其与DataFrame和Index的行为保持一致。
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)
这修复了resample和groupby之间的不一致性。这也修复了一个潜在的 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 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 自定义格式化程序只会应用于通过plot()创建的绘图。以前,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 数据集的查询多索引的子节(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):
-
字符串数据(包括缺失值)现在返回
arrays.StringArray。 -
整数数据(包括缺失值)现在返回
arrays.IntegerArray。 -
布尔数据(包括缺失值)现在返回新的
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_value的arrays.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.nan(GH 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.NA和numpy.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.nan(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
初始化一个空的 pandas.Series,如果不指定 dtype,现在将引发 DeprecationWarning (GH 17261)。默认的 dtype 将在未来版本中从 float64 更改为 object,以保持与 DataFrame 和 Index 的行为一致。
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)
这修复了 resample 和 groupby 之间的不一致性。这也修复了一个潜在的 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 28341,GH 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._deprecations(GH 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)
文档改进
弃用
-
Series.item()和Index.item()已被 _ 取消弃用 _ (GH 29250) -
Index.set_value已被弃用。对于给定的索引idx、数组arr、idx中的idx_val值和新值val,idx.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)。我们建议改用具有稀疏值的Series或DataFrame。
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.plot或matplotlib.Axes.plot绘制日期样式对象时。更多信息请参见用于时间序列图的自定义格式化程序。
其他移除
-
从
read_stata(),StataReader和StataReader.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 除现在会引发TypeError(GH 21036) -
TimedeltaIndex和DatetimeIndex不再接受“timedelta64”或“datetime64”等非纳秒 dtype 字符串,改用“timedelta64[ns]”和“datetime64[ns]”(GH 24806) -
将
pandas.api.types.infer_dtype()中默认的“skipna”参数从False更改为True(GH 24050) -
移除了
Series.ix和DataFrame.ix(GH 26438) -
移除了
Index.summary(GH 18217) -
从
Index构造函数中移除了先前废弃的关键字“fastpath”(GH 23110) -
移除了
Series.get_value、Series.set_value、DataFrame.get_value、DataFrame.set_value(GH 17739) -
移除了
Series.compound和DataFrame.compound(GH 26405) -
将
DataFrame.set_index()和Series.set_axis()中默认的“inplace”参数从None更改为False(GH 27600) -
移除了
Series.cat.categorical、Series.cat.index、Series.cat.name(GH 24751) -
从
to_datetime()和to_timedelta()中移除了先前废弃的关键字“box”;另外,现在这些函数总是返回DatetimeIndex、TimedeltaIndex、Index、Series或DataFrame(GH 24486) -
to_timedelta()、Timedelta和TimedeltaIndex不再允许“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数据传递给TimedeltaIndex或timedelta64数据传递给DatetimeIndex现在会引发TypeError(GH 23539, GH 23937) -
将
int64值传递给DatetimeIndex和时区现在将值解释为 UTC 中的纳秒时间戳,而不是给定时区中的墙时间(GH 24559) -
传递���
DataFrame.groupby()的元组现在被专门视为单个键 (GH 18314) -
移除了
Index.contains,应该使用key in index代替 (GH 30103) -
在
Timestamp、DatetimeIndex、TimedeltaIndex中不再允许对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_matrix,Series.as_matrix(GH 18458) -
移除了
Series.asobject(GH 18477) -
移除了
DataFrame.as_blocks,Series.as_blocks,DataFrame.blocks,Series.blocks(GH 17656) -
pandas.Series.str.cat()现在默认对齐others,使用join='left'(GH 27611) -
pandas.Series.str.cat()不再接受列表样式内部的列表样式了 (GH 27611) -
使用
Categoricaldtype 的Series.where()(或者使用Categorical列的DataFrame.where())不再允许设置新的类别 (GH 24114) -
从
DatetimeIndex、TimedeltaIndex和PeriodIndex构造函数中删除了先前弃用的关键字“start”、“end”和“periods”,改用date_range()、timedelta_range()和period_range()代替(GH 23919) -
从
DatetimeIndex和TimedeltaIndex构造函数中删除了先前弃用的关键字“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)
-
不再允许将 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更改为True(GH 23739) -
移除了
api.types.is_period和api.types.is_datetimetz(GH 23917) -
不再支持读取包含使用 pandas 0.16 之前版本创建的
Categorical实例的 pickle 文件(GH 27538) -
移除了
pandas.tseries.plotting.tsplot(GH 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_tuple(GH 29305) -
移除了在
DataFrame.aggregate(),Series.aggregate(),core.groupby.DataFrameGroupBy.aggregate(),core.groupby.SeriesGroupBy.aggregate(),core.window.rolling.Rolling.aggregate()中不再支持嵌套重命名(GH 29608) -
移除了
Series.valid;请使用Series.dropna()代替(GH 18800) -
移除了
DataFrame.is_copy,Series.is_copy(GH 18812) -
移除了
DataFrame.get_ftype_counts,Series.get_ftype_counts(GH 18243) -
移除了
DataFrame.ftypes,Series.ftypes,Series.ftype([GH 26744](https://github.com/pandas-dev/pandas/issues/26744) -
移除了
Index.get_duplicates,请使用idx[idx.duplicated()].unique()代替(GH 20239) -
移除了
Series.clip_upper,Series.clip_lower,DataFrame.clip_upper,DataFrame.clip_lower(GH 24203) -
移除了修改
DatetimeIndex.freq,TimedeltaIndex.freq或PeriodIndex.freq的能力(GH 20772) -
移除了
DatetimeIndex.offset(GH 20730) -
移除了
DatetimeIndex.asobject,TimedeltaIndex.asobject,PeriodIndex.asobject,请使用astype(object)代替(GH 29801) -
从
factorize()中删除了先前弃用的关键字“order”(GH 19751) -
从
read_stata()和DataFrame.to_stata()中删除了先前弃用的关键字“encoding”(GH 21400) -
将
concat()中的默认“sort”参数从None更改为False(GH 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()会引发TypeError(GH 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.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’方法,例如
np.subtract.outer在Series对象上的操作不再支持,并将引发NotImplementedError(GH 27198) -
移除了
Series.get_dtype_counts和DataFrame.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](https://github.com/pandas-dev/pandas/issues/20584) -
移除了
Series.argmin()和Series.argmax()的弃用行为,现在使用Series.idxmin()和Series.idxmax()来获得旧行为(GH 16955) -
将带有时区信息的
datetime.datetime或Timestamp传递给带有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) -
现在,在 tz-aware 的
Series和DatetimeIndex上调用np.array和np.asarray将返回 tz-aware 的Timestamp对象数组(GH 24596)
性能提升
-
在使用非唯一的
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()中,当skipna为True时性能有所提升(GH 28814)
Bug 修复
分类
-
添加了测试以确保
fillna()在值不是类别中的值时引发正确的ValueError消息(GH 13628) -
修复了
Categorical.astype()中处理NaN值时转换为整数时的错误(GH 28406) -
当目标包含重复项时,使用
CategoricalIndex的DataFrame.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数组可能会错误地引发ValueError(GH 28299)。 -
在
core.groupby.SeriesGroupBy.nunique()中存在一个错误,NaT值干扰了唯一值的计数(GH 27951)。 -
在
Timestamp减法中,当从np.datetime64对象中减去Timestamp时,错误地引发TypeError(GH 28286)。 -
现在,对带有
Timestamp的整数或整数类型数组的加法和减法将引发NullFrequencyError而不是ValueError(GH 28268)。 -
当对整数类型的
Series和DataFrame添加或减去np.datetime64对象时,会失败地引发TypeError,存在一个错误(GH 28080)。 -
在
Series.astype()、Index.astype()和DataFrame.astype()中存在一个错误,当转换为整数类型时未能处理NaT(GH 28492)。 -
在
Week中存在一个错误,当添加或减去无效类型时,weekday会错误地引发AttributeError而不是TypeError(GH 28530)。 -
在操作带有
'timedelta64[ns]'类型的Series时,DataFrame的算术运算存在一个错误(GH 28049)。 -
在
core.groupby.generic.SeriesGroupBy.apply()中存在一个错误,在原始 DataFrame 中的某一列是日期时间,并且列标签不是标准整数时,会引发ValueError(GH 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) -
在调用带有
datetime64或timedelta64数据类型时,Series.item()、DatetimeIndex.item()和TimedeltaIndex.item()函数返回整数而不是Timestamp或Timedelta(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) -
在
DatetimeArray、TimedeltaArray和PeriodArray中存在一个 bug,就地加法和减法实际上没有就地操作 (GH 24115) -
在调用时存在一个 bug,在存储
IntegerArray的Series上调用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对象减去TimedeltaIndex或TimedeltaArray时存在一个 bug (GH 29558)
时区
数值
-
在
DataFrame.quantile()函数中存在一个 bug,当零列DataFrame时,错误地触发异常 (GH 23925) -
DataFrame灵活的不等比较方法(DataFrame.lt()、DataFrame.le()、DataFrame.gt()、DataFrame.ge())与对象 dtype 和complex条目失败,未像它们的Series对应物那样引发TypeError(GH 28079) -
DataFrame逻辑操作(&、|、^)中的错误,未像Series那样通过填充 NA 值匹配行为(GH 28741) -
DataFrame.interpolate()中的错误,指定轴名称引用变量之前未分配(GH 29142) -
Series.var()中的错误,当传递一个可空整数 dtype 序列时,未通过 ddof 参数计算正确的值(GH 29128) -
当使用
frac> 1 和replace= False 时,改进了错误消息(GH 27451) -
数值索引中的错误导致可以用无效 dtype(例如类似日期时间的)实例化
Int64Index、UInt64Index或Float64Index(GH 29539) -
UInt64Index在从值在np.uint64范围内的列表构造时存在精度丢失的错误(GH 29526) -
NumericIndex构造中的错误导致当使用np.uint64范围内的整数时索引失败(GH 28023) -
NumericIndex构造中的错误导致当使用np.uint64范围内的整数索引DataFrame时,UInt64Index被转换为Float64Index(GH 28279) -
在使用未排序索引的情况下,使用 method=
index时的Series.interpolate()存在错误,之前会返回不正确的结果(GH 21037) -
DataFrame.round()中的错误,其中具有CategoricalIndex的DataFrame的IntervalIndex列会错误地引发TypeError(GH 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”)将返回objectdtype 而不是bool(GH 29624)
区间
-
在
IntervalIndex.get_indexer()中的错误,其中Categorical或CategoricalIndex的target会错误地引发TypeError(GH 30063) -
在
pandas.core.dtypes.cast.infer_dtype_from_scalar中存在的错误,传递pandas_dtype=True时未推断出IntervalDtype(GH 30337) -
Series构造函数中的错误,从一个Interval对象的list构造一个Series导致object类型而不是IntervalDtype(GH 23563) -
IntervalDtype中的错误,其中kind属性错误地设置为None而不是"O"(GH 30568) -
具有间隔数据的
IntervalIndex、IntervalArray和Series中的错误,其中等式比较不正确 (GH 24112)
索引
-
使用反向切片进行赋值的错误 (GH 26939)
-
DataFrame.explode()中的错误会在索引中存在重复时重复帧 (GH 28010) -
重新索引一个包含
Period的PeriodIndex()与包含其他类型的索引的错误 (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而不是KeyError(GH 29189) -
在设置 1 行 DataFrame 中的分类值时,
DataFrame.loc()中出现的 dtype 不正确的错误(GH 25495) -
当输入包含缺失值时,
MultiIndex.get_loc()无法找到缺失值(GH 19132) -
在长度与
True值的数量匹配且新数据不是Series或np.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()中存在一个错误,无法处理dtype为Int64的数据(GH 28869) -
在
DataFrame.to_clipboard()中存在一个错误,它在 ipython 中无法可靠工作(GH 22707) -
在
read_json()中存在一个错误,默认编码未设置为utf-8(GH 29565) -
在
PythonParser中存在一个错误,当处理十进制字段时,字符串和字节会混合在一起(GH 29650) -
read_gbq()现在接受progress_bar_type参数,在数据下载时显示进度条。(GH 29857) -
在
pandas.io.json.json_normalize()中存在一个 bug,在record_path指定的位置缺少值会引发TypeError(GH 30148) -
read_excel()现在接受二进制数据(GH 15914) -
在
read_csv()中存在一个 bug,其编码处理仅限于 C 引擎中的字符串utf-16(GH 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()绘制objects和datetime类型的数据 (GH 18755, GH 30391) -
DataFrame.hist()中的 bug,xrot=0与by和子图不兼容 (GH 30288).
GroupBy/resample/rolling
-
core.groupby.DataFrameGroupBy.apply()中的 bug 只显示单个组的输出,当函数返回一个Index时 (GH 28652) -
当多个组中的任何一个组含有所有 NA 值时,
DataFrame.groupby()中出现的 bug 引发IndexError(GH 20519) -
当与空的
Series或DataFrame一起使用时,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()中存在错误,any、all、nunique和转换函数会错误处理重复的列标签(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_method为None时,DataFrameGroupBy.pct_change()和SeriesGroupBy.pct_change()中的错误导致TypeError(GH 30463) -
在
Rolling.count()和Expanding.count()参数中,min_periods被忽略的错误(GH 26996)
重塑
-
DataFrame.apply()中的错误,导致空的DataFrame输出不正确(GH 28202, GH 21959) -
在创建 MultiIndex 时,
DataFrame.stack()中的错误未正确处理非唯一索引(GH 28301) -
pivot_table()中的错误,在margins=True和aggfunc='mean'时未返回正确的类型float(GH 24893) -
merge_asof()中修复了无法使用datetime.timedelta作为tolerancekwarg 的问题(GH 28098) -
merge()中出现的问题已修复,与 MultiIndex 一起时未正确追加后缀(GH 28518) -
qcut()和cut()现在可以处理布尔值输入(GH 20303) -
确保在使用容差值时,所有 int dtypes 都可以在
merge_asof()中使用。之前,每个非 int64 类型都会引发错误的MergeError(GH 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_vars或value_vars提供混合字符串和数值的情况下,melt()中出现的问题已修复,错误地引发ValueError(GH 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) -
修复了带有布尔型
SparseArray的operator.xor()。现在返回稀疏结果,而不是对象类型 (GH 31025)
ExtensionArray
其他
-
尝试使用
set_option()设置display.precision、display.max_rows或display.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) -
当另一个值为
0或1时,已修复了IntegerArray的pow操作(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()中的嵌套 NumPyobject数组,用于 ExtensionArray 实现 (GH 30841)
分类
-
添加测试以确保当值不是来自类别时,
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数组可能错误地导致引发ValueError(GH 28299) -
在
core.groupby.SeriesGroupBy.nunique()中的 Bug,NaT值干扰了唯一值的计数(GH 27951) -
在
Timestamp减法中,从Timestamp减去np.datetime64对象时错误地引发TypeError(GH 28286) -
使用
Timestamp进行整数或整数 dtype 数组的加法和减法现在将引发NullFrequencyError而不是ValueError(GH 28268) -
在
Series和DataFrame中的 Bug,整数 dtype 未能在添加或减去np.datetime64对象时引发TypeError(GH 28080) -
在
Series.astype()、Index.astype()和DataFrame.astype()中的 Bug,当转换为整数 dtype 时未能处理NaT(GH 28492) -
在
Week中的 Bug,当添加或减去无效类型时,weekday错误地引发AttributeError而不是TypeError(GH 28530) -
在
DataFrame进行算术运算时,与 dtype 为'timedelta64[ns]'的Series进行操作时的 Bug(GH 28049) -
在
core.groupby.generic.SeriesGroupBy.apply()中的 Bug 导致当原始 DataFrame 中的列是日期时间且列标签不是标准整数时引发ValueError(GH 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()函数在使用datetime64或timedelta64类型、DatetimeIndex.item()和TimedeltaIndex.item()返回整数而不是Timestamp或Timedelta的 Bug(GH 30175) -
在将非优化的
DateOffset添加到DatetimeIndex时错误地丢弃时区信息的 Bug(GH 30336) -
DataFrame.drop()函数尝试从 DatetimeIndex 中删除不存在的值时会产生令人困惑的错误消息的 Bug(GH 30399) -
DataFrame.append()中的错误会移除新数据的时区感知性 (GH 30238) -
Series.cummin()和Series.cummax()中的错误,具有时区感知的数据类型错误地删除其时区 (GH 15553) -
DatetimeArray、TimedeltaArray和PeriodArray中的错误,就地加法和减法实际上没有就地操作 (GH 24115) -
pandas.to_datetime()在使用存储IntegerArray的Series时提出TypeError而不是返回Series的错误 (GH 30050) -
date_range()中的错误,使用自定义工作时间作为freq并给定periods的数量 (GH 30593) -
PeriodIndex比较中的错误,将整数错误地转换为Period对象,与Period比较行为不一致 (GH 30722) -
DatetimeIndex.insert()中的错误,在尝试将具有时区感知的Timestamp插入时区不感知的DatetimeIndex或反之时提出ValueError而不是TypeError(GH 30806)
时间间隔
- 从
TimedeltaIndex或TimedeltaArray减去np.datetime64对象的错误 (GH 29558)
时区
数字
-
DataFrame.quantile()中的错误,使用零列DataFrame错误地提出(GH 23925) -
DataFrame灵活的不等比较方法(DataFrame.lt()、DataFrame.le()、DataFrame.gt()、DataFrame.ge())与对象类型和complex条目一起失败,未像它们的Series对应物那样引发TypeError(GH 28079) -
在
DataFrame逻辑操作(&、|、^)中存在错误,不像Series那样通过填充 NA 值来匹配行为(GH 28741) -
在
DataFrame.interpolate()中存在错误,指定轴名称引用变量之前未分配(GH 29142) -
在
Series.var()中存在错误,未通过ddof参数计算具有可空整数 dtype 系列的正确值(GH 29128) -
当使用
frac> 1 且replace= False 时,改进了错误消息(GH 27451) -
数值索引中存在错误,导致可以用无效 dtype(例如类似日期时间的)实例化
Int64Index、UInt64Index或Float64Index(GH 29539) -
在从值在
np.uint64范围内的列表构造时,UInt64Index存在精度丢失的错误(GH 29526) -
在使用
np.uint64范围内的整数时,NumericIndex构造中存在导致索引失败的错误(GH 28023) -
在使用
np.uint64范围内的整数索引DataFrame时,导致NumericIndex构造中存在错误,将UInt64Index转换为Float64Index(GH 28279) -
当使用
method=index且索引未排序时,在Series.interpolate()中存在错误,之前会返回不正确的结果(GH 21037) -
在
DataFrame.round()中的错误,其中具有CategoricalIndex的DataFrame的IntervalIndex列将错误地引发TypeError(GH 30063) -
当存在重复索引时,在
Series.pct_change()和DataFrame.pct_change()中的错误(GH 30463) -
在
DataFrame累积操作(例如 cumsum,cummax)中的错误,将不正确地转换为 object-dtype(GH 19296) -
diff中的错误导致扩展类型丢失 dtype(GH 30889) -
DataFrame.diff中的错误在其中一个列是可空整数 dtype 时引发IndexError(GH 30967)
转换
字符串
- 在空
Series上调用Series.str.isalnum()(以及其他“ismethods”)将返回objectdtype 而不是bool([GH 29624](https://github.com/pandas-dev/pandas/issues/29624)
区间
-
在
IntervalIndex.get_indexer()中的错误,其中Categorical或CategoricalIndextarget会错误地引发TypeError(GH 30063) -
在
pandas.core.dtypes.cast.infer_dtype_from_scalar中的错误,传递pandas_dtype=True未推断出IntervalDtype(GH 30337) -
在
Series构造函数中存在的错误,从Interval对象的list构造Series导致结果为objectdtype 而不是IntervalDtype(GH 23563) -
在
IntervalDtype中存在的错误,其中kind属性错误地设置为None而不是"O"(GH 30568) -
在区间数据的
IntervalIndex、IntervalArray和Series中存在的错误,导致相等比较不正确(GH 24112)
索引
-
在使用反向切片的赋值中存在的错误(GH 26939)
-
在存在索引重复项的情况下,
DataFrame.explode()会复制帧(GH 28010) -
在使用另一类型索引重新索引
PeriodIndex()时存在的错误,该索引包含Period(GH 28323)(GH 28337) -
通过
.loc进行列赋值时,存在使用 numpy 非纳秒日期时间类型的错误(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) -
在设置单行 DataFrame 中的 Categorical 值时,
DataFrame.loc()中存在 dtype 错误(GH 25495) -
当输入包含缺失值时,
MultiIndex.get_loc()无法找到缺失值(GH 19132) -
当新数据的长度与
True值的数量相匹配且新数据不是Series或np.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()无法与 dtypeInt64一起工作(GH 28869) -
Bug in
DataFrame.to_clipboard()无法在 ipython 中可靠工作(GH 22707) -
Bug in
read_json()默认编码未设置为utf-8(GH 29565) -
Bug in
PythonParser处理十进制字段时,混合使用 str 和 bytes(GH 29650) -
read_gbq()现在接受progress_bar_type参数,在数据下载时显示进度条。(GH 29857) -
pandas.io.json.json_normalize()中的错误,当record_path指定的位置缺失值时会引发TypeError(GH 30148) -
read_excel()现在接受二进制数据(GH 15914) -
read_csv()中的错误,编码处理仅限于 C 引擎的字符串utf-16(GH 24130)
绘图
-
Series.plot()中的错误无法绘制布尔值(GH 23719) -
DataFrame.plot()中的错误无法在没有行时绘制图表(GH 27758) -
DataFrame.plot()中的错误,在同一轴上绘制多个系列时产生不正确的图例标记(GH 18222) -
DataFrame.plot()中的错误,当kind='box'且数据包含日期时间或时间间隔数据时。这些类型现在会自动删除(GH 22799) -
DataFrame.plot.line()和DataFrame.plot.area()中的错误会在 x 轴上产生错误的 xlim(GH 27686, GH 25160, GH 24784) -
DataFrame.boxplot()中的错误不接受color参数,就像DataFrame.plot.box()一样(GH 26214) -
xticks参数在DataFrame.plot.bar()中被忽略的错误(GH 14119) -
set_option()现在验证提供给'plotting.backend'的绘图后端在设置选项时是否实现了该后端,而不是在创建绘图时实现(GH 28163) -
DataFrame.plot()现在允许使用backend关键字参数在一个会话中在不同的后端之间切换(GH 28619). -
颜色验证中的错误,错误地对非颜色样式进行引发(GH 29122).
-
允许
DataFrame.plot.scatter()绘制objects和datetime类型的数据(GH 18755, GH 30391) -
DataFrame.hist()中的错误,xrot=0与by和子图不兼容(GH 30288).
GroupBy/resample/rolling
-
core.groupby.DataFrameGroupBy.apply()中的错误,当函数返回一个Index时,只显示单个组的输出(GH 28652) -
DataFrame.groupby()中的错误,当存在多个组时,如果任何组包含所有 NA 值,则会引发IndexError(GH 20519) -
Resampler.size()和Resampler.count()中的错误,在与空的Series或DataFrame一起使用时返回错误的 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()中存在的错误,会导致any、all、nunique和 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_method为None时DataFrameGroupBy.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=True和aggfunc='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_vars或value_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) -
使用布尔类型
SparseArray的operator.xor()的错误已修复。现在返回稀疏结果,而不是对象 dtype (GH 31025)
ExtensionArray
-
在设置标量字符串时出现的
arrays.PandasArray中的错误已修复 (GH 28118, GH 28150)。 -
可空整数无法与字符串进行比较的错误已修复 (GH 28930)
-
DataFrame构造函数在使用类似列表的数据和指定dtype时引发ValueError的错误已修复 (GH 30280)
其他
-
尝试使用
set_option()设置display.precision、display.max_rows或display.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) -
当另一个值为
0或1时,修复了IntegerArray的pow运算问题 (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)
贡献者
总共有 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 +


浙公网安备 33010602011771号