3.0.0 中的新功能(2024年XX月)#
这是 pandas 3.0.0 中的更改。有关包括其他版本在内的完整更新日志,请参见 发行说明。
增强功能#
enhancement1#
enhancement2#
其他增强功能#
pandas.api.typing.FrozenList
可用于键入MultiIndex.names
、MultiIndex.codes
和MultiIndex.levels
的输出 (GH 58237)pandas.api.typing.SASReader
可用于类型化read_sas()
的输出 (GH 55689)DataFrame.to_excel()
现在在单元格中的字符数超过 Excel 的 32767 字符限制时会引发UserWarning
(GH 56954)pandas.merge()
now validates thehow
parameter input (merge type) (GH 59435)read_stata()
现在返回datetime64
分辨率,更好地匹配在 stata 格式中本地存储的那些 (GH 55642)DataFrame.agg()
在调用时使用axis=1
和一个重命名结果索引的func
现在会引发一个NotImplementedError
(GH 58807)。Index.get_loc()
现在也接受tuple
的子类作为键 (GH 57922)Styler.set_tooltips()
提供了通过使用 td 元素的 title 属性来存储工具提示的替代方法。(GH 56981)在
DataFrame.plot.kde()
中添加了缺失的参数weights
用于PDF的估计 (GH 59337)允许通过
pat
参数将字典传递给pandas.Series.str.replace()
(GH 51748)支持将
Series
输入传递给json_normalize()
,同时保留Series
的Index
(GH 51452)支持从 Stata 108 格式(Stata 6)及更早的文件中读取值标签(GH 58154)
用户可以通过将选项
mode.performance_warnings
设置为False
来全局禁用任何PerformanceWarning
(GH 56920)Styler.format_index_names()
现在可以用来格式化索引和列名 (GH 48936 和 GH 47489)errors.DtypeWarning
改进为在检测到混合数据类型时包含列名 (GH 58174)DataFrame.to_excel()
参数merge_cells
现在接受值"columns"
以仅合并MultiIndex
列标题单元格 (GH 35384)DataFrame.corrwith()
现在接受min_periods
作为可选参数,如同DataFrame.corr()
和Series.corr()
(GH 9490)DataFrame.cummin()
,DataFrame.cummax()
,DataFrame.cumprod()
和DataFrame.cumsum()
方法现在有一个numeric_only
参数 (GH 53072)DataFrame.ewm()
现在允许在提供times
时使用adjust=False
(GH 54328)DataFrame.fillna()
和Series.fillna()
现在可以接受value=None
;对于非对象数据类型,将使用相应的 NA 值 (GH 57723)DataFrame.pivot_table()
和pivot_table()
现在允许通过**kwargs
将关键字参数传递给aggfunc
(GH 57884)Series.cummin()
和Series.cummax()
现在支持CategoricalDtype
(GH 52335)Series.plot()
现在正确处理了饼图的ylabel
参数,允许对 y 轴标签进行显式控制 (GH 58239)pandas.concat()
在ignore_index=True
且keys
不是None
时会引发ValueError
(GH 59274)将两个
DateOffset
对象相乘现在会引发TypeError
而不是RecursionError
(GH 59442)恢复对读取 Stata 104 格式支持并启用读取 103 格式 dta 文件 (GH 58554)
支持将
Iterable[Hashable]
输入传递给DataFrame.drop_duplicates()
(GH 59237)支持读取 Stata 102 格式(Stata 1)的 dta 文件 (GH 58978)
支持读取 Stata 110 格式(Stata 7)的 dta 文件 (GH 47176)
值得注意的错误修复#
这些是可能会有显著行为变化的错误修复。
在 observed=False
的情况下改进了 groupby 的行为#
由于改进了对未观察组的处理,修复了许多错误(GH 55738)。本节中的所有评论同样影响 SeriesGroupBy
。
在 pandas 的早期版本中,使用 DataFrameGroupBy.apply()
或 DataFrameGroupBy.agg()
进行单一分组时,会将未观察到的组传递给提供的函数,导致下面出现 0
。
In [1]: df = pd.DataFrame(
...: {
...: "key1": pd.Categorical(list("aabb"), categories=list("abc")),
...: "key2": [1, 1, 1, 2],
...: "values": [1, 2, 3, 4],
...: }
...: )
...:
In [2]: df
Out[2]:
key1 key2 values
0 a 1 1
1 a 1 2
2 b 1 3
3 b 2 4
In [3]: gb = df.groupby("key1", observed=False)
In [4]: gb[["values"]].apply(lambda x: x.sum())
Out[4]:
values
key1
a 3
b 7
c 0
然而,在使用多个分组时,情况并非如此,导致下面出现 NaN
。
In [1]: gb = df.groupby(["key1", "key2"], observed=False)
In [2]: gb[["values"]].apply(lambda x: x.sum())
Out[2]:
values
key1 key2
a 1 3.0
2 NaN
b 1 3.0
2 4.0
c 1 NaN
2 NaN
现在使用多个分组也会将未观察到的分组传递给提供的函数。
In [5]: gb = df.groupby(["key1", "key2"], observed=False)
In [6]: gb[["values"]].apply(lambda x: x.sum())
Out[6]:
values
key1 key2
a 1 3
2 0
b 1 3
2 4
c 1 0
2 0
同样地:
在 pandas 的早期版本中,方法
DataFrameGroupBy.sum()
会对未观察到的组返回0
,但DataFrameGroupBy.prod()
、DataFrameGroupBy.all()
和DataFrameGroupBy.any()
都会返回 NA 值。现在这些方法分别返回1
、True
和False
。DataFrameGroupBy.groups()
以前不包括未观察到的组,现在包括了。
这些改进也修复了 groupby 中的某些错误:
DataFrameGroupBy.agg()
在存在多个分组、未观察到的分组以及as_index=False
时会失败 (GH 36698)DataFrameGroupBy.groups()
使用sort=False
会排序组;现在它们按照观察到的顺序出现 (GH 56966)DataFrameGroupBy.nunique()
在存在多个分组、未观察到的分组和as_index=False
时会失败 (GH 52848)DataFrameGroupBy.sum()
在存在多个分组、未观察到的分组和非数字数据时会有不正确的值 (GH 43891)DataFrameGroupBy.value_counts()
在某些分类和某些非分类分组中使用时,并且observed=False
时会产生不正确的结果 (GH 56016)
notable_bug_fix2#
向后不兼容的 API 变化#
日期时间解析推理#
将一系列字符串、datetime
对象或 np.datetime64
对象转换为 datetime64
dtype 现在会推断输出 dtype 的适当分辨率(也称为单位)。这会影响 Series
、DataFrame
、Index
、DatetimeIndex
和 to_datetime()
。
之前,这些总是提供纳秒分辨率:
In [1]: dt = pd.Timestamp("2024-03-22 11:36").to_pydatetime()
In [2]: pd.to_datetime([dt]).dtype
Out[2]: dtype('<M8[ns]')
In [3]: pd.Index([dt]).dtype
Out[3]: dtype('<M8[ns]')
In [4]: pd.DatetimeIndex([dt]).dtype
Out[4]: dtype('<M8[ns]')
In [5]: pd.Series([dt]).dtype
Out[5]: dtype('<M8[ns]')
现在从 pydatetime 对象推断出微秒单位“us”,与标量 Timestamp
行为匹配。
In [7]: In [1]: dt = pd.Timestamp("2024-03-22 11:36").to_pydatetime()
In [8]: In [2]: pd.to_datetime([dt]).dtype
Out[8]: dtype('<M8[us]')
In [9]: In [3]: pd.Index([dt]).dtype
Out[9]: dtype('<M8[us]')
In [10]: In [4]: pd.DatetimeIndex([dt]).dtype
Out[10]: dtype('<M8[us]')
In [11]: In [5]: pd.Series([dt]).dtype
Out[11]: dtype('<M8[us]')
类似地,当传递一个 np.datetime64
对象序列时,传递对象的分辨率将被保留(或者对于低于秒的分辨率,将使用秒分辨率)。
当传递字符串时,解析将取决于字符串的精度,再次匹配 Timestamp
行为。之前:
In [2]: pd.to_datetime(["2024-03-22 11:43:01"]).dtype
Out[2]: dtype('<M8[ns]')
In [3]: pd.to_datetime(["2024-03-22 11:43:01.002"]).dtype
Out[3]: dtype('<M8[ns]')
In [4]: pd.to_datetime(["2024-03-22 11:43:01.002003"]).dtype
Out[4]: dtype('<M8[ns]')
In [5]: pd.to_datetime(["2024-03-22 11:43:01.002003004"]).dtype
Out[5]: dtype('<M8[ns]')
推断的分辨率现在与输入字符串的分辨率匹配:
In [12]: In [2]: pd.to_datetime(["2024-03-22 11:43:01"]).dtype
Out[12]: dtype('<M8[s]')
In [13]: In [3]: pd.to_datetime(["2024-03-22 11:43:01.002"]).dtype
Out[13]: dtype('<M8[ms]')
In [14]: In [4]: pd.to_datetime(["2024-03-22 11:43:01.002003"]).dtype
Out[14]: dtype('<M8[us]')
In [15]: In [5]: pd.to_datetime(["2024-03-22 11:43:01.002003004"]).dtype
Out[15]: dtype('<M8[ns]')
在混合分辨率输入的情况下,使用最高分辨率:
In [2]: pd.to_datetime([pd.Timestamp("2024-03-22 11:43:01"), "2024-03-22 11:43:01.002"]).dtype
Out[2]: dtype('<M8[ns]')
增加 Python 的最小版本#
pandas 3.0.0 支持 Python 3.10 及以上版本。
增加了依赖项的最小版本#
一些依赖项的最低支持版本已更新。如果已安装,我们现在要求:
包 |
最低版本 |
必需的 |
Changed |
---|---|---|---|
numpy |
1.23.5 |
X |
X |
对于 可选库 ,一般的建议是使用最新版本。下表列出了每个库在 pandas 开发过程中当前测试的最低版本。低于最低测试版本的可选库可能仍然有效,但不被视为支持。
包 |
新最低版本 |
---|---|
pytz |
2023.4 |
fastparquet |
2023.10.0 |
adbc-driver-postgresql |
0.10.0 |
mypy (dev) |
1.9.0 |
pytz
现在是一个可选依赖项#
pandas 现在在将时区字符串传递给各种方法时,默认使用标准库中的 zoneinfo
作为时区实现。(GH 34916)
旧行为:
In [1]: ts = pd.Timestamp(2024, 1, 1).tz_localize("US/Pacific")
In [2]: ts.tz
<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>
新行为:
In [16]: ts = pd.Timestamp(2024, 1, 1).tz_localize("US/Pacific")
In [17]: ts.tz
Out[17]: zoneinfo.ZoneInfo(key='US/Pacific')
pytz
时区对象在直接传递时仍然受支持,但它们将不再默认从字符串输入中返回。此外,pytz
不再是 pandas 的必需依赖项,但可以通过 pip extra pip install pandas[timezone]
安装。
此外,pandas 不再对导致模糊或不存在时间的时区操作抛出 pytz
异常。这些情况现在将引发 ValueError
。
其他 API 更改#
第三方
py.path
对象在 IO 方法中不再明确支持。请改用pathlib.Path
对象 (GH 57091)read_table()
的parse_dates
参数默认为None
,以提高与read_csv()
的一致性(GH 57476)所有继承自内置
tuple
的类(包括使用collections.namedtuple()
创建的类型)现在在索引操作期间被哈希和比较为内置tuple
(GH 57922)在
ExtensionArray._from_sequence_of_strings()
中将dtype
设为必需参数 (GH 56519)将
Series
输入传递给json_normalize()
现在将保留Series
的Index
,之前的输出有一个新的RangeIndex
(GH 51452)移除了总是引发
TypeError
的Index.sort()
。该属性未定义,并将引发AttributeError
(GH 59283)更新了
DataFrame.to_excel()
,使得输出电子表格没有样式。自定义样式仍然可以使用Styler.to_excel()
完成(GH 54154)使用 Python 2 创建的 pickle 和 HDF (
.h5
) 文件不再明确支持 (GH 57387)来自版本低于
1.0.0
的 pandas 的腌制对象不再支持 (GH 57155)在比较
testing.assert_series_equal()
中的索引时,如果Index
是整数类型,check_exact 默认设置为 True。(GH 57386)
弃用#
Copy 关键字#
以下方法中的 copy
关键字参数已弃用,并将在未来版本中移除:
DataFrame.merge()
/pd.merge()
写时复制利用了一种延迟复制机制,直到必要时才复制数据。使用 .copy
来触发即时复制。从 3.0 版本开始,copy 关键字没有效果,因此可以安全地从代码中删除。
其他弃用#
已弃用
core.internals.api.make_block()
,请改用公共 API (GH 56815)已弃用
DataFrameGroupby.corrwith()
(GH 57158)已弃用
Timestamp.utcfromtimestamp()
,请改用Timestamp.fromtimestamp(ts, "UTC")
(GH 56680)已弃用
Timestamp.utcnow()
,请改用Timestamp.now("UTC")
(GH 56680)弃用允许在
DataFrame.all()
,DataFrame.min()
,DataFrame.max()
,DataFrame.sum()
,DataFrame.prod()
,DataFrame.mean()
,DataFrame.median()
,DataFrame.sem()
,DataFrame.var()
,DataFrame.std()
,DataFrame.skew()
,DataFrame.kurt()
,Series.all()
,Series.min()
,Series.max()
,Series.sum()
,Series.prod()
,Series.mean()
,Series.median()
,Series.sem()
,Series.var()
,Series.std()
,Series.skew()
, 和Series.kurt()
中使用非关键字参数。(GH 57087)在
Series.to_markdown()
中允许非关键字参数已被弃用,除了buf
。(GH 57280)在
Series.to_string()
中弃用允许非关键字参数,除了buf
。 (GH 57280)在未来版本中,
DataFrameGroupBy.groups()
和SeriesGroupBy.groups()
的弃用行为,groups
通过单元素列表将返回元组而不是标量。(GH 58858)已弃用的
Series.dt.to_pytimedelta()
行为,在未来的版本中,这将返回包含 pythondatetime.timedelta
对象的Series
而不是 timedelta 的ndarray
;这与其他Series.dt()
属性的行为相匹配。(GH 57463)不推荐使用小写字符串
d
,b
和c
表示Day
,BusinessDay
和CustomBusinessDay
中的频率,推荐使用D
,B
和C
(GH 58998)弃用小写字符串
w
,w-mon
,w-tue
等在Week
中表示频率,改为使用W
,W-MON
,W-TUE
等 (GH 58998)已弃用的参数
method
在DataFrame.reindex_like()
/Series.reindex_like()
中 (GH 58667)弃用的字符串
w
,d
,MIN
,MS
,US
和NS
表示Timedelta
中的单位,取而代之的是W
,D
,min
,ms
,us
和ns
(GH 59051)在
DataFrame.to_json()
和Series.to_json()
中弃用epoch
日期格式,请改用iso
。(GH 57063)
移除先前版本的弃用/更改#
强制弃用别名 M
, Q
, Y
等,改为使用 ME
, QE
, YE
等作为偏移量#
重命名了以下偏移别名 (GH 57986):
偏移 |
移除别名 |
新别名 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其他移除#
DataFrameGroupBy.idxmin
,DataFrameGroupBy.idxmax
,SeriesGroupBy.idxmin
, 和SeriesGroupBy.idxmax
现在在使用skipna=False
并且遇到 NA 值时会引发ValueError
(GH 10694)concat()
在所有条目均为 NA 时,不再忽略这些条目在确定结果 dtype 时的 dtype (GH 40893)read_excel()
,read_json()
,read_html()
, 和read_xml()
不再接受数据的原始字符串或字节表示。该类型的数据必须包装在StringIO
或BytesIO
中 (GH 53767)to_datetime()
指定了unit
后不再将字符串解析为浮点数,而是以与未指定unit
相同的方式解析它们 (GH 50735)DataFrame.groupby()
使用as_index=False
和聚合方法将不再从结果中排除那些不是从输入产生的分组 (GH 49519)ExtensionArray._reduce()
现在在签名中需要一个keepdims: bool = False
参数 (GH 52788)Series.dt.to_pydatetime()
现在返回一个Series
的datetime.datetime
对象 (GH 52459)SeriesGroupBy.agg()
不再将组的名称固定到传递给提供的func
的输入上 (GH 51703)除了
name
之外的所有参数在Index.rename()
中现在都是仅关键字参数 (GH 56493)除了IO写入器中的第一个类似``path``的参数外,所有参数现在都是仅关键字参数 (GH 54229)
更改了
Series.__getitem__()
和Series.__setitem__()
的行为,始终将整数键视为标签,而不是位置,与DataFrame
行为一致 (GH 50617)更改了
Series.__getitem__()
、Series.__setitem__()
、DataFrame.__getitem__()
、DataFrame.__setitem__()
在具有浮点型索引对象上的整数切片的行为。现在这被视为 位置 索引 (GH 49612)不允许
Series.iloc()
的可调用参数返回一个tuple
(GH 53769)禁止在 pandas 对象和无数据类型的序列(例如
list
,tuple
)之间进行逻辑运算(||
,&
,^
);请先将对象包装在Series
,Index
, 或np.array
中(GH 52264)在
Series
逻辑操作(&
,^
,||
)中禁止自动转换为对象,当系列具有不匹配的索引和非object
或bool
的 dtypes 时 (GH 52538)不允许在没有
value
的情况下调用Series.replace()
或DataFrame.replace()
,并且to_replace
不是类似字典的对象 (GH 33302)不允许使用标量数据构造
arrays.SparseArray
(GH 53039)禁止使用长度为零的布尔索引器对
索引
进行索引,现在会引发ValueError
(GH 55820)不允许非标准的 (
np.ndarray
,Index
,ExtensionArray
, 或Series
) 用于isin()
,unique()
,factorize()
(GH 52986)禁止将 pandas 类型传递给
Index.view()
(GH 55709)在
array()
中禁止使用除“s”、“ms”、“us”、“ns”以外的单位作为 datetime64 和 timedelta64 的 dtypes (GH 53817)从
PeriodArray
构造函数中移除了 “freq” 关键字,请改用 “dtype” (GH 52462)。在
Categorical
构造函数中移除了 ‘fastpath’ 关键字 (GH 20110)在
Series.resample()
和DataFrame.resample()
中移除了 ‘kind’ 关键字 (GH 58125)从
pandas.core.internals
和pandas.core.internals.api
中移除了Block
,DatetimeTZBlock
,ExtensionBlock
,create_block_manager_from_blocks
(GH 55139)移除了别名
arrays.PandasArray
为arrays.NumpyExtensionArray
(GH 53694)从
Series.replace()
和DataFrame.replace()
中移除了已弃用的“method”和“limit”关键字 (GH 53492)移除了扩展测试类
BaseNoReduceTests
,BaseNumericReduceTests
,BaseBooleanReduceTests
(GH 54663)在
DatetimeIndex.__new__()
中移除了“closed”和“normalize”关键字 (GH 52628)在
read_csv()
和read_table()
中移除了已弃用的delim_whitespace
关键字,请改用sep=r"\s+"
(GH 55569)要求
SparseDtype.fill_value()
是SparseDtype.subtype()
的有效值 (GH 53043)在
Series.isin()
和Index.isin()
中停止自动转换非日期时间类型的值(主要是字符串)与datetime64
、timedelta64
和PeriodDtype
数据类型 (GH 53111)在给定 pandas 对象(
Series
、Index
、ExtensionArray
)时,停止在Index
、Series
和DataFrame
构造函数中执行 dtype 推断,调用.infer_objects
以保持当前行为(GH 56012)在具有 object-dtype 索引的
Index.insert()
中停止执行 dtype 推断;这通常会影响在将新条目设置到空的Series
或DataFrame
中时产生的索引/列 (GH 51363)在
TimedeltaIndex.__new__()
中移除了“closed”和“unit”关键字 (GH 52628, GH 55499)Index.sort_values()
中的所有参数现在仅限关键字 (GH 56493)Series.to_dict()
中的所有参数现在仅限关键字 (GH 56493)将
Categorical.map()
中的na_action
的默认值更改为None
(GH 51645)将
DataFrame.groupby()
和Series.groupby()
中的observed
的默认值更改为True
(GH 51811)在
testing.assert_series_equal()
和testing.assert_frame_equal()
中强制执行弃用,对于对象数据类型和不匹配的类似空值,现在被认为是不同的 (GH 18463)强制弃用
all
和any
对datetime64
、DatetimeTZDtype
和PeriodDtype
数据类型的缩减 (GH 58029)强制弃用不允许在
date_range()
、period_range()
、timedelta_range()
、interval_range()
中使用float
“周期”,(GH 56036)强制弃用不允许解析混合时区的日期时间,除非用户传递
utc=True
给to_datetime()
(GH 57275)在
Series.value_counts()
和Index.value_counts()
中强制弃用对象类型,对结果的.index
执行类型推断 (GH 56161)强制弃用
DataFrameGroupBy.get_group()
和SeriesGroupBy.get_group()
,允许在按长度为1的列表分组时,name
参数为非元组 (GH 54155)对
Series.interpolate()
和DataFrame.interpolate()
的对象数据类型强制弃用 (GH 57820)强制弃用
offsets.Tick.delta()
,请使用pd.Timedelta(obj)
代替 (GH 55498)在 DataFrame 的归约操作
sum
,prod
,std
,var
, 和sem
中,强制弃用axis=None
与axis=0
相同的行为,传递axis=None
现在将归约两个轴;这在执行例如numpy.sum(df)
时尤其如此 (GH 21597)强制弃用
core.internals
成员Block
、ExtensionBlock
和DatetimeTZBlock
(GH 58467)在
read_csv()
、read_table()
、read_fwf()
和read_excel()
中强制弃用date_parser
,改为使用date_format
(GH 50601)在
read_csv()
中强制弃用keep_date_col
关键字 (GH 55569)在
Rolling.quantile()
和Expanding.quantile()
中强制弃用quantile
关键字,改为q
。(GH 52550)在
read_csv()
中强制弃用参数infer_datetime_format
,因为它的严格版本现在是默认值 (GH 48621)在
parse_dates
中强制弃用组合解析的日期时间列在read_csv()
中 (GH 55569)对非标准(
np.ndarray
、ExtensionArray
、Index
或Series
)参数传递给api.extensions.take()
的强制弃用 (GH 52981)强制弃用解析系统时区字符串到
tzlocal
,这依赖于系统时区,请改为传递 ‘tz’ 关键字 (GH 50791)强制弃用传递字典给
SeriesGroupBy.agg()
(GH 52268)强制弃用表示频率的字符串
AS
在YearBegin
中以及表示各种财年开始的年度频率的字符串AS-DEC
、AS-JAN
等 (GH 57793)强制弃用表示频率的字符串
A
在YearEnd
中和表示各种财年末的年度频率的字符串A-DEC
,A-JAN
等 (GH 57699)在
BYearBegin
中表示频率的字符串BAS
已被强制弃用,以及表示不同财年开始的年度频率的字符串BAS-DEC
、BAS-JAN
等 (GH 57793)在
BYearEnd
中表示频率的字符串BA
已被强制弃用,以及表示具有不同财年末的年度频率的字符串BA-DEC
,BA-JAN
等 (GH 57793)强制弃用表示频率的字符串
H
,BH
, 和CBH
在Hour
,BusinessHour
,CustomBusinessHour
(GH 59143)强制弃用表示频率的字符串
T
、L
、U
和N
在Minute
、Milli
、Micro
、Nano
中 (GH 57627)当
len(keys) != len(objs)
时,concat()
的行为被强制弃用,会截断到两者中较短的一个。现在这将引发一个ValueError
(GH 43485)强制弃用
DataFrame.replace()
和Series.replace()
在使用CategoricalDtype
时引入新类别的行为。(GH 58270)在存在NA值的情况下,强制弃用
Series.argsort()
的行为 (GH 58232)对于
Series.interpolate()
和DataFrame.interpolate()
的值 “pad”、”ffill”、”bfill” 和 “backfill” 强制弃用 (GH 57869)强制移除弃用的
Categorical.to_list()
,请使用obj.tolist()
替代 (GH 51254)在
DataFrame.stack()
中,future_stack
的默认值现在是True
;指定False
将引发一个FutureWarning
(GH 55448)迭代一个
DataFrameGroupBy
或SeriesGroupBy
将返回长度为1的元组,用于按level
分组时返回长度为1的列表 (GH 50064)方法
apply
,agg
, 和transform
将不再替换 NumPy 函数(例如np.sum
)和内置函数(例如min
)为等效的 pandas 实现;如果你希望使用 pandas 实现,请使用字符串别名(例如"sum"
和"min"
)(GH 53974)在
DataFrame.shift()
和Series.shift()
以及DataFrameGroupBy.shift()
中同时传递freq
和fill_value
现在会引发ValueError
(GH 54818)移除了支持 bool 类型的
DataFrameGroupBy.quantile()
和SeriesGroupBy.quantile()
(GH 53975)移除了
DateOffset.is_anchored()
和offsets.Tick.is_anchored()
(GH 56594)移除了
DataFrame.applymap
、Styler.applymap
和Styler.applymap_index
(GH 52364)移除了
DataFrame.bool
和Series.bool
(GH 51756)移除了
DataFrame.first
和DataFrame.last
(GH 53710)移除了
DataFrame.swapaxes
和Series.swapaxes
(GH 51946)移除了
DataFrameGroupBy.grouper
和SeriesGroupBy.grouper
(GH 56521)移除了
DataFrameGroupby.fillna
和SeriesGroupBy.fillna
(GH 55719)移除了
Index.format
,请使用Index.astype()
并传入str
或者使用Index.map()
并传入formatter
函数代替 (GH 55439)移除了
Resample.fillna
(GH 55719)移除了
Series.__int__
和Series.__float__
。请改为调用int(Series.iloc[0])
或float(Series.iloc[0])
。(GH 51131)移除了
Series.ravel
(GH 56053)移除了
Series.view
(GH 56054)移除了
StataReader.close
(GH 49228)从
DataFrame
、Series
、arrays.ArrowExtensionArray
中移除了_data
(GH 52003)从
DataFrame.groupby()
,Series.groupby()
,DataFrame.rolling()
,Series.rolling()
,DataFrame.resample()
, 和Series.resample()
中移除了axis
参数 (GH 51203)从所有分组操作中移除了
axis
参数 (GH 50405)从
Series.apply()
中移除了convert_dtype
(GH 52257)从
DataFrame.align()
中移除了method
、limit
、fill_axis
和broadcast_axis
关键字 (GH 51968)移除了
pandas.api.types.is_interval
和pandas.api.types.is_period
,请改用isinstance(obj, pd.Interval)
和isinstance(obj, pd.Period)
(GH 55264)移除了
pandas.io.sql.execute
(GH 50185)移除了
pandas.value_counts
,请使用Series.value_counts()
代替 (GH 53493)移除了
read_gbq
和DataFrame.to_gbq
。请改用pandas_gbq.read_gbq
和pandas_gbq.to_gbq
https://pandas-gbq.readthedocs.io/en/latest/api.html (GH 55525)从
read_parquet()
中移除了use_nullable_dtypes
(GH 51853)在
PeriodIndex
构造函数中移除了year
,month
,quarter
,day
,hour
,minute
, 和second
关键字,请改用PeriodIndex.from_fields()
(GH 55960)从
DataFrame.pct_change()
、Series.pct_change()
、DataFrameGroupBy.pct_change()
和SeriesGroupBy.pct_change()
中移除了参数limit
;参数method
必须设置为None
,并且将在未来版本的 pandas 中移除 (GH 53520)在
DataFrameGroupBy.get_group()
和SeriesGroupBy.get_group()
中移除了已弃用的参数obj
(GH 53545)移除了使用
Series.apply()
的Series.agg()
的已弃用行为 (GH 53325)在
Series.fillna()
,DataFrame.fillna()
上移除了已弃用的关键字method
(GH 57760)移除了选项
mode.use_inf_as_na
,改为在此之前将 inf 条目转换为NaN
(GH 51684)移除了在
DataFrame.from_records()
中对DataFrame
的支持(GH 51697)在
to_datetime()
,to_timedelta()
和to_numeric()
中移除了对errors="ignore"
的支持 (GH 55734)在
DataFrame.take()
中移除了对slice
的支持 (GH 51539)移除了
ArrayManager
(GH 55043)移除了
Index
的is_boolean
,is_integer
,is_floating
,holds_integer
,is_numeric
,is_categorical
,is_object
, 和is_interval
属性 (GH 50042)在
PeriodIndex
中移除了ordinal
关键字,请改用PeriodIndex.from_ordinals()
(GH 55960)在
Resampler
方法中移除了未使用的参数*args
和**kwargs
(GH 50977)解析字符串为日期时间时,未识别的时区现在会引发
ValueError
(GH 51477)移除了
Grouper
属性ax
,groups
,indexer
, 和obj
(GH 51206, GH 51182)在
read_csv()
和read_table()
中移除了已弃用的关键字verbose
(GH 56556)在
ExtensionArray.fillna
中移除了method
关键字,改为实现ExtensionArray._pad_or_backfill
(GH 53621)从
DataFrameGroupBy
中移除了属性dtypes
(GH 51997)强制弃用
argmin
、argmax
、idxmin
和idxmax
在skipna=False
且遇到 NA 值或所有值均为 NA 值时返回结果;这些操作现在将在这种情况下引发 (GH 33941, GH 51276)
性能提升#
在访问器属性中消除了对原始 pandas 对象的循环引用(例如
Series.str
)。然而,访问器的实例化不再被缓存(GH 47667, GH 41357)Categorical.categories
如果构造的values
是一个range
,则返回一个RangeIndex
列,而不是一个Index
。 (GH 57787)DataFrame
在可能的情况下返回一个RangeIndex
列,当data
是一个dict
时 (GH 57943)Series
在data
是dict
时尽可能返回RangeIndex
索引(GH 58118)concat()
在objs
包含Series
和DataFrame
且axis=0
时,尽可能返回一个RangeIndex
列 (GH 58119)concat()
在keys
是range
或RangeIndex
时,在MultiIndex
结果中返回一个RangeIndex
级别 (GH 57542)RangeIndex.append()
在追加可以继续RangeIndex
的值时返回一个RangeIndex
而不是Index
(GH 57467)Series.str.extract()
在可能的情况下返回RangeIndex
列,而不是Index
列(GH 57542)Series.str.partition()
与ArrowDtype
返回一个RangeIndex
列,而不是一个Index
列(如果可能的话)(GH 57768)在
DataFrame.join()
中对已排序但非唯一索引的性能改进 (GH 56941)当左和/或右是非唯一且
how
为"left"
,"right"
, 或"inner"
时,DataFrame.join()
的性能改进 (GH 56817)在
DataFrame.join()
中使用how="left"
或how="right"
并且sort=True
时的性能提升 (GH 56919)在
DataFrameGroupBy.ffill()
、DataFrameGroupBy.bfill()
、SeriesGroupBy.ffill()
和SeriesGroupBy.bfill()
中的性能提升 (GH 56902)通过在结果匹配其中一个输入的情况下传播缓存属性,改进了
Index.join()
的性能 (GH 57023)当
indices
是从零到索引长度的完整范围索引器时,Index.take()
的性能改进 (GH 56806)在可能的情况下,
Index.to_frame()
返回一个RangeIndex
列的Index
的性能改进。(GH 58018)在
MultiIndex._engine()
中性能改进,如果可能的话使用更小的数据类型 (GH 58411)在等长索引中对
MultiIndex.equals()
的性能改进 (GH 56990)在
MultiIndex.memory_usage()
中性能改进,当索引引擎尚未缓存时忽略它。(GH 58385)在
RangeIndex.__getitem__()
中使用布尔掩码或整数返回RangeIndex
而不是Index
时,性能有所提升(GH 57588)。在追加相同索引时,
RangeIndex.append()
的性能提升 (GH 57252)在
RangeIndex.argmin()
和RangeIndex.argmax()
中的性能提升 (GH 57823)在
RangeIndex.insert()
中性能改进,当RangeIndex
为空时返回RangeIndex
而不是Index
。 (GH 57833)在可能的情况下,
RangeIndex.round()
的性能改进,返回RangeIndex
而不是Index
。(GH 57824)在
RangeIndex.searchsorted()
中的性能提升 (GH 58376)在指定
na_value
时,RangeIndex.to_numpy()
的性能改进 (GH 58376)在
RangeIndex.value_counts()
中的性能提升 (GH 58376)在可能的情况下,
RangeIndex.join()
的性能改进,返回RangeIndex
而不是Index
。(GH 57651, GH 57752)在
RangeIndex.reindex()
中性能改进,当可能时返回RangeIndex
而不是Index
。(GH 57647, GH 57752)在可能的情况下,
RangeIndex.take()
的性能改进,返回RangeIndex
而不是Index
。(GH 57445, GH 57752)在
to_hdf()
中的性能改进避免了不必要的重新打开 HDF5 文件,以加快向具有大量组的数据文件添加数据的速度。(GH 58248)在
DataFrameGroupBy.__len__
和SeriesGroupBy.__len__
中的性能提升 (GH 57595)字符串dtypes索引操作的性能改进 (GH 56997)
在
RangeIndex
上的一元方法性能改进,当可能时返回RangeIndex
而不是Index
。(GH 57825)
错误修复#
Categorical#
Datetimelike#
在
is_year_start
中的错误,通过频率为 ‘MS’ 的 date_range 构建的 DateTimeIndex 不会具有正确的年或季度开始属性 (GH 57377)Timestamp
构造函数中的错误,当明确指定tz=None
时,未能与时区感知的tzinfo
或数据一起引发 (GH 48688)在
date_range()
中的一个错误,有时不会生成最后一个有效的时间戳 (GH 56134)在
date_range()
中的一个错误,使用负频率值时不会包含开始值和结束值之间的所有点 (GH 56147)在
tseries.api.guess_datetime_format()
中的错误会导致当 “%Y” == “%H%M” 时无法推断时间格式 (GH 57452)tseries.frequencies.to_offset()
中的错误将无法解析以 “LWOM” 开头的频率字符串 (GH 59218)在包含缺失值的 df 中使用
Dataframe.agg()
时出现的 Bug 导致 IndexError (GH 58810)DatetimeIndex.is_year_start()
和DatetimeIndex.is_quarter_start()
中的错误在自定义工作日频率大于“1C”时不会引发 (GH 58664)在
DatetimeIndex.is_year_start()
和DatetimeIndex.is_quarter_start()
中存在一个错误,在双位数频率上返回False
(GH 58523)当
unit
不是纳秒时,DatetimeIndex.union()
和DatetimeIndex.intersection()
中的错误 (GH 59036)Series.dt.microsecond()
中的错误导致为 pyarrow 支持的Series
产生不正确的结果。(GH 59154)在
to_datetime()
中的错误,如果不常见的日期字符串被传递,则不尊重 dayfirst。(GH 58859)在将分辨率不匹配的标量值设置到非纳秒
datetime64
、timedelta64
或DatetimeTZDtype
数组中时,错误地截断这些标量的问题 (GH 56410)
Timedelta#
在
Timedelta.to_pytimedelta()
中提高精度,以一致地四舍五入基于大纳秒的 Timedelta 的微秒 (GH 57841)在
DataFrame.cumsum()
中的错误,如果 dtype 是timedelta64[ns]
则会引发IndexError
(GH 57956)
时区#
Numeric#
在
DataFrame.quantile()
中的一个错误,当numeric_only=True
且q
是类列表时,列类型未被保留,导致产生空结果 (GH 59035)
转换#
DataFrame.astype()
中的错误未正确转换基于 Arrow 的字典数据类型的values
(GH 58479)在
DataFrame.update()
中布尔数据类型被转换为对象的错误 (GH 55509)在
Series.astype()
中的错误可能会在转换为字符串数据类型时原地修改只读数组 (GH 57212)在
Series.reindex()
中的错误,当reindex
引入缺失值时不保持float32
类型 (GH 45857)
字符串#
Series.value_counts()
中的错误不会尊重string
dtype 的系列中的sort=False
(GH 55224)
Interval#
Index.is_monotonic_decreasing()
,Index.is_monotonic_increasing()
, 和Index.is_unique()
对于从一个Index
的切片创建的Index
可能会错误地返回False
。 (GH 57911)在
interval_range()
中的一个错误,其中起始和结束数值类型总是被转换为64位 (GH 57268)
索引#
在 Python 3.12 中,当使用
slice
调用时,DataFrame.__getitem__()
返回修改后的列的错误 (GH 57500)DataFrame.from_records()
在index
中传递空列表时抛出ValueError
的错误 (GH 58594)
缺失#
在
DataFrame.fillna()
和Series.fillna()
中的错误,会忽略ExtensionArray
dtypes 上的limit
参数 (GH 58001)
MultiIndex#
DataFrame.loc()
使用axis=0
和MultiIndex
在设置值时会添加额外的列 (GH 58116)DataFrame.melt()
在列是MultiIndex
时不会接受var_name
中的多个名称(GH 58033)MultiIndex.insert()
不会在索引 -1 的统一位置正确插入 NA 值 (GH 59003)MultiIndex.get_level_values()
访问一个DatetimeIndex
不会携带频率属性 (GH 58327, GH 57949)
I/O#
DataFrame
和Series
的repr
中collections.abc.Mapping
元素的错误。(GH 57915)当
"index"
是DataFrame.column
中的一个值且Index.name
为None
时,DataFrame.to_json()
中的错误。现在,这将引发一个ValueError
(GH 58925)在
DataFrame.to_dict()
中的错误在列不唯一且orient='tight'
时会引发不必要的UserWarning
。 (GH 58281)当在两个轴上使用
MultiIndex
写入空的DataFrame
时,DataFrame.to_excel()
中的错误 (GH 57696)在写入
DataFrame
和byteorder=`big`
时,DataFrame.to_stata()
中的错误。(GH 58969)在
DataFrame.to_string()
中出现的错误,当使用嵌套的 DataFrame 时会引发StopIteration
。 (GH 16098)HDFStore.get()
中的错误未能正确保存 dtype datetime64[s] 的数据 (GH 59004)当
encoding_errors
不是字符串时,read_csv()
中的错误导致段错误。(GH 59059)当指定
index_col
并且na_values
是一个包含键None
的字典时,read_csv()
中的错误引发TypeError
。(GH 57547)在未指定
chunksize
的情况下,当指定nrows
和iterator
时,read_csv()
中的错误引发TypeError
。 (GH 59079)在
dtype="boolean"
时传递布尔值数组时,read_excel()
中的错误引发ValueError
。(GH 58159)read_json()
中的错误未验证typ
参数不完全是"frame"
或"series"
(GH 59124)当输入文件以大端格式存储并包含 strL 数据时,
read_stata()
中的错误会引发KeyError
。(GH 58638)在
read_stata()
中的错误,其中极值整数在格式版本 111 及之前被错误地解释为缺失 (GH 58130)在
read_stata()
中的错误,其中对于格式版本105及之前的双精度缺失代码未被识别 (GH 58149)
周期#
当向
PeriodIndex.to_timestamp()
传递无效的周期别名时修复错误消息 (GH 58974)
绘图#
当存在多个分组时,
DataFrameGroupBy.boxplot()
中的错误失败 (GH 14701)Bug in
DataFrame.plot.line()
raisingValueError
when set both color and adict
style (GH 59461)在
DataFrame.plot()
中的一个错误,当频率乘数大于一时会导致向右偏移。(GH 57587)在带有
kind="pie"
的Series.plot()
中使用ArrowDtype
的错误 (GH 59192)
分组/重采样/滚动#
DataFrameGroupBy.__len__()
和SeriesGroupBy.__len__()
中的错误会在分组包含NA值且dropna=False
时引发 (GH 58644)在
DataFrameGroupBy.groups()
和SeriesGroupby.groups()
中的错误,不会尊重 groupby 参数dropna
(GH 55919)在
DataFrameGroupBy.median()
中的错误,其中 nat 值给出了不正确的结果。(GH 57926)Bug in
DataFrameGroupBy.quantile()
wheninterpolation="nearest"
is inconsistent withDataFrame.quantile()
(GH 47942)在具有非均匀采样和/或索引与结果重采样索引不一致的
DataFrame
上使用Resampler.interpolate()
会导致错误的插值 (GH 21351)当传递
times
和非均值的聚合函数时,DataFrame.ewm()
和Series.ewm()
中的错误 (GH 51695)在
DataFrameGroupBy.agg()
中存在一个错误,当输入是字典且存在重复列时,会引发AttributeError
,而不是返回包含所有重复列聚合的 DataFrame。 (GH 55041)DataFrameGroupBy.apply()
中的一个错误,当func
的所有返回值都是None
时,返回一个完全空的 DataFrame,而不是返回一个具有原始列和数据类型的空 DataFrame。(GH 57775)在
as_index=False
的情况下,DataFrameGroupBy.apply()
中的一个错误,返回的是MultiIndex
而不是Index
。 (GH 58291)在
DataFrameGroupBy.cumsum()
和DataFrameGroupBy.cumprod()
中的错误,其中numeric_only
参数通过 kwargs 间接传递,而不是直接传递。(GH 58811)DataFrameGroupBy.cumsum()
中的一个错误,当标签包含None
时,它没有返回正确的 dtype。(GH 58811)在
DataFrameGroupby.transform()
和SeriesGroupby.transform()
中存在一个错误,当使用归约器和observed=False
时,如果有未观察到的类别,会将数据类型强制转换为浮点型。(GH 55326)Bug in
Rolling.apply()
中,如果method="table"
,应用的函数可能在少于min_period
个周期内被调用。(GH 58868)Series.resample()
中的错误在日期范围在非常接近一个不存在的时间结束时可能会引发。(GH 58380)
重塑#
在
DataFrame.join()
中设置结果索引名称不一致的错误 (GH 55815)在
DataFrame.merge()
中的一个错误,当在仅包含NaN
值的列上进行合并时,会导致数组越界访问 (GH 59421)DataFrame.unstack()
中的错误在sort=False
时产生不正确的结果 (GH 54987, GH 55516)在操作带有
ExtentionDtype
的空DataFrame
时,DataFrame.unstack()
中的错误产生不正确的结果 (GH 59123)
Sparse#
在
SparseDtype
中进行与 na 填充值的相等比较时存在错误。(GH 54770)DataFrame.sparse.from_spmatrix()
中的一个错误,该错误对某些子类型硬编码了一个无效的fill_value
。 (GH 59063)
ExtensionArray#
在
arrays.ArrowExtensionArray.__setitem__()
中的错误,当使用带有重复值的整数数组作为键时会导致错误行为 (GH 58530)在
api.types.is_datetime64_any_dtype()
中的一个错误,其中自定义的ExtensionDtype
会对类数组返回False
(GH 57055)在比较带有
ArrowDtype
的对象和类型不兼容的对象(例如字符串与布尔值)时,错误地引发异常,而不是返回全``False``(对于``==``)或全``True``(对于``!=``)(GH 59505)在各种
DataFrame
缩减中,当结果为空时,pyarrow 时间型数据类型返回不正确的数据类型 (GH 59234)
Styler#
其他#
当传递一个包含NA标量和``columns``的``dict``时,
DataFrame
中的Bug总是返回``np.nan`` (GH 57205)在
ExtensionArray
上使用eval()
包含除法/
时失败并出现TypeError
。 (GH 58748)在
eval()
中的一个错误,当使用engine="numexpr"
时,Series
的名称没有被保留。(GH 10239)Bug in
DataFrame.apply()
where passingengine="numba"
ignoredargs
passed to the applied function (GH 58712)Bug in
DataFrame.eval()
和DataFrame.query()
,在使用@
符号通过 NumPy 属性时会导致异常,例如df.eval("@np.floor(a)")
。(GH 58041)在
DataFrame.eval()
和DataFrame.query()
中的错误,不允许使用tan
函数。(GH 55091)在
DataFrame.query()
中的一个错误,当表达式包含含有哈希字符#
、反引号或超出 ASCII 范围(U+0001..U+007F)的字符的反引号引用列名时,会引发异常或产生不正确的结果。(GH 59285) (GH 49633)在传递
axis="columns"
和ignore_index=True
以及ascending=False
时,DataFrame.sort_index()
中的错误不会返回RangeIndex
列 (GH 57293)在
DataFrame.transform()
中的一个错误,除非索引是单调递增的,否则会返回错误的顺序。(GH 57069)在
DataFrame.where()
中的一个错误,在函数中使用非布尔类型的数组会返回一个ValueError
而不是TypeError
(GH 56330)在传递一个将值转换为元组的键函数时,例如
key=natsort.natsort_key
,Index.sort_values()
中的错误会引发TypeError
(GH 56081)在
Series.diff()
中的错误,允许periods
参数使用非整数值。 (GH 56607)在
ArrowDtype
中的Series.dt()
方法存在一个错误,返回了不正确的值。(GH 57355)在
na_option='keep'
时,Series.rank()
中不保留可空整数缺失值的错误。(GH 56976)在
Series.replace()
和DataFrame.replace()
中存在一个错误,当regex=True
且存在缺失值时,不一致地替换匹配的实例。(GH 56599)在 Dataframe 交换协议实现中的一个错误,对于数据缓冲区相关的 dtype,字符串和日期时间列返回了不正确的结果 (GH 54781)