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()
使用字典输入时丢失ExtensionArray
dtypes 的回归(GH 32194)。 -
修复了在使用 xarray 的 CFTimeIndex 进行 “nearest” 方法索引时的能力,一个
Index
子类(pydata/xarray#3751, GH 32905)。 -
修复
DataFrame.describe()
中的回归引发TypeError: unhashable type: 'dict'
错误 (GH 32409) -
修复
DataFrame.replace()
中的回归,如果to_replace
中的项目不在值中,则将列转换为object
数据类型 (GH 32988) -
当按
PeriodIndex
级别分组时,Series.groupby()
中的回归会引发ValueError
(GH 34010) -
修复
DataFrameGroupBy.rolling.apply()
和SeriesGroupBy.rolling.apply()
中的回归忽略了 args 和 kwargs 参数 (GH 33433) -
修复在无序
Categorical
上使用np.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()
中字典输入丢失ExtensionArray
dtypes 的回归问题(GH 32194) -
修复了在 xarray 的 CFTimeIndex 中保留使用“nearest”方法进行索引的能力的问题,它是
Index
的子类(pydata/xarray#3751,GH 32905)。 -
修复了
DataFrame.describe()
引发TypeError: unhashable type: 'dict'
的回归问题(GH 32409) -
修复了
DataFrame.replace()
中的回归问题,如果to_replace
中的项目不在值中,则将列转换为object
dtype(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 的datetime64
dtype 没有复制(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-awaredatetime64
dtype 没有复制 (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()
在Int64
dtype 列上引发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)
间隔
- 修复了使用
interval
dtype 进行Series.shift()
时,将整数或日期时间的间隔数组进行移位时引发TypeError
��bug (GH 34195) ## 贡献者
总共有 15 人为此版本贡献了补丁。名字后带“+”的人第一次贡献了补丁。
-
Daniel Saxton
-
Guillaume Lemaitre
-
Jeff Reback
-
Joris Van den Bossche
-
Kaiqi Dong
-
Marco Gorelli
-
MeeseeksMachine
-
Pandas 开发团队
-
Sebastián Vanrell +
-
Tom Augspurger
-
William Ayd
-
alimcmaster1
-
jbrockmendel
-
paihu +
-
proost ## 修复的回归问题
-
修复了在使用切片设置值时
DataFrame
出现的回归问题(例如df[-4:] = 1
),通过标签而不是位置进行索引 (GH 31469) -
修复了使用包含
datetime.date
的切片索引DatetimeIndex
索引的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,使用interval
dtype 并将整数或日期时间的间隔数组进行移位时引发TypeError
(GH 34195)
贡献者
总共有 15 人对此版本进行了补丁贡献。 姓名后带“+”的人首次为补丁做出了贡献。
-
Daniel Saxton
-
Guillaume Lemaitre
-
Jeff Reback
-
Joris Van den Bossche
-
Kaiqi Dong
-
Marco Gorelli
-
MeeseeksMachine
-
Pandas 开发团队
-
Sebastián Vanrell +
-
Tom Augspurger
-
William Ayd
-
alimcmaster1
-
jbrockmendel
-
paihu +
-
proost
1.0.0 中的新功能(2020 年 1 月 29 日)
这些是 pandas 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 只能存储字符串。
-
object
dtype 会破坏 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 构造函数保留了
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()
更新名称。
为了向后兼容,您仍然可以通过级别访问名称。
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”),会返回object
dtype 而不是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
对象列表构造Series
导致object
dtype 而不是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
只能存储字符串。 -
object
dtype 破坏了特定于 dtype 的操作,例如DataFrame.select_dtypes()
。没有明确的方法可以仅选择文本而排除非文本但仍为 object-dtype 列。 -
当阅读代码时,
object
dtype 数组的内容不如string
清晰。
In [9]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype())
Out[9]:
0 abc
1 <NA>
2 def
dtype: string
您也可以使用别名"string"
。
In [10]: s = pd.Series(['abc', None, 'def'], dtype="string")
In [11]: s
Out[11]:
0 abc
1 <NA>
2 def
dtype: string
常规的字符串访问器方法可用。在适当的情况下,DataFrame 的 Series 或列的返回类型也将具有字符串 dtype。
In [12]: s.str.upper()
Out[12]:
0 ABC
1 <NA>
2 DEF
dtype: string
In [13]: s.str.split('b', expand=True).dtypes
Out[13]:
0 string[python]
1 string[python]
dtype: object
返回整数的字符串访问器方法将返回一个具有Int64Dtype
的值
In [14]: s.str.count("a")
Out[14]:
0 1
1 <NA>
2 0
dtype: Int64
我们建议在处理字符串时明确使用string
数据类型。有关更多信息,请参见 Text data types。### 支持带有缺失值的布尔数据类型
我们增加了BooleanDtype
/ BooleanArray
,一个专门用于布尔数据的扩展类型,可以容纳缺失值。默认的基于 bool-dtype NumPy 数组的bool
数据类型,列只能保存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) -
使用
Categorical
dtype 的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”)将返回object
dtype 而不是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
作为tolerance
kwarg 的问题(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”)将返回object
dtype 而不是bool
([GH 29624](https://github.com/pandas-dev/pandas/issues/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
dtype 而不是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 +
ey -
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 +