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 thehowparameter 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_gbqhttps://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()中的错误不会尊重stringdtype 的系列中的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()中的错误,会忽略ExtensionArraydtypes 上的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()raisingValueErrorwhen set both color and adictstyle (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"ignoredargspassed 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)