3.0.0 中的新功能 (2026 年 1 月 21 日)#
这些是 pandas 3.0.0 中的更改。有关包括其他 pandas 版本在内的完整变更日志,请参阅发布说明。
注意
pandas 3.0 版本删除了许多在先前版本中已弃用的功能(有关概述,请参阅下方)。建议在升级到 pandas 3.0 之前,首先升级到 pandas 2.3 并确保您的代码在没有警告的情况下正常运行。
增强功能#
默认使用专用的字符串数据类型#
历史上,pandas 使用 NumPy 的 object 数据类型来表示字符串列。这种表示方法存在许多问题:它不专门用于字符串(object 类型的数组可以存储任何 Python 对象,而不仅仅是字符串),而且通常效率不高(在性能和内存使用方面)。
从 pandas 3.0 开始,默认启用专用的字符串数据类型(底层由 PyArrow 支持,如果已安装;否则,回退到由 NumPy object 类型支持)。这意味着 pandas 在创建 pandas 对象(例如在构造函数或 I/O 函数中)时,将开始将包含字符串数据的列推断为新的 str 数据类型。
旧行为
>>> ser = pd.Series(["a", "b"])
0 a
1 b
dtype: object
新行为
>>> ser = pd.Series(["a", "b"])
0 a
1 b
dtype: str
在这些场景中使用的字符串数据类型在很大程度上将表现得像 NumPy object 一样,包括缺失值语义和这些列上的通用操作。
新字符串数据类型的主要特性
默认推断字符串数据(而不是 object 类型)
与
object类型不同,str类型只能包含字符串(或缺失值)。(用非字符串进行 setitem 会失败)缺失值标记始终是
NaN(np.nan),并且遵循与其他默认数据类型相同的缺失值语义。
这些有意进行的更改可能导致破坏性后果,例如在检查 .dtype 是否为 object 类型或检查确切的缺失值标记时。有关行为更改的更多详细信息以及如何使您的代码适应新的默认设置,请参阅新字符串数据类型迁移指南(pandas 3.0)。
Copy-on-Write 的一致复制/视图行为#
pandas 3.0 中的新“Copy-on-Write”行为在 pandas 处理复制和视图的方式上带来了行为上的改变。变更摘要
任何索引操作(以任何方式子集化 DataFrame 或 Series,即包括将 DataFrame 列作为 Series 访问)或返回新的 DataFrame 或 Series 的任何方法的结果,在用户 API 方面始终表现得像是复制。
因此,如果您想修改一个对象(DataFrame 或 Series),唯一的方法是直接修改该对象本身。
此更改的主要目标是使用户 API 更加一致和可预测。现在有一个明确的规则:任何子集或返回的 Series/DataFrame 始终表现为原始对象的副本,因此永远不会修改原始对象(在 pandas 3.0 之前,派生对象是副本还是视图取决于执行的确切操作,这常常令人困惑)。
由于每个索引步骤现在都表现为副本,这也意味着“链式赋值”(通过多个 setitem 步骤更新 DataFrame)将停止工作。由于这现在始终无效,因此移除了 SettingWithCopyWarning,并且不再需要防御性地调用 .copy() 来抑制警告。
新行为语义在关于 Copy-on-Write 的用户指南中有更详细的解释。
次要目标是通过避免不必要的复制来提高性能。如上所述,从索引操作或方法返回的每个新的 DataFrame 或 Series 都表现为副本,但在底层,pandas 会尽可能使用视图,仅在需要保证“表现为副本”的行为时才复制(这是实际使用的“Copy-on-Write”机制作为实现细节)。
上述某些行为更改是 pandas 3.0 中的破坏性更改。升级到 pandas 3.0 时,建议首先升级到 pandas 2.3,以获取这些更改子集的一些弃用警告。迁移指南更详细地解释了升级过程。
设置 mode.copy_on_write 选项不再有任何影响。该选项已被弃用,将在 pandas 4.0 中删除。
初步支持使用 pd.col() 语法创建表达式#
此版本引入了 col(),用于按名称引用 DataFrame 列并构建表达式。
这可以用作一种简化的语法,用于创建可调用对象,供 DataFrame.assign() 等方法使用。实际上,以前需要使用 lambda 函数的地方,现在可以使用 pd.col() 代替。
例如,如果您有一个 DataFrame
In [1]: df = pd.DataFrame({'a': [1, 1, 2], 'b': [4, 5, 6]})
并且您想通过对 'a' 和 'b' 求和来创建一个新列 'c',那么与使用
In [2]: df.assign(c = lambda df: df['a'] + df['b'])
Out[2]:
a b c
0 1 4 5
1 1 5 6
2 2 6 8
您现在可以这样写
In [3]: df.assign(c = pd.col('a') + pd.col('b'))
Out[3]:
a b c
0 1 4 5
1 1 5 6
2 2 6 8
col() 返回的表达式对象支持所有标准运算符(如 +、-、*、/ 等)以及所有 Series 方法和命名空间(如 pd.col("name").sum()、pd.col("name").str.upper() 等)。
目前,pd.col() 语法可以用于接受一个可调用对象(该对象将调用它的 DataFrame 作为第一个参数并返回一个 Series)的任何地方,例如 lambda df: df[col_name]。这包括 DataFrame.assign()、DataFrame.loc(),以及 getitem/setitem。
预计在未来的版本中,pd.col() 的支持将扩展到更多方法。
支持 Arrow PyCapsule 接口#
Arrow C 数据接口允许通过 Arrow 格式在不同 DataFrame 库之间移动数据,并且尽可能设计为零拷贝。在 Python 中,该接口通过 Arrow PyCapsule 协议公开。
DataFrame 和 Series 现在支持 Arrow PyCapsule 接口,用于数据的导出和导入(GH 56587,GH 63208,GH 59518,GH 59631)。
添加了专用的 DataFrame.from_arrow() 和 Series.from_arrow() 方法,用于通过该接口将任何 Arrow 兼容的数据对象导入 pandas 对象。
对于导出,DataFrame 和 Series 实现 C 流接口(__arrow_c_stream__)方法。
这些方法目前依赖 pyarrow 将表格对象转换为 Arrow 格式或从 Arrow 格式转换为 pandas。
更新的弃用策略#
pandas 3.0.0 更新了弃用策略,使用新的 3 阶段策略来明确将发出哪些弃用警告:首先使用 DeprecationWarning,然后在下一个主要版本之前的最后一个次要版本中切换到 FutureWarning 以获得更广泛的可见性,然后在主要版本中删除已弃用的功能。这样做的目的是为下游包提供更多时间来适应 pandas 的弃用,这应该会减少用户从非自己代码中收到的警告数量。有关更多详细信息,请参阅PDEP 17。
pandas 中即将发生的所有更改的警告都将具有基类 pandas.errors.PandasChangeWarning。用户还可以使用以下子类来控制警告。
pandas.errors.Pandas4Warning:将在 pandas 4.0 中强制执行的警告。pandas.errors.Pandas5Warning:将在 pandas 5.0 中强制执行的警告。pandas.errors.PandasPendingDeprecationWarning:所有发出PendingDeprecationWarning的警告的基类,无论它们将在哪个版本中强制执行。pandas.errors.PandasDeprecationWarning:所有发出DeprecationWarning的警告的基类,无论它们将在哪个版本中强制执行。pandas.errors.PandasFutureWarning:所有发出FutureWarning的警告的基类,无论它们将在哪个版本中强制执行。
在 3.x 中使用 pandas.errors.Pandas4Warning 添加的弃用将最初继承自 pandas.errors.PandasDeprecationWarning。在 3.x 系列的最后一个次要版本中,这些弃用将切换为继承自 pandas.errors.PandasFutureWarning,以获得更广泛的可见性。
其他增强功能#
I/O
改进了
errors.DtypeWarning,在检测到混合数据类型时包含列名(GH 58174)在
DataFrame.to_excel()中,merge_cells参数现在接受值"columns",仅合并MultiIndex列标题单元格(GH 35384)DataFrame.to_excel()有一个新的autofilter参数,用于为所有列添加自动过滤器(GH 61194)当单元格中的字符数超过 Excel 的 32767 个字符限制时,
DataFrame.to_excel()现在会引发UserWarning(GH 56954)read_parquet()接受to_pandas_kwargs,它会被转发到pyarrow.Table.to_pandas(),这使得可以传递额外的关键字参数来自定义转换为 pandas 的过程,例如使用maps_as_pydicts将 Parquet 映射数据类型读取为 Python 字典(GH 56842)read_spss()现在支持将 kwargs 传递给pyreadstat(GH 56356)read_stata()现在返回的datetime64分辨率能更好地匹配 Stata 格式中原生存储的分辨率(GH 55642)DataFrame.to_csv()和Series.to_csv()现在除了%格式字符串和可调用对象之外,还支持 f-string(例如"{:.6f}")用于float_format参数(GH 49580)DataFrame.to_json()现在将Decimal编码为字符串而不是浮点数(GH 60698)在
DataFrame.to_sql()的if_exists参数中添加了"delete_rows"选项,在插入数据之前删除表中的所有记录(GH 37210)。使用新的
read_iceberg()和DataFrame.to_iceberg()函数,添加了与 Apache Iceberg 表进行读写支持(GH 61383)SQL I/O 期间发生的错误现在将抛出通用
DatabaseError,而不是来自底层驱动程序管理器库的原始 Exception 类型(GH 60748)恢复了对读取 Stata 104 格式的支持,并启用了对 103 格式 dta 文件的读取(GH 58554)
支持读取 Stata 102 格式(Stata 1)dta 文件(GH 58978)
支持读取 Stata 110 格式(Stata 7)dta 文件(GH 47176)
支持从 Stata 108 格式(Stata 6)及更早的文件中读取值标签(GH 58154)
Groupby/resample/rolling
pandas.NamedAgg现在支持将*args和**kwargs传递给aggfunc的调用(GH 58283)DataFrameGroupBy和SeriesGroupBy方法sum、mean、median、prod、min、max、std、var和sem现在接受skipna参数(GH 15675)DataFrameGroupBy.transform()、SeriesGroupBy.transform()、DataFrameGroupBy.agg()、SeriesGroupBy.agg()、RollingGroupby.apply()、ExpandingGroupby.apply()、Rolling.apply()、Expanding.apply()、DataFrame.apply()(使用engine="numba")现在支持作为 kwargs 传递的位置参数(GH 58995)DataFrameGroupBy.transform()、SeriesGroupBy.transform()、DataFrameGroupBy.agg()、SeriesGroupBy.agg()、SeriesGroupBy.apply()、DataFrameGroupBy.apply()现在支持kurt(GH 40139)Rolling.aggregate()、Expanding.aggregate()和ExponentialMovingWindow.aggregate()现在通过**kwargs接受NamedAgg聚合(GH 28333)添加了
Rolling.first()、Rolling.last()、Expanding.first()和Expanding.last()(GH 33155)
Reshaping
pandas.merge()会将attrs属性传播到结果,如果所有输入具有相同的attrs,这与pandas.concat()迄今为止的情况相同。pandas.merge()现在会验证how参数的输入(合并类型)(GH 59435)pandas.merge(),DataFrame.merge()和DataFrame.join()现在支持反连接(left_anti和right_anti)在how参数中(GH 42916)DataFrame.pivot_table()和pivot_table()现在允许通过**kwargs将关键字参数传递给aggfunc(GH 57884)pandas.concat()当ignore_index=True且keys不为None时将引发ValueError(GH 59274)
Missing
DataFrame.fillna()和Series.fillna()现在可以接受value=None;对于非对象 dtype,将使用相应的 NA 值(GH 57723)在
DataFrame.fillna()中,添加了对axis=1与dict或Series参数的支持(GH 4514)
数值
当
DataFrame.agg()使用axis=1和一个会重新标记结果索引的func调用时,现在会引发NotImplementedError(GH 58807)。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)Series.cummin()和Series.cummax()现在支持CategoricalDtype(GH 52335)Series.map()现在可以接受 kwargs 来传递给 func(GH 59814)Series.nlargest()在内部使用稳定排序,在相等的情况下会保留原始顺序(GH 55767)Series.round()现在支持对象 dtype,前提是底层 Python 对象实现了__round__(GH 63444)支持将
Iterable[Hashable]输入传递给DataFrame.drop_duplicates()(GH 59237)
字符串
Series.str.get_dummies()现在接受dtype参数来指定结果 DataFrame 的 dtype(GH 47872)允许通过
pat参数将字典传递给Series.str.replace()(GH 51748)
Datetimelike
Easter获得了一个新的构造函数参数method,它指定了用于计算复活节的方法,例如东正教复活节(GH 61665)Holiday构造函数参数days_of_week在类型不是None或tuple时将引发ValueError(GH 61658)Holiday获得了构造函数参数和字段exclude_dates,用于从自定义假日日历中排除特定的日期时间(GH 54382)添加了半年度偏移类
HalfYearBegin、HalfYearEnd、BHalfYearBegin和BHalfYearEnd(GH 60928)改进了偏移量别名的弃用消息(GH 60820)
将两个
DateOffset对象相乘现在将引发TypeError而不是RecursionError(GH 59442)
索引
DataFrame.iloc()和Series.iloc()在__getitem__中现在支持布尔掩码,以实现更一致的索引行为(GH 60994)Index.get_loc()现在也接受tuple的子类作为键(GH 57922)
Styler / 输出格式
Styler.set_tooltips()提供了一种替代方法来存储工具提示,通过使用 td 元素的 title 属性。(GH 56981)添加了
Styler.to_typst(),用于将 Styler 对象写入 Typst 格式的文件、缓冲区或字符串(GH 57617)Styler.format_index_names()现在可用于格式化索引和列名(GH 48936 和 GH 47489)pandas 对象中的
frozenset元素现在可以本机打印(GH 60690)
类型提示
pandas.api.typing.FrozenList可用于对MultiIndex.names、MultiIndex.codes和MultiIndex.levels的输出进行类型提示(GH 58237)pandas.api.typing.NoDefault可用于对no_default进行类型提示(GH 60696)pandas.api.typing.SASReader可用于对read_sas()的输出进行类型提示(GH 55689)许多类型别名现在已在新子模块
pandas.api.typing.aliases中公开(GH 55231)
绘图
Series.plot()现在可以正确处理饼图的ylabel参数,从而允许对 y 轴标签进行显式控制(GH 58239)在
DataFrame.plot.kde()中为 PDF 估计添加了缺失的weights参数(GH 59337)DataFrame.plot.scatter()参数c现在接受一个字符串列,其中具有相同字符串的行会被着色相同(GH 16827 和 GH 16485)
ExtensionArray
ArrowDtype现在支持pyarrow.JsonType(GH 60958)使用 numpy 可空 dtype 的
Series.rank()和DataFrame.rank()会保留NA值,并在适当的时候返回UInt64dtype,而不是将NA转换为float64dtype 的NaN(GH 62043)改进了
DataFrame.where()和DataFrame.mask()在使用ExtensionDtypeother时的结果 dtype(GH 62038)
其他
set_option()现在接受一个选项字典,从而简化了多个设置的同时配置(GH 61093)DataFrame.apply()支持使用第三方执行引擎,如 Bodo.ai JIT 编译器(GH 60668)Series.map()现在接受一个engine参数,以允许使用第三方执行引擎进行执行(GH 61125)支持将
Series输入传递给json_normalize(),并保留Index(GH 51452)用户可以通过将选项
mode.performance_warnings设置为False来全局禁用任何PerformanceWarning(GH 56920)
打包
重要的 bug 修复#
这些 bug 修复可能带来行为上的显著变化。
改进了 groupby 中 observed=False 的行为#
通过改进对未观察到的组的处理,修复了许多错误。本节中的所有说明都同样影响 SeriesGroupBy。(GH 55738)
在 pandas 的先前版本中,使用 DataFrameGroupBy.apply() 或 DataFrameGroupBy.agg() 进行单次分组会将未观察到的组传递给提供的函数,从而正确得到下方的 0。
In [4]: df = pd.DataFrame(
...: {
...: "key1": pd.Categorical(list("aabb"), categories=list("abc")),
...: "key2": [1, 1, 1, 2],
...: "values": [1, 2, 3, 4],
...: }
...: )
...:
In [5]: df
Out[5]:
key1 key2 values
0 a 1 1
1 a 1 2
2 b 1 3
3 b 2 4
In [6]: gb = df.groupby("key1", observed=False)
In [7]: gb[["values"]].apply(lambda x: x.sum())
Out[7]:
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 [8]: gb = df.groupby(["key1", "key2"], observed=False)
In [9]: gb[["values"]].apply(lambda x: x.sum())
Out[9]:
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 中的某些错误
当存在多重分组、未观察到的组且
as_index=False时,DataFrameGroupBy.agg()会失败(GH 36698)当
sort=False时,DataFrameGroupBy.groups()会对组进行排序;现在它们将按照观察到的顺序出现(GH 56966)当存在多重分组、未观察到的组且
as_index=False时,DataFrameGroupBy.nunique()会失败(GH 52848)当存在多重分组、未观察到的组且存在非数字数据时,
DataFrameGroupBy.sum()的值不正确(GH 43891)当使用部分分类和部分非分类分组以及
observed=False时,DataFrameGroupBy.value_counts()会产生不正确的结果(GH 56016)
向后不兼容的 API 更改#
日期时间/时间差分辨率推断#
在 pandas 3.0 之前,每当将字符串序列、标准库 datetime 对象、np.datetime64 对象或整数转换为 datetime64 / timedelta64 dtype 时,这总是会导致纳秒分辨率(或因超出范围而引发错误)。现在,它会对适当的分辨率(也称为 unit)进行推断,用于输出 dtype。这会影响通用构造函数(Series、DataFrame、Index、DatetimeIndex)以及特定的转换或创建函数(to_datetime()、to_timedelta()、date_range()、timedelta_range()、Timestamp、Timedelta)。
各种输入类型的通用规则
解析字符串时的默认新分辨率为微秒,当字符串的精度需要时,会回退到纳秒。
对于标准库
datetime对象(即微秒)或np.datetime64/np.timedelta64对象(即单位,最多支持到秒到纳秒的范围),输入的分辨率会被保留。对于整数输入,解析整数值的方式被用作结果分辨率(或被限制在支持的秒到纳秒范围内)。
例如,以下在以前总是会给出纳秒分辨率,但现在会推断
# parsing strings
In [10]: print(pd.to_datetime(["2024-03-22 11:36"]).dtype)
datetime64[us]
# converting integers
In [11]: print(pd.to_datetime([0], unit="s").dtype)
datetime64[s]
# converting stdlib datetime object
In [12]: dt = pd.Timestamp("2024-03-22 11:36").to_pydatetime()
In [13]: print(pd.to_datetime([dt]).dtype)
datetime64[us]
# the same when inferring a datetime dtype in the generic constructors
In [14]: print(pd.Series([dt]).dtype)
datetime64[us]
# converting numpy objects
In [15]: print(pd.Series([np.datetime64("2024-03-22", "ms")]).dtype)
datetime64[ms]
当传入一系列 np.datetime64 对象时,也会有类似的情况,传入对象的解析度将被保留(或者对于低于秒的分辨率,将使用秒分辨率)。
解析字符串时,默认现在是微秒(这也影响从文本文件读取的 I/O 方法,例如 read_csv() 和 read_json())。除非字符串具有纳秒精度,在这种情况下将使用纳秒分辨率。
In [16]: print(pd.to_datetime(["2024-03-22 11:43:01.123"]).dtype)
datetime64[us]
In [17]: print(pd.to_datetime(["2024-03-22 11:43:01.123456"]).dtype)
datetime64[us]
In [18]: print(pd.to_datetime(["2024-03-22 11:43:01.123456789"]).dtype)
datetime64[ns]
对于带有字符串输入的 Timestamp 构造函数来说,这也有一个变化,在版本 2.x.y 中,这可能会给出秒或毫秒单位(GH 52653)。
警告
许多用户现在将在他们以前得到“datetime64[ns]”数据类型的情况下得到“datetime64[us]”数据类型。对于大多数用例,他们应该不会注意到差异。一个大的例外是将它们转换为整数,这将得到小 1000 倍的整数。
当将日期时间类数据转换为整数时,建议避免使用 astype("int64") 以使代码不依赖于确切的单位,或者在转换之前确保所需的单位,使用 as_unit()。
有关更多详细信息,请参阅 从时间戳到 epoch。
concat() 不再忽略 sort 参数,当所有对象都有 DatetimeIndex 时#
当传递给 concat() 的所有对象都具有 DatetimeIndex 时,传递 sort=False 现在将导致非连接轴不排序。以前,即使传递了 sort=False,结果也会沿着非连接轴排序。(GH 57335)
如果您不指定 sort 参数,pandas 将继续返回排序结果,但此行为已被弃用,您将收到警告。为了减少对用户的干扰,pandas 会检查不排序是否会影响结果,并且仅在会影响时发出警告。此检查可能很耗时,用户可以通过显式指定 sort=True 或 sort=False 来跳过此检查。
此弃用也可能影响 pandas 对 concat() 的内部使用。以下是 concat() 对 DatetimeIndex 进行排序但不对其他索引进行排序的情况,这些情况被视为错误并已按如下方式修复。但仍有可能遗漏一些。为了谨慎起见,pandas 未 在我们认为行为不应改变的任何内部调用中添加 sort=False。如果我们遗漏了什么,用户将不会体验到行为改变,但他们将收到关于 concat() 的警告,尽管他们没有直接调用此函数。如果发生这种情况,我们要求用户提出问题,以便我们解决任何潜在的行为变更。
In [19]: idx1 = pd.date_range("2025-01-02", periods=3, freq="h")
In [20]: df1 = pd.DataFrame({"a": [1, 2, 3]}, index=idx1)
In [21]: df1
Out[21]:
a
2025-01-02 00:00:00 1
2025-01-02 01:00:00 2
2025-01-02 02:00:00 3
In [22]: idx2 = pd.date_range("2025-01-01", periods=3, freq="h")
In [23]: df2 = pd.DataFrame({"b": [1, 2, 3]}, index=idx2)
In [24]: df2
Out[24]:
b
2025-01-01 00:00:00 1
2025-01-01 01:00:00 2
2025-01-01 02:00:00 3
旧行为
In [3]: pd.concat([df1, df2], axis=1, sort=False)
Out[3]:
a b
2025-01-01 00:00:00 NaN 1.0
2025-01-01 01:00:00 NaN 2.0
2025-01-01 02:00:00 NaN 3.0
2025-01-02 00:00:00 1.0 NaN
2025-01-02 01:00:00 2.0 NaN
2025-01-02 02:00:00 3.0 NaN
新行为
In [25]: pd.concat([df1, df2], axis=1, sort=False)
Out[25]:
a b
2025-01-02 00:00:00 1.0 NaN
2025-01-02 01:00:00 2.0 NaN
2025-01-02 02:00:00 3.0 NaN
2025-01-01 00:00:00 NaN 1.0
2025-01-01 01:00:00 NaN 2.0
2025-01-01 02:00:00 NaN 3.0
在此版本中修复的 pandas 内部使用 concat() 导致不一致排序的情况如下。
Series.apply()和DataFrame.apply()使用列表类或字典类func参数。Series.shift()、DataFrame.shift()、SeriesGroupBy.shift()、DataFrameGroupBy.shift()使用长度大于 1 的periods参数列表。DataFrame.join()使用other为一个或多个 Series 或 DataFrames 的列表,并且how="inner"、how="left"或how="right"。Series.str.cat()使用others作为 Series 或 DataFrame。
在 DataFrame.value_counts() 和 DataFrameGroupBy.value_counts() 中,当 sort=False 时行为已更改#
在 pandas 的先前版本中,DataFrame.value_counts() 和 sort=False 会按行标签对结果进行排序(如文档所述)。这不符合直觉,并且与 Series.value_counts() 保持输入顺序的行为不一致。现在 DataFrame.value_counts() 将保持输入顺序。(GH 59745)
In [26]: df = pd.DataFrame(
....: {
....: "a": [2, 2, 2, 2, 1, 1, 1, 1],
....: "b": [2, 1, 3, 1, 2, 3, 1, 1],
....: }
....: )
....:
In [27]: df
Out[27]:
a b
0 2 2
1 2 1
2 2 3
3 2 1
4 1 2
5 1 3
6 1 1
7 1 1
旧行为
In [3]: df.value_counts(sort=False)
Out[3]:
a b
1 1 2
2 1
3 1
2 1 2
2 1
3 1
Name: count, dtype: int64
新行为
In [28]: df.value_counts(sort=False)
Out[28]:
a b
2 2 1
1 2
3 1
1 2 1
3 1
1 2
Name: count, dtype: int64
此更改也适用于 DataFrameGroupBy.value_counts()。这里有两种排序选项:一种是传递给 DataFrame.groupby() 的 sort,另一种是直接传递给 DataFrameGroupBy.value_counts()。前者决定是否对组进行排序,后者决定是否对计数进行排序。所有非分组列将在组内保持输入顺序。
旧行为
In [5]: df.groupby("a", sort=True).value_counts(sort=False)
Out[5]:
a b
1 1 2
2 1
3 1
2 1 2
2 1
3 1
dtype: int64
新行为
In [29]: df.groupby("a", sort=True).value_counts(sort=False)
Out[29]:
a b
1 2 1
3 1
1 2
2 2 1
3 1
1 2
Name: count, dtype: int64
改变了 pd.offsets.Day 的行为,使其始终表示日历日#
在 pandas 的先前版本中,offsets.Day 表示固定的 24 小时跨度,不考虑夏令时转换。它现在始终表现为日历日,在夏令时转换期间保留一天中的时间。(GH 61985)
旧行为
In [5]: ts = pd.Timestamp("2025-03-08 08:00", tz="US/Eastern")
In [6]: ts + pd.offsets.Day(1)
Out[3]: Timestamp('2025-03-09 09:00:00-0400', tz='US/Eastern')
新行为
In [30]: ts = pd.Timestamp("2025-03-08 08:00", tz="US/Eastern")
In [31]: ts + pd.offsets.Day(1)
Out[31]: Timestamp('2025-03-09 08:00:00-0400', tz='US/Eastern')
此更改修复了 date_range() 中的一个长期存在的错误(GH 51716,GH 35388),但作为附带结果导致了几个小的行为差异。
pd.offsets.Day(n)不再与pd.offsets.Hour(24*n)相等。offsets.Day不再支持除法。tseries.frequencies.to_offset()在Timedelta对象上,在以前返回Day对象的情况下,现在返回offsets.Hour对象。向带有
Dayfreq的时区感知DatetimeIndex添加或减去一个标量,不再保留该freq属性。向时区感知
Timestamp或类似日期时间对象添加或减去一个Day偏移量,可能会导致歧义或不存在的时间,这将引发错误。
改变了 pyarrow 和 numpy 可空浮点 dtype 中 NaN 值的处理方式#
以前,在处理可空 dtype(例如 Float64Dtype 或 int64[pyarrow])时,NaN 在某些情况下被视为与 NA 可互换,但在其他情况下则不然。这是为了便于采用,但导致了一些混淆(GH 32265)。在 3.0 中,这种行为通过默认情况下在所有情况下将 NaN 视为等同于 NA 来实现一致性。
默认情况下,NaN 可以传递给构造函数、__setitem__、__contains__,并且将被视为与 NA 相同。用户唯一会看到的变化是,以前引入 NaN 条目的算术和 np.ufunc 操作现在会产生 NA 条目。
旧行为
# NaN in input gets converted to NA
In [1]: ser = pd.Series([0, np.nan], dtype=pd.Float64Dtype())
In [2]: ser
Out[2]:
0 0.0
1 <NA>
dtype: Float64
# NaN produced by arithmetic (0/0) remained NaN
In [3]: ser / 0
Out[3]:
0 NaN
1 <NA>
dtype: Float64
# the NaN value is not considered as missing
In [4]: (ser / 0).isna()
Out[4]:
0 False
1 True
dtype: bool
新行为
In [32]: ser = pd.Series([0, np.nan], dtype=pd.Float64Dtype())
In [33]: ser
Out[33]:
0 0.0
1 <NA>
dtype: Float64
In [34]: ser / 0
Out[34]:
0 <NA>
1 <NA>
dtype: Float64
In [35]: (ser / 0).isna()
Out[35]:
0 True
1 True
dtype: bool
将来,打算将 NaN 和 NA 视为不同的值,并且在 3.0 中通过 pd.options.future.distinguish_nan_and_na 选项添加了一个控制此行为的选项。启用后,NaN 始终被视为不同,特别是作为浮点值。因此,它不能与整数 dtype 一起使用。
旧行为
In [2]: ser = pd.Series([1, np.nan], dtype=pd.Float64Dtype())
In [3]: ser[1]
Out[3]: <NA>
新行为
In [36]: with pd.option_context("future.distinguish_nan_and_na", True):
....: ser = pd.Series([1, np.nan], dtype=pd.Float64Dtype())
....: print(ser[1])
....:
nan
如果我们为后者示例中的 dtype 传递了 pd.Int64Dtype() 或 "int64[pyarrow]",这将引发错误,因为浮点 NaN 不能由整数 dtype 保存。
当启用 "future.distinguish_nan_and_na" 时,ser.to_numpy()(以及 frame.values 和 np.asarray(obj))将在存在 NA 条目时转换为 object dtype,而以前它们会强制转换为 NaN。要保留浮点 numpy dtype,请显式将 na_value=np.nan 传递给 Series.to_numpy()。
请注意,该选项是实验性的,可能在未来的版本中发生变化。
__module__ 属性现在指向公共模块#
公共 API 中函数和类的 __module__ 属性已更新,以指向访问该对象的首选公共模块,而不是该对象碰巧定义的模块(GH 55178)。
这在 Python 控制台中产生更具信息量的类显示,例如,不是 <class 'pandas.core.frame.DataFrame'>,而是看到 <class 'pandas.DataFrame'>,以及在 IPython 等交互式工具中,例如,不是 <function pandas.io.parsers.readers.read_csv(...)>,而是看到 <function pandas.read_csv(...)>。
这可能会破坏依赖于先前 __module__ 值的代码(例如,检查 DataFrame 对象 type() 的 doctest)。
提高了 Python 的最低版本要求#
pandas 3.0.0 支持 Python 3.11 及更高版本。
提高了依赖项的最低版本#
一些最低支持的依赖版本已更新。以下必需的依赖项已更新:
包 |
新最低版本 |
|---|---|
numpy |
1.26.0 |
对于可选库,一般建议使用最新版本。下表列出了在 pandas 开发过程中始终进行测试的每个库的最低版本。低于最低测试版本的可选库可能仍然有效,但未被视为受支持。
包 |
新最低版本 |
|---|---|
adbc-driver-postgresql |
1.2.0 |
adbc-driver-sqlite |
1.2.0 |
mypy (dev) |
1.9.0 |
beautifulsoup4 |
4.12.3 |
bottleneck |
1.4.2 |
fastparquet |
2024.11.0 |
fsspec |
2024.10.0 |
hypothesis |
6.116.0 |
gcsfs |
2024.10.0 |
Jinja2 |
3.1.5 |
lxml |
5.3.0 |
Jinja2 |
3.1.3 |
matplotlib |
3.9.3 |
numba |
0.60.0 |
numexpr |
2.10.2 |
qtpy |
2.4.2 |
openpyxl |
3.1.5 |
psycopg2 |
2.9.10 |
pyarrow |
13.0.0 |
pymysql |
1.1.1 |
pyreadstat |
1.2.8 |
pytables |
3.10.1 |
python-calamine |
0.3.0 |
pytz |
2024.2 |
s3fs |
2024.10.0 |
SciPy |
1.14.1 |
sqlalchemy |
2.0.36 |
xarray |
2024.10.0 |
xlsxwriter |
3.2.0 |
zstandard |
0.23.0 |
有关更多信息,请参阅Dependencies和Optional dependencies。
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 [37]: ts = pd.Timestamp(2024, 1, 1).tz_localize("US/Pacific")
In [38]: ts.tz
Out[38]: zoneinfo.ZoneInfo(key='US/Pacific')
pytz 时区对象在直接传递时仍然受支持,但它们将不再默认从字符串输入返回。此外,pytz 不再是 pandas 的必需依赖项,但可以通过 pip extra pip install pandas[timezone] 安装。
此外,pandas 不再为导致歧义或不存在的时间的时区操作引发 pytz 异常。这些情况现在将引发 ValueError。
其他 API 更改#
IO 方法中不再明确支持第三方
py.path对象。请改用pathlib.Path对象(GH 57091)。read_table()的parse_dates参数默认值为None,以提高与read_csv()的一致性(GH 57476)。Period.to_timestamp()和PeriodIndex.to_timestamp()现在在可能的情况下返回微秒单位的对象,在其他情况下返回纳秒单位的对象。这会影响Period.end_time()和PeriodIndex.end_time()的实际值(GH 56164)。所有继承自内置
tuple的类(包括使用collections.namedtuple()创建的类型)在索引操作中现在被视为内置tuple进行哈希处理和比较(GH 57922)。将
dtype作为必需参数添加到ExtensionArray._from_sequence_of_strings()(GH 56519)。将
Series输入传递给json_normalize()现在将保留Series的Index,以前的输出有一个新的RangeIndex(GH 51452)。不再明确支持使用 Python 2 创建的 Pickle 和 HDF(
.h5)文件(GH 57387)。不再支持来自 pandas 版本低于
1.0.0的 pickled 对象(GH 57155)。移除了
Index.sort(),该方法总是引发TypeError。此属性未定义,将引发AttributeError(GH 59283)。从
MultiIndex构造函数中移除了未使用的dtype参数(GH 60962)。更新了
DataFrame.to_excel(),使输出的电子表格没有样式。仍然可以使用Styler.to_excel()进行自定义样式设置(GH 54154)。在
testing.assert_series_equal()中比较索引时,如果Index的数据类型是整数类型,check_exact默认值为 True。(GH 57386)。索引集合操作(如并集或交集)在确定结果索引的数据类型时,将忽略空
RangeIndex或对象数据类型的空Index的数据类型(GH 60797)。IncompatibleFrequency现在继承自TypeError而不是ValueError。因此,频率不匹配的连接现在会像其他不可比较的连接一样强制转换为对象,并且频率不匹配的索引之间的算术运算会进行对齐(GH 55782)。Series的“flex”方法(如Series.add())不再允许为other参数传递DataFrame;请改用 DataFrame 的反向方法(GH 46179)。date_range()和timedelta_range()不再默认unit="ns",而是会从start、end和freq参数推断单位。要覆盖这些,请显式指定所需的unit(GH 59031)。CategoricalIndex.append()不再尝试将不同数据类型的索引强制转换为调用者的数据类型(GH 41626)。ExtensionDtype.construct_array_type()现在是普通方法,而不是classmethod(GH 58663)。Series、Index或ExtensionArray与list之间的算术运算现在将该列表一致地包装在等同于Series(my_list).array的数组中。要进行任何其他类型的推断或转换,请在操作之前显式进行(GH 62552)。Index和Series之间的比较操作现在始终返回Series,无论哪个对象在左边还是右边(GH 36759)。NumPy 函数(如
np.isinf),当在Index对象上调用时返回布尔 dtype,现在返回布尔数据类型的Index而不是np.ndarray(GH 52676)。可以就地操作的方法(
replace()、fillna()、ffill()、bfill()、interpolate()、where()、mask()、clip())在inplace=True时,现在返回修改后的 DataFrame 或 Series(self),而不是None(GH 63207)。所有 Index 构造函数现在默认复制
numpy.ndarray和ExtensionArray输入,当copy=None时,这与Series的行为一致(GH 63388)。
弃用#
Copy 关键字#
以下方法的 copy 关键字参数已被弃用,并将在未来版本中删除。(GH 57347)
DataFrame.merge()/pd.merge()
Copy-on-Write 使用延迟复制机制,该机制会推迟数据复制,直到需要时为止。使用 .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)。已弃用
pd.core.internals.api.maybe_infer_ndim(GH 40226)。已弃用允许使用未包含在指定
dtype.categories中的非 NA 值的Categorical的构造或转换(GH 40996)。已弃用在
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)已弃用在
DataFrame.groupby()和Series.groupby()中允许非关键字参数,除了by和level。(GH 62102)已弃用在
Series.to_markdown()中允许非关键字参数,除了buf。(GH 57280)已弃用在
Series.to_string()中允许非关键字参数,除了buf。(GH 57280)已弃用
DataFrameGroupBy.groups()和SeriesGroupBy.groups()在按包含单个元素的列表分组时返回标量字典键的行为。在未来版本中,字典键将返回元组。(GH 58858)已弃用
Series.dt.to_pytimedelta()的行为,在未来版本中,它将返回包含 Pythondatetime.timedelta对象的Series,而不是 timedelta 的ndarray;这与Series.dt()其他属性的行为一致。(GH 57463)已弃用在写入 stata 时,将包含
datetime.datetime对象的 object-dtype 列转换为 datetime64(GH 56536)。已弃用
Day、BusinessDay和CustomBusinessDay中表示频率的小写字符串d、b和c,改用D、B和C(GH 58998)。已弃用
Week中表示频率的小写字符串w、w-mon、w-tue等,改用W、W-MON、W-TUE等(GH 58998)。已弃用
DataFrame.reindex_like()/Series.reindex_like()中的method参数(GH 58667)。已弃用
Timedelta中表示单位的字符串w、d、MIN、MS、US和NS,改用W、D、min、ms、us和ns(GH 59051)。已弃用
Series.map()的arg参数;请改用新增的func参数。(GH 61260)已弃用
DataFrame.set_index()中的verify_integrity关键字;请直接检查结果的obj.index.is_unique(GH 62919)。已弃用
testing.assert_frame_equal()和testing.assert_series_equal()中的check_datetimelike_compat关键字(GH 55638)。已弃用
DataFrame.to_json()和Series.to_json()中的epoch日期格式;请使用iso(GH 57063)。已弃用在
Series.unstack()和DataFrame.unstack()中允许无法被原始 dtype 持有的fill_value(整数和布尔 dtype 的 NA 值除外)(GH 12189,GH 53868)。已弃用在
Series.shift()和DataFrame.shift()中允许无法被原始 dtype 持有的fill_value(整数和布尔 dtype 的 NA 值除外)(GH 53802)。已弃用在
DataFrame.at_time()和Series.at_time()中允许表示完整日期的字符串(GH 50839)。已弃用
DataFrame.select_dtypes()的向后兼容行为,当指定np.object_时,该行为会匹配strdtype(GH 61916)。已弃用选项
future.no_silent_downcasting,因为它不再被使用。在未来版本中访问此选项将引发错误(GH 59502)。已弃用将非 Index 类型传递给
Index.join();请先显式转换为 Index(GH 62897)。已弃用在
Series.combine_first()中,将非 datetime 类型的other自动转换为 datetime 的行为(GH 62931)。已弃用使用
datetime.date对象对具有DatetimeIndex的Series或DataFrame进行切片;请先显式转换为Timestamp(GH 35830)。已弃用对 DataFrame Interchange Protocol 的支持(GH 56732)。
已弃用
Resampler.interpolate()中的inplace关键字,因为传递True会引发AttributeError(GH 58690)。
移除先前版本的弃用/更改#
强制弃用别名 M、Q、Y 等,改用 ME、QE、YE 等表示偏移量。#
重命名了以下偏移量别名(GH 57986)。
偏移量 |
已移除的别名 |
新的别名 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其他移除项#
DataFrameGroupBy.idxmin()、DataFrameGroupBy.idxmax()、SeriesGroupBy.idxmin()和SeriesGroupBy.idxmax()现在将在组包含所有 NA 值时,或在使用skipna=False并遇到任何 NA 值时,引发ValueError(GH 10694,GH 57745)。concat()在所有条目均为 NA 的情况下,不再忽略这些条目的 dtype 来确定结果 dtype(GH 40893)。read_excel(),read_json(),read_html(), andread_xml()不再接受原始字符串或字节表示的数据。该类型的数据必须被包装在StringIO或BytesIO中(GH 53767)to_datetime()指定了unit时,不再将字符串解析为浮点数,而是像没有unit一样进行解析(GH 50735)SeriesGroupBy.agg()不再将组的名称固定到传递给提供的func的输入上(GH 51703)DataFrame.groupby()在使用as_index=False和聚合方法时,将不再从结果中排除不来自输入的组合(GH 49519)ExtensionArray._reduce()现在要求在签名中包含keepdims: bool = False参数(GH 52788)Series.dt.to_pydatetime()现在返回一个包含datetime.datetime对象的Series(GH 52459)除了
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 对象和无 dtype 的序列(例如
list、tuple)之间进行逻辑运算(||、&、^);请先将对象包装在Series、Index或np.array中(GH 52264)不允许在具有不匹配索引和非
object或bool的 dtype 的 Series 之间进行逻辑运算(&、^、||)时自动向上转换为 object 类型(GH 52538)不允许在没有
value且to_replace不是 dict 类型的情况下调用Series.replace()或DataFrame.replace()(GH 33302)不允许使用标量数据构建
arrays.SparseArray(GH 53039)不允许将非标准(
np.ndarray、Index、ExtensionArray或Series)类型传递给isin()、unique()、factorize()(GH 52986)不允许将 pandas 类型传递给
Index.view()(GH 55709)不允许在
array()中为 datetime64 和 timedelta64 dtypes 使用“s”、“ms”、“us”、“ns”以外的单位(GH 53817)从
pandas.core.internals和pandas.core.internals.api中移除了Block、DatetimeTZBlock、ExtensionBlock、create_block_manager_from_blocks(GH 55139)从
Categorical构造函数中移除了fastpath关键字参数(GH 20110)从
PeriodArray构造函数中移除了freq关键字参数,请使用“dtype”代替(GH 52462)从
Series.resample()和DataFrame.resample()中移除了kind关键字参数(GH 58125)移除了
arrays.NumpyExtensionArray的别名arrays.PandasArray(GH 53694)从
Series.replace()和DataFrame.replace()中移除了已弃用的method和limit关键字参数(GH 53492)移除了扩展测试类
BaseNoReduceTests、BaseNumericReduceTests、BaseBooleanReduceTests(GH 54663)从
DatetimeIndex构造函数中移除了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和PeriodDtypedtypes(GH 53111)在
Index、Series和DataFrame构造函数中,当输入是 pandas 对象(Series、Index、ExtensionArray)时,停止进行 dtype 推理。要保留当前行为,请先在输入上调用.infer_objects(GH 56012)在
Index.insert()中,当使用 object-dtype 索引时,停止进行 dtype 推理;这通常会影响将新条目设置到空的Series或DataFrame时产生的索引/列(GH 51363)从
TimedeltaIndex构造函数中移除了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()中,对于 object dtype 和不匹配的 null-like 值(现在被视为不相等)进行弃用强制执行(GH 18463)强制执行
datetime64、DatetimeTZDtype和PeriodDtypedtypes 上all和any约简的弃用强制执行(GH 58029)强制执行
str.contains()、str.startswith()和str.endswith()中,na参数不允许非bool和 NA 值(GH 59615)强制执行
date_range()、period_range()、timedelta_range()、interval_range()中periods参数不允许float类型(GH 56036)强制执行
to_datetime()解析混合时区字符串的弃用,除非用户传递utc=True(GH 57275)强制执行
Series.value_counts()和Index.value_counts()在 object dtype 时,对结果的.index进行 dtype 推理的弃用强制执行(GH 56161)强制执行
DataFrameGroupBy.get_group()和SeriesGroupBy.get_group()允许name参数为长度为 1 的列表分组时的非元组值的弃用强制执行(GH 54155)强制执行
Series.interpolate()和DataFrame.interpolate()在 object-dtype 上的弃用强制执行(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成员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)在
read_csv()的parse_dates中,组合解析的日期列的弃用(GH 55569)强制执行
api.extensions.take()参数中非标准(np.ndarray、ExtensionArray、Index或Series)类型的弃用强制执行(GH 52981)强制执行解析系统时区字符串到
tzlocal的弃用,因为它依赖于系统时区,请改用传递tz关键字参数(GH 50791)强制执行向
SeriesGroupBy.agg()传递字典的弃用强制执行(GH 52268)强制执行
YearBegin中表示频率的字符串AS,以及表示具有各种财年起点的年度频率的字符串AS-DEC、AS-JAN等的弃用(GH 57793)强制弃用
YearEnd中表示频率的字符串A,以及表示具有不同财年末年度频率的字符串A-DEC、A-JAN等 (GH 57699)强制弃用
BYearBegin中表示频率的字符串BAS,以及表示具有不同财年起始年度频率的字符串BAS-DEC、BAS-JAN等 (GH 57793)强制弃用
BYearEnd中表示频率的字符串BA,以及表示具有不同财年末年度频率的字符串BA-DEC、BA-JAN等 (GH 57793)强制弃用
Hour、BusinessHour和CustomBusinessHour中表示频率的字符串H、BH和CBH(GH 59143)强制弃用
Timedelta中表示单位的字符串H、BH和CBH(GH 59143)强制弃用
Minute、Milli、Micro、Nano中表示频率的字符串T、L、U和N(GH 57627)强制弃用
Timedelta中表示单位的字符串T、L、U和N(GH 57627)强制弃用
在concat()len(keys) != len(objs)时截断到较短长度的行为。现在这会引发ValueError(GH 43485)强制弃用
和DataFrame.replace()中可能引入新类别的Series.replace()CategoricalDtype的行为。(GH 58270)强制弃用
在存在 NA 值时(GH 58232)的行为。Series.argsort()强制弃用
和Series.interpolate()中的值“pad”、“ffill”、“bfill”和“backfill”(GH 57869)DataFrame.interpolate()强制弃用并移除
Categorical.to_list(),请改用obj.tolist()(GH 51254)在
中,DataFrame.stack()future_stack的默认值现在为True;指定False将引发FutureWarning(GH 55448)按
level(长度为 1 的列表)对DataFrameGroupBy或SeriesGroupBy进行迭代时,将返回长度为 1 的组的元组 (GH 50064)方法
apply、agg和transform将不再用等效的 pandas 实现替换 NumPy 函数(例如np.sum)和内置函数(例如min);如果您希望使用 pandas 实现,请使用字符串别名(例如"sum"和"min")(GH 53974)在
、DataFrame.shift()和Series.shift()中同时传递DataFrameGroupBy.shift()freq和fill_value现在会引发ValueError(GH 54818)移除了支持布尔 dtype 的
和DataFrameGroupBy.quantile()(GH 53975)SeriesGroupBy.quantile()移除了
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,请改用str类型的或带有Index.astype()formatter函数的(GH 55439)Index.map()移除了
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)移除了所有 groupby 操作中的
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,请改用(GH 53493)Series.value_counts()移除了
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)移除了
构造函数中的PeriodIndexyear、month、quarter、day、hour、minute和second关键字,请改用(GH 55960)PeriodIndex.from_fields()从
、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.agg()的已弃用行为(GH 53325)Series.apply()移除了
和Series.fillna()中的已弃用关键字DataFrame.fillna()method(GH 57760)移除了选项
mode.use_inf_as_na,请先将 inf 条目转换为NaN(GH 51684)移除了对
中DataFrame.from_records()的支持(GH 51697)DataFrame移除了对
、to_datetime()和to_timedelta()中to_numeric()errors="ignore"的支持(GH 55734)移除了对
中DataFrame.take()slice的支持(GH 51539)移除了
ArrayManager(GH 55043)移除了
构造函数中的Seriesfastpath参数 (GH 55466)移除了
的Indexis_boolean、is_integer、is_floating、holds_integer、is_numeric、is_categorical、is_object和is_interval属性 (GH 50042)移除了
中的PeriodIndexordinal关键字,请改用(GH 55960)PeriodIndex.from_ordinals()移除了
Resampler方法中的未使用参数*args和**kwargs(GH 50977)解析字符串到日期时间时,无法识别的时区现在会引发
ValueError(GH 51477)移除了
的属性Grouperax、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)强制弃用
的存储选项“pyarrow_numpy”(GH 60152)StringDtype移除了在
和DataFrameGroupBy.apply()中指定Resampler.apply()include_groups=True(GH 7155)
性能改进#
消除了访问器属性(例如
)中到原始 pandas 对象的循环引用。但是,访问器实例化不再被缓存(GH 47667, GH 41357)Series.str当构造的
values是range时,返回Categorical.categoriesRangeIndex列而不是。(GH 57787)Index当
data是dict时,在可能的情况下返回DataFrameRangeIndex列(GH 57943)当
data是dict时,在可能的情况下返回SeriesRangeIndex索引(GH 58118)当
objs包含和Series且DataFrameaxis=0时,在可能的情况下返回concat()RangeIndex列(GH 58119)当
keys是range或RangeIndex时,在concat()MultiIndex结果中返回RangeIndex级别(GH 57542)当追加的值可以继续
时,RangeIndexRangeIndex.append()返回RangeIndex而不是(GH 57467)Index当索引中有重复值时,
的性能有所提高(GH 55767)Series.nlargest()当可能时,
返回Series.str.extract()RangeIndex列而不是列(GH 57542)IndexSeries.str.partition()结合ArrowDtype在可能的情况下返回RangeIndex列而不是Index列(GH 57768)在
MultiIndex中,设置MultiIndex.names不会使所有缓存的操作失效,性能得到提升(GH 59578)在
DataFrameGroupBy.ffill()、DataFrameGroupBy.bfill()、SeriesGroupBy.ffill()和SeriesGroupBy.bfill()中,性能得到提升(GH 56902)在
DataFrame.join()中,对于已排序但非唯一的索引,性能得到提升(GH 56941)在
DataFrame.join()中,当左右索引非唯一且how为"left"、"right"或"inner"时,性能得到提升(GH 56817)在
DataFrame.join()中,当how="left"或how="right"且sort=True时,性能得到提升(GH 56919)在
DataFrame.to_csv()中,当index=False时,性能得到提升(GH 59312)在
Index.join()中,通过在结果与输入之一匹配的情况下传播缓存属性,性能得到提升(GH 57023)在
Index.take()中,当indices是从零到索引长度的完整范围索引器时,性能得到提升(GH 56806)在
Index.to_frame()中,在可能的情况下返回RangeIndex列的Index,性能得到提升(GH 58018)在
MultiIndex._engine()中,使用更小的 dtype(如果可能),性能得到提升(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)在
RangeIndex.to_numpy()中,指定na_value时,性能得到提升(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)在
CategoricalDtype.update_dtype()中,当dtype是具有非None类别且有序的CategoricalDtype时,性能得到提升(GH 59647)在
DataFrame.__getitem__()中,当key是一个具有许多列的DataFrame时,性能得到提升(GH 61010)在
DataFrame.astype()中,当转换为扩展浮点数 dtype(例如 “Float64”)时,性能得到提升(GH 60066)在
DataFrame.merge()中,通过为所有基于 Arrow 的 dtype 使用 Arrow 原生路径,性能得到提升(GH 63435)在
DataFrame.stack()中,当使用future_stack=True且 DataFrame 没有MultiIndex时,性能得到提升(GH 58391)在
DataFrame.to_hdf()中,避免不必要地重新打开 HDF5 文件,以加快向具有大量组的文件添加数据的速度(GH 58248)在
DataFrame.where()中,当cond是一个具有许多列的DataFrame时,性能得到提升(GH 61010)在
DataFrameGroupBy.__len__和SeriesGroupBy.__len__中,性能得到提升(GH 57595)在字符串 dtype 的索引操作中,性能得到提升(GH 56997)
在
RangeIndex上的一元方法中,在可能的情况下返回RangeIndex而不是Index,性能得到提升(GH 57825)
Bug 修复#
分类#
在使用具有
ArrowDtype的Index构建Categorical时存在错误(GH 60563)在
Categorical中,从具有dtype='object'的 pandasSeries或Index构建时,未能将类别的 dtype 保持为object;现在,对于这些情况,categories.dtype被保持为object,而具有dtype='object'的 numpy 数组和 Python 序列继续推断最具体的 dtype(例如,如果所有元素都是字符串,则推断为str)(GH 61778)在
pandas.Categorical中,在使用“string”dtype 时显示不带引号的字符串类别存在错误(GH 63045)在
Series.apply()中,对于CategoricalDtype,nan被忽略存在错误(GH 59938)在
bdate_range()中,使用频率freq="cbh"会引发ValueError存在错误(GH 62849)在
testing.assert_index_equal()中,当check_categorical=True且exact=False时,对于不可比较的CategoricalIndex,会引发TypeError而不是AssertionError(GH 61935)在
Categorical.astype()中,当copy=False时,仍然会触发代码的复制存在错误(GH 62000)在
DataFrame.pivot()和DataFrame.set_index()中,对于具有 pyarrow 字典 dtype 的列,会引发ArrowNotImplementedError存在错误(GH 53051)在
Series.convert_dtypes()中,当dtype_backend="pyarrow"时,空的CategoricalDtypeSeries引发错误或被转换为null[pyarrow]存在错误(GH 59934)
日期时间类型#
在
is_year_start中,通过date_range()使用频率 'MS' 构建的DatetimeIndex的年份或季度开始属性不正确存在错误(GH 57377)在
DataFrame中,当dtype是timedelta64且data是包含None的列表时,引发ValueError存在错误(GH 60064)在
Timestamp构造函数中,当显式指定tz=None与时区感知的tzinfo或数据结合使用时,未能引发错误存在错误(GH 48688)在
Timestamp构造函数中,当给定非标准单位的np.datetime64对象时,未能引发错误存在错误(GH 25611)在
date_range()中,有时最后一个有效时间戳未能生成存在错误(GH 56134)在
date_range()中,使用负频率值时,未能包含开始和结束值之间的所有点存在错误(GH 56147)在
infer_freq()中,对具有ArrowDtype时间戳 dtype 的Series,错误地引发TypeError(GH 58403)在
to_datetime()中,将lxml.etree._ElementUnicodeResult与format一起传递时引发TypeError存在错误。现在已处理str的子类(GH 60933)在
tseries.api.guess_datetime_format()中,当 “%Y” == “%H%M” 时,会失败,无法推断时间格式(GH 57452)在
tseries.frequencies.to_offset()中,无法解析以 “LWOM” 开头的频率字符串存在错误(GH 59218)在
DateOffset.rollback()(及子类方法)中,当normalize=True时,回滚长度会多一个偏移量存在错误(GH 32616)在
DataFrame.agg()中,处理缺失值时导致IndexError存在错误(GH 58810)在
DataFrame.fillna()中,当使用超出范围的时间戳填充datetime64[ns]列时,会引发AssertionError而不是OutOfBoundsDatetime。现在正确引发OutOfBoundsDatetime(GH 61208)在
DataFrame.min()和DataFrame.max()中,将datetime64和timedelta64列转换为float64并丢失精度存在错误(GH 60850)在
DatetimeIndex.asof()中,使用字符串键会导致不正确的结果存在错误(GH 50946)在
DatetimeIndex.is_year_start()和DatetimeIndex.is_quarter_start()中,对于大于 “1C” 的自定义营业日频率,不会引发错误存在错误(GH 58664)在
DatetimeIndex.is_year_start()和DatetimeIndex.is_quarter_start()中,对于双位数频率返回False存在错误(GH 58523)在
DatetimeIndex.union()和DatetimeIndex.intersection()中,当unit非纳秒时存在错误(GH 59036)在
DatetimeIndex.where()和TimedeltaIndex.where()中,在某些情况下未能设置freq=None存在错误(GH 24555)在
Index.union()中使用pyarrow时间戳 dtype 时出现错误,错误地返回objectdtype(GH 58421)在
Series.dt.microsecond()中使用 pyarrow 支持的Series时,产生不正确的结果(GH 59154)在
Timestamp.normalize()和DatetimeArray.normalize()中出现错误,当非常小(遥远的过去)的值导致整数溢出时,不会引发错误,而是返回不正确的结果(GH 60583)在
Timestamp.replace()中出现错误,当替换引入非零nanosecond或microsecond时,未能更新unit属性(GH 57749)在
to_datetime()中出现错误,当传递不常见的日期字符串时,不尊重 `dayfirst` 参数(GH 58859)在
to_datetime()中对包含缺失值的浮点数数组进行操作时,会引发FloatingPointError(GH 58419)在
to_datetime()中处理具有年、月、日等列的 float32 数据时,会导致精度问题和不正确的结果(GH 60506)在
to_datetime()中出现错误,在任何失败场景下都会报告不正确的索引(GH 58298)在
to_datetime()中使用format="ISO8601"和utc=True时出现错误,本地时间戳会错误地继承系列中前一个时间戳的时区偏移(GH 61389)在
to_datetime()中,当 `arg` 是具有 `ps` 单元的 `np.datetime64` 对象时,会错误地进行转换(GH 60341)在具有 `np.datetime64` dtype 和 `timestamp[pyarrow]` dtypes 的对象之间进行比较时出现错误,错误地引发
TypeError(GH 60937)在具有 pyarrow date dtype 和 `timestamp[pyarrow]` 或 `np.datetime64` dtype 的对象之间进行比较时出现错误,未能将它们视为不可比较(GH 62157)
在使用具有 `timestamp` 类型的
ArrowDtype构建数组时出现错误,错误地允许 `Decimal("NaN")`(GH 61773)在从时区感知的
ArrowDtype构建时区感知的数组时出现错误,当 `tz=None` 时,错误地将这些视为 UTC 时间,而不是像DatetimeTZDtype那样视为本地时间(GH 61775)在
value_counts()中保留频率时出现错误,特别是对于DatetimeIndex()和TimedeltaIndex()(GH 33830)在将具有不匹配分辨率的标量值设置到具有非纳秒
datetime64、timedelta64或DatetimeTZDtype的数组中时出现错误,错误地截断这些标量(GH 56410)
时间差#
在
Timedelta.to_pytimedelta()中提高了精度,以便对基于纳秒的大型 Timedelta 一致地四舍五入微秒(GH 57841)在
DataFrame.cumsum()中出现错误,当 dtype 为timedelta64[ns]时会引发IndexError(GH 57956)在将非纳秒单位的
Timedelta对象与 Pythondatetime.datetime对象相加或相减时出现错误,导致结果不正确;现在当 Timedeltas 在datetime.timedelta实现范围之内时,此操作可以正常工作(GH 53643)在具有 `timedelta64` dtype 的乘法运算中出现错误,当乘以布尔对象或 dtype 时未能引发
TypeError(GH 58054)在具有 `timedelta64` dtype 的乘法运算中出现错误,当乘以 numpy 可空 dtype 或 pyarrow 整数 dtype 时错误地引发(GH 58054)
在
Series构造函数中出现错误,当从整数构建 timedelta 序列时,未能遵循 `timedelta64[unit]` dtype 的单位,例如 `pd.Series([0, 1, 2], dtype="timedelta64[s]")` 仍然将数字解释为纳秒而不是秒。现在,它将根据指定 dtype 的单位解释传入的整数(GH 48312, GH 52457)
时区#
在
DatetimeIndex.union()、DatetimeIndex.intersection()和DatetimeIndex.symmetric_difference()中出现错误,当合并两个具有相同时区但不同单位的 DatetimeIndex 对象时,时区被更改为 UTC(GH 60080)在
Series.dt.tz_localize()中使用时区感知的ArrowDtype时,当 `tz=None` 时,错误地转换为 UTC(GH 61780)修复了
date_range()中的错误,当时区感知的端点带有日历偏移量(例如 `"MS"`)时,在 DST 回溯时会失败。现在这些端点会尊重 `ambiguous`/`nonexistent` 参数(GH 52908)
数值#
在
api.types.infer_dtype()中出现错误,对于 complex 和 `pd.NA` 的混合,返回 "mixed"(GH 61976)在
api.types.infer_dtype()中出现错误,对于 float 和 `pd.NA` 的混合,返回 "mixed-integer-float"(GH 61621)在
DataFrame.combine_first()中出现错误,其中绝对值大于 `2**53` 的 Int64 和 UInt64 整数在操作后会丢失精度(GH 60128)在
DataFrame.corr()中出现错误,数值精度问题导致相关性大于 `1.0`(GH 61120)在
DataFrame.cov()中出现错误,会引发TypeError,而不是返回可能不正确的结果或其他错误(GH 53115)在
DataFrame.quantile()中出现错误,当 `numeric_only=True` 且 `q` 是类列表时,列类型未被保留,并产生空结果(GH 59035)在
Series.dot()中出现错误,对于ArrowDtype和可空 dtype 的数据,返回objectdtype(GH 61375)在
Series.std()和Series.var()中使用复数值数据时出现错误(GH 61645)在 numpy 可空 dtype 和
ArrowDtype对象之间的算术运算中出现错误,错误地引发(GH 58602)
转换#
to_numeric()对大整数进行操作时,在未进行强制转换的情况下,会转换为具有 python 整数的object数据类型(GH 51295)在
DataFrame.astype()中出现错误,未正确转换 Arrow 基础字典 dtype 的 `values`(GH 58479)在
DataFrame.update()中,bool dtype 被转换为 object(GH 55509)在
Series.astype()中出现错误,当转换为字符串 dtype 时,可能会就地修改只读数组(GH 57212)在
Series.convert_dtypes()和DataFrame.convert_dtypes()中,当对包含复数 dtype 的数据调用时会引发TypeError(GH 60129)在
Series.convert_dtypes()和DataFrame.convert_dtypes()中,对于具有ArrowDtype的对象,会移除时区信息(GH 60237)在
Series.reindex()中出现错误,当 `reindex` 引入缺失值时,未能保持 `float32` 类型(GH 45857)在
to_datetime()和to_timedelta()中,当输入为 `None` 时,返回 `None` 而不是 `NaT`,这与其他转换方法不一致(GH 23055)
字符串#
在
Series.str.match()中出现错误,当给定一个编译的 `re.Pattern` 对象以及冲突的 `case` 或 `flags` 参数时,未能引发错误(GH 62240)在
Series.str.replace()中,对于转换为 PyArrow 后端 dtype 的系列,当使用有效的组引用(`\1`、`\2` 等)时会引发错误(GH 62653)在
Series.str.zfill()中,对于ArrowDtype会引发AttributeError(GH 61485)在
Series.value_counts()中出现错误,对于具有 `string` dtype 的系列,不会尊重 `sort=False` 参数(GH 55224)在 Series.str methods 中出现错误,当在 PyArrow 支持的数据上使用带有前瞻/后顾、反向引用或 `\Z` 的正则表达式时会失败(GH 60833, GH 63683)
在与
StringDtype的乘法运算中出现错误,错误地允许与布尔值相乘;现在会显式转换为整数(GH 62595)
Interval#
Index.is_monotonic_decreasing()、Index.is_monotonic_increasing()和Index.is_unique()对于从另一个Index的切片创建的Index,可能错误地返回False(GH 57911)在
Index、Series、DataFrame构造函数中,当给定一系列Interval子类对象时,会出现错误,会将它们强制转换为Interval(GH 46945)在
interval_range()中出现错误,start 和 end 的数值类型总是被强制转换为 64 位(GH 57268)在
pandas.interval_range()中出现错误,当 `start` 和 `freq` 分别使用 `np.float32` 和 `int` 时,会错误地推断出 `int64` dtype(GH 58964)在
IntervalIndex.get_indexer()和IntervalIndex.drop()中,当索引的某一边是非唯一时出现错误(GH 52245)从具有不匹配的有符号/无符号整数 dtype(例如 `int64` 和 `uint64`)的数组构建
IntervalArray和IntervalIndex现在会引发TypeError,而不是静默进行。 (GH 55715)
索引#
在
DataFrame.__getitem__()中,当切片一个有很多行的DataFrame时,会引发OverflowError(GH 59531)在
DataFrame.__setitem__()中,对一个空的DataFrame使用元组时,会损坏该帧(GH 54385)在
DataFrame.from_records()中,当在 `index` 中传递空列表时,会引发ValueError(GH 58594)在
DataFrame.loc()和DataFrame.iloc()中,当从具有混合数据类型的DataFrame中选择时,返回了不正确的 dtype(GH 60600)在
DataFrame.loc()中,当向 Series 设置两个索引时,loc-set 的行为不一致(GH 59933)在
Index.equals()中,当比较具有字符串 dtype 的Series和Index时出现错误(GH 61099)Index.get_indexer() 及类似方法在 NaN 位于第 128 位或之后时出现错误(GH 58924)
MultiIndex.insert() 在插入到类 datetime 的级别的新值被强制转换为 NaT 并导致索引失败时出现错误(GH 60388)
Series.__setitem__() 在分配带有布尔索引器的布尔 Series 时会引发 LossySetitemError(GH 57338)
使用分辨率高于索引的 DatetimeIndex 和 Timestamp 端点对 obj.loc[start:stop] 进行索引时出现错误(GH 63262)
打印 Index.names 和 MultiIndex.levels 时不会转义单引号(GH 60190)
在合并块的情况下,使用 PeriodDtype 列对 DataFrame 进行重新索引时出现错误(GH 60980、GH 60273)
DataFrame.__getitem__() 在 Python 3.12 中使用 slice 调用时返回已修改的列(GH 57500)
DataFrame.loc.__getitem__() 和 DataFrame.iloc.__getitem__() 在具有整数类别的 CategoricalDtype 列上使用时,在尝试索引包含 NaN 条目的行时会引发错误(GH 58954)
Index.__getitem__() 在使用 0 维 np.ndarray 键时错误地引发异常(GH 55601)
Index.get_indexer() 在未正确转换新字符串数据类型缺失值时出现错误(GH 55833)
Index.intersection()、Index.union()、MultiIndex.intersection() 和 MultiIndex.union() 在对相同索引进行操作时返回原始 Index 的引用而不是新实例,这可能导致修改结果时元数据损坏(GH 63169)
使用 DataFrame.loc.__setitem__() 或 Series.loc.__setitem__() 添加新行时出现错误,在某些情况下未能保留对象索引上的 dtype(GH 41626)
在具有 timestamp[pyarrow] dtype 的 DatetimeIndex 上或具有 duration[pyarrow] dtype 的 TimedeltaIndex 上进行索引时出现错误(GH 62277)
Missing#
DataFrame.fillna() 和 Series.fillna() 在 ExtensionArray dtype 上忽略 limit 参数时出现错误(GH 58001)
MultiIndex.fillna() 的错误消息引用了 isna 而不是 fillna(GH 60974)
NA.__and__()、NA.__or__() 和 NA.__xor__() 在与 np.bool_ 对象操作时出现错误(GH 58427)
NA 和 Int64 dtype 对象之间的 divmod 操作出现错误(GH 62196)
修复了 Series.replace() 和 DataFrame.replace() 在尝试替换 Float64Dtype 对象中的 NA 值(使用 np.nan)时的错误;现在使用 pd.set_option("mode.distinguish_nan_and_na", True) 可以正常工作,否则则无关紧要(GH 55127)
修复了 Series.replace() 和 DataFrame.replace() 在尝试替换 Int64Dtype 对象中的 np.nan 值(使用 NA)时的错误;现在使用 pd.set_option("mode.distinguish_nan_and_na", True) 为无操作,否则则无关紧要(GH 51237)
MultiIndex#
DataFrame.loc() 在 axis=0 和 MultiIndex 上设置值时,会添加额外的列(GH 58116)
DataFrame.melt() 在列是 MultiIndex 时,不接受 var_name 中的多个名称(GH 58033)
MultiIndex.insert() 在 unified location of index -1 处未正确插入 NA 值(GH 59003)
MultiIndex.get_level_values() 访问 DatetimeIndex 时未沿袭 frequency 属性(GH 58327、GH 57949)
在具有未对齐 MultiIndex 列的 DataFrame 算术运算中出现错误(GH 60498)
在具有未对齐 MultiIndex 的 Series 的 DataFrame 算术运算中出现错误(GH 61009)
MultiIndex.union() 在索引具有不同名称的重复项时引发错误(GH 62059)
MultiIndex.from_tuples() 在输入包含 NaN 值的元组时导致输出错误的错误(GH 60695、GH 60988)
DataFrame.__setitem__() 中的列对齐逻辑会使用空索引重新索引分配的值,从而错误地将所有值设置为 NaN(GH 61841)
DataFrame.reindex() 和 Series.reindex() 在将 Index 重新索引到 MultiIndex 时,会错误地将所有值设置为 NaN(GH 60923)
I/O#
DataFrame 和 Series 中 collections.abc.Mapping 元素的 repr 出现错误(GH 57915)
DataFrame.to_hdf() 和 read_hdf() 在处理具有非纳秒分辨率的 timedelta64 dtype 时,未能正确地往返(GH 63239)
修复了 on_bad_lines 可调用对象在返回过多字段时的错误:现在会发出 ParserWarning 并截断额外字段,无论 index_col 如何(GH 61837)
pandas.json_normalize() 在设置 max_level 时,对 data 中非 dict 项的处理不一致。现在,如果 data 是包含非 dict 项的列表,则该函数将引发 TypeError(GH 62829)
pandas.json_normalize() 在 meta 包含非字符串键(例如 int)且指定了 record_path 时引发 TypeError,这与 record_path 为 None 时的行为不一致(GH 63019)
DataFrame.to_json() 在 index 参数是 DataFrame.column 中的值且 Index.name 为 None 时出现错误。现在,这会引发 ValueError(GH 58925)
io.common.is_fsspec_url() 未能识别链接的 fsspec URL(GH 48978)
DataFrame._repr_html_() 忽略了 "display.float_format" 选项(GH 59876)
DataFrame.from_records() 在 data 是空迭代器且 nrows=0 时,忽略了 columns 和 index 参数(GH 61140)
DataFrame.from_records() 未能正确初始化子类(GH 57008)
DataFrame.from_records() 中,当 columns 参数是 numpy 结构化数组时,未能重新排序和过滤掉列(GH 59717)
DataFrame.to_dict() 在列不唯一且 orient='tight' 时引发不必要的 UserWarning(GH 58281)
DataFrame.to_excel() 在写入空的 DataFrame(两轴均为 MultiIndex)时出现错误(GH 57696)
DataFrame.to_excel() 中,具有 period 级别的 MultiIndex 索引不是日期的错误(GH 60099)
DataFrame.to_stata() 在导出包含长字符串(Stata strL)和 pd.NA 值的列时出现错误(GH 23633)
DataFrame.to_stata() 在编码长度和普通长度不匹配时出现错误(GH 61583)
DataFrame.to_stata() 在写入 DataFrame 且 byteorder='big' 时出现错误(GH 58969)
DataFrame.to_stata() 在写入超过 32000 个值标签时出现错误(GH 60107)
DataFrame.to_string() 在处理嵌套 DataFrame 时引发 StopIteration 的错误(GH 16098)
HDFStore.get() 未能正确保存 datetime64[s] dtype 的数据(GH 59004)
HDFStore.select() 在对分类字符串列进行查询时导致意外结果(GH 57608)
MultiIndex.factorize() 在处理长度为 0 的索引时错误地引发异常(GH 57517)
read_csv() 在 encoding_errors 不是字符串时导致分段错误(GH 59059)
read_csv() 的 c 和 python 引擎在解析具有大指数的数字时导致溢出。现在,具有大正指数的数字将解析为 inf 或 -inf(取决于尾数的符号),而具有大负指数的数字将解析为 0.0(GH 62617、GH 38794、GH 62740)
DataFrame.to_csv() 中,当 escapechar 不是 None 时,quotechar 未被转义(GH 61407)
read_csv() 在指定 index_col 且 na_values 是包含 None 键的字典时引发 TypeError(GH 57547)
read_csv() 在指定 nrows 和 iterator 但未指定 chunksize 时引发 TypeError(GH 59079)
read_csv() 中,链接的 fsspec TAR 文件和 compression="infer" 导致 tarfile.ReadError(GH 60028)
read_csv() 未能适当地跳过指示的行,导致空数据错误(GH 62739)
read_csv() 中,当 na_values 是非字符串值的列表时,na_values 的顺序导致不一致(GH 59303)
read_csv() 的 c 和 python 引擎将大整数读取为字符串。现在将它们读取为 python 整数(GH 51295)
read_csv() 的 engine="c" 在读取具有前导整数的大浮点数时将其读取为字符串。现在将它们读取为浮点数(GH 51295)
read_csv() 的 engine="pyarrow" 和 dtype="Int64" 导致精度损失(GH 56136)
read_excel() 在 dtype="boolean" 时,传递布尔值数组会引发 ValueError(GH 58159)
read_html() 中,标题行中的 rowspan 导致错误地转换为 DataFrame(GH 60210)
read_json() 在 engine="pyarrow" 时忽略给定的 dtype 的错误 (GH 59516)
read_json() 在 typ 参数不严格等于 "frame" 或 "series" 时不进行验证的错误 (GH 59124)
read_json() 在字符串形式的极端值整数被错误地解析为不同整数的错误 (GH 20608)
read_stata() 在输入文件以大端格式存储并包含 strL 数据时引发 KeyError 的错误 (GH 58638)
read_stata() 在格式版本 111 及更早版本中,极端值整数被错误地解释为缺失值的错误 (GH 58130)
read_stata() 在格式版本 105 及更早版本中,双精度类型的缺失码未被识别的错误 (GH 58149)
set_option() 将 pandas 选项 display.html.use_mathjax 设置为 False 无效的错误 (GH 59884)
to_excel() 在 passing merge_cells=False 时,MultiIndex 列被合并到单行的错误 (GH 60274)
Period#
绘图#
DataFrameGroupBy.boxplot() 在存在多个分组时失败的错误 (GH 14701)
DataFrame.plot.bar() 在使用 subplots 和 stacked=True 时堆叠不正确的错误 (GH 61018)
DataFrame.plot.bar() 在 stacked=True 时,具有零高度段的堆叠条上的标签被错误地放置在底部,而不是前一个段的标签位置的错误 (GH 59429)
DataFrame.plot.line() 在同时设置 color 和 dict 样式时引发 ValueError 的错误 (GH 59461)
DataFrame.plot() 在频率乘数大于一时,会向右移动的错误 (GH 57587)
DataFrame.plot() 在绘制每个子图多于一列时,title 需要额外标题的错误 (GH 61019)
Series.plot() 阻止在同一图上对齐线图和条形图的错误 (GH 61161)
Series.plot() 阻止对齐线图和散点图的错误 (GH 61005)
Series.plot() 在 kind="pie" 与 ArrowDtype 一起使用时的错误 (GH 59192)
绘制具有非纳秒分辨率的 TimedeltaIndex 时,显示不正确标签的错误 (GH 63237)
Groupby/resample/rolling#
DataFrameGroupBy 缩减中,numeric_only 参数允许非布尔值,现在传递非布尔值将引发错误的错误 (GH 62778)
DataFrameGroupBy.__len__() 和 SeriesGroupBy.__len__() 在分组包含 NA 值且 dropna=False 时会引发错误的错误 (GH 58644)
DataFrameGroupBy.agg() 和 SeriesGroupBy.agg() 在输入值为 pyarrow dtype 时返回 numpy dtype 值的错误,而不是返回 pyarrow dtype 值 (GH 53030)
DataFrameGroupBy.agg() 在存在字典输入和重复列时引发 AttributeError 的错误,而不是返回聚合了所有重复列的 DataFrame (GH 55041)
DataFrameGroupBy.agg() 在将用户定义的函数应用于空 DataFrame 时返回 Series 而不是空 DataFrame 的错误 (GH 61503)
DataFrameGroupBy.any() 在其中所有 Timedelta 值都是 NaT 的组返回 True 的错误 (GH 59712)
DataFrameGroupBy.apply() 和 SeriesGroupBy.apply() 在 group_keys=False 的空 DataFrame 上,仍使用组键创建输出索引的错误 (GH 60471)
DataFrameGroupBy.apply() 和 SeriesGroupBy.apply() 未保留子类化 DataFrame 和 Series 的 _metadata 属性的错误 (GH 62134)
DataFrameGroupBy.apply() 在 func 的所有返回值都为 None 时返回完全为空的 DataFrame,而不是返回具有原始列和 dtype 的空 DataFrame 的错误 (GH 57775)
DataFrameGroupBy.apply() 在 as_index=False 时返回 MultiIndex 而不是 Index 的错误 (GH 58291)
DataFrameGroupBy.cumsum() 和 DataFrameGroupBy.cumprod() 中,numeric_only 参数通过 kwargs 间接传递而不是直接传递的错误 (GH 58811)
DataFrameGroupBy.cumsum() 在标签包含 None 时未返回正确 dtype 的错误 (GH 58811)
DataFrameGroupBy.groups() 和 SeriesGroupBy.groups() 不遵守 groupby 参数 dropna 的错误 (GH 55919)
DataFrameGroupBy.groups() 和 SeriesGroupBy.groups() 在组是包含 NA 值的 Categorical 时失败的错误 (GH 61356)
DataFrameGroupBy.median() 中 NaT 值导致结果不正确的错误 (GH 57926)
DataFrameGroupBy.quantile() 在 interpolation="nearest" 时与 DataFrame.quantile() 不一致的错误 (GH 47942)
DataFrameGroupBy.sum() 和 SeriesGroupBy.sum() 在溢出时返回 NaN 的错误。现在这些方法在溢出时返回 inf 或 -inf (GH 60303)
DataFrameGroupBy.transform() 和 SeriesGroupBy.transform() 在使用 reducer 和 observed=False 时,当存在未观察到的类别时,会将 dtype 强制转换为 float 的错误 (GH 55326)
Resampler.asfreq() 在具有 origin 的固定频率索引时忽略对齐并返回错误值的错误。现在 origin 和 offset 会被尊重 (GH 62725)
Resampler.interpolate() 在具有非均匀采样和/或索引与结果重采样索引不对齐的 DataFrame 上时,会导致错误的插值的错误 (GH 21351)
Rolling.apply() 在 method="table" 时,由于列默认按排序,未保留列顺序的错误 (GH 59666)
Rolling.apply() 在 method="table" 时,应用于函数的周期数可能少于 min_period 的错误 (GH 58868)
Rolling.sem() 由于除以 sqrt((n - 1) * (n - ddof)) 而不是 sqrt(n * (n - ddof)),导致计算结果不正确的错误 (GH 63180)
Series.rolling() 与 BaseIndexer 子类一起使用并计算 min/max 时出错的错误 (GH 46726)
DataFrame.ewm() 和 Series.ewm() 在 passed times 和非 mean 的聚合函数时的错误 (GH 51695)
DataFrame.resample() 和 Series.resample() 在索引具有 ArrowDtype 时间戳 dtype 时,未能保留索引名称的错误 (GH 61222)
DataFrame.resample() 在 DataFrame 为空并使用 upsample 方法时,将索引类型更改为 MultiIndex 的错误 (GH 55572)
Rolling.skew() 和 Rolling.kurt() 由于数值不稳定性,在窗口跟随异常值时错误地计算偏度和峰度(分别)的错误。现在计算会通过重新计算受影响的窗口来正确处理灾难性取消 (GH 47461, GH 61416)
Rolling.skew() 和 Rolling.kurt() 在结果与输入长度变化但数据和窗口内容相同的情况下,结果出现差异的错误 (GH 54380)
Series.resample() 在日期范围结束于不存在的时间点之前不久时可能引发错误的错误 (GH 58380)
Series.resample() 在对非纳秒分辨率进行越界重采样(纳秒精度)时引发错误的错误 (GH 57427)
Rolling.var() 和 Rolling.std() 由于数值不稳定性而计算结果不正确的错误 (GH 47721, GH 52407, GH 54518, GH 55343)
DataFrame.groupby() 方法在操作 NumPy 可空数据时,当 NA 掩码不是 C 连续时失败的错误 (GH 61031)
DataFrame.groupby() 在按 Series 分组,并且该 Series 在调用 DataFrame.groupby() 后但在 groupby 操作之前被修改时出现错误的 (GH 63219)
DataFrame.groupby() 使用 TimeGrouper(例如 pd.Grouper(freq="D"))时,未能保留 PyArrow 索引 dtype 的错误 (GH 63518)
Reshaping#
concat() 在混合整数和布尔 dtype 时,错误地将布尔值转换为整数的错误 (GH 45101)
qcut() 在分位数边界处的值可能被错误分配的错误 (GH 59355)
DataFrame.combine_first() 未保留列顺序的错误 (GH 60427)
DataFrame.combine_first() 在具有非唯一列时错误地引发异常的错误 (GH 29135)
DataFrame.combine() 在具有非唯一列时错误地引发异常的错误 (GH 51340)
DataFrame.explode() 对 pyarrow.large_list 类型产生错误结果的错误 (GH 61091)
DataFrame.join() 在不一致地设置结果索引名称的错误 (GH 55815)
DataFrame.join() 在与 Series/DataFrames 列表进行连接时,未产生正确的行顺序的错误 (GH 62954)
DataFrame.join() 在 DataFrame 具有 MultiIndex 且 MultiIndex.names 包含 None 时引发 AssertionError 的错误 (GH 58721)
DataFrame.merge() 在按仅包含 NaN 值的列进行合并时,导致数组越界访问的错误 (GH 59421)
Series.combine_first() 错误地将 None 条目替换为 NaN 的错误 (GH 58977)
DataFrame.unstack() 在 sort=False 时产生错误结果的错误 (GH 54987, GH 55516)
DataFrame.unstack() 在索引包含 NaN 且 sort=False 时引发错误的错误 (GH 61221)
DataFrame.merge() 在 Windows 上合并两个 intc 或 uintc 类型的 DataFrame 时出现错误的 (GH 60091, GH 58713)
DataFrame.pivot_table() 在未提供 index 参数时,错误地对结果进行了子聚合(GH 58722)
DataFrame.pivot_table() 在同时提供 values 参数给 index 或 columns 参数时,错误地忽略了 values 参数(GH 57876, GH 61292)
DataFrame.pivot_table() 的 margins=True 在明确传递 dropna=False 时,没有正确包含索引或列中具有 NaN 值的组(GH 61509)
DataFrame.stack() 在 future_stack=True 时,当 level=[] 时引发 ValueError 的错误(GH 60740)
DataFrame.unstack() 在处理具有 ExtentionDtype 的空 DataFrame 时,产生错误结果(GH 59123)
concat() 在将 DataFrame 和 Series 与 ignore_index=True 连接时,会丢失 Series 的名称(GH 60723, GH 56257)
melt() 在 id_vars 中包含重复列名时,引发了误导性的 AttributeError(GH 61475)
DataFrame.merge() 在同时指定 right_on 和 right_index 时,如果也指定了 left_on,则没有引发 MergeError。现在这种情况会引发 MergeError。(GH 63242)
DataFrame.merge() 在用户提供的后缀可能导致生成的名称与现有列匹配从而产生重复列名的情况下,现在会引发 MergeError。(GH 61402)
DataFrame.merge() 在与 CategoricalDtype 列一起使用时,错误地引发了 RecursionError(GH 56376)
DataFrame.merge() 在使用 float32 索引时,错误地将索引转换为 float64(GH 41626)
Sparse#
SparseDtype 在与 na fill value 进行相等比较时存在错误。(GH 54770)
DataFrame.sparse.from_spmatrix() 在某些子类型中硬编码了无效的 fill_value。(GH 59063)
DataFrame.sparse.to_dense() 忽略了子类化,总是返回 DataFrame 实例(GH 59913)
SparseArray.cumsum() 在处理整数数据时,导致最大递归深度错误。(GH 62669)
ExtensionArray#
arrays.ArrowExtensionArray.__setitem__() 在使用具有重复值的整数数组作为键时,行为不正确(GH 58530)
ArrowExtensionArray.factorize() 在输入是字典编码时,即使 dropna 设置为 False,也会丢弃 NA 值(GH 60567)
NDArrayBackedExtensionArray.take() 在使用整数数组调用时,产生 dtype 与底层数据不匹配的数组(GH 62448)
api.types.is_datetime64_any_dtype() 在自定义 ExtensionDtype 对象上,对于 array-like 会返回 False(GH 57055)
Arrow 支持的持续时间和时间戳的缩减(例如 sum、min、max、median、mean)在分辨率不是纳秒时,错误地返回 stdlib datetime 对象,而不是 Timedelta 和 Timestamp。(GH 63170)
ArrowDtype 对象与不兼容类型(例如字符串 vs 布尔值)的比较,错误地引发异常,而不是返回全 False(对于 ==)或全 True(对于 !=)(GH 59505)
在 PyArrow 未安装时,通过 dtype 字符串加上 "[pyarrow]" 来构造 pandas 数据结构,会引发 NameError 而不是 ImportError(GH 57928)
各种 DataFrame 缩减操作在 pyarrow 时间类型中,当结果为 null 时,返回了错误的 dtype(GH 59234)
在传递 fill_value 时,ExtensionArray 操作数之间的 flex arithmetic 出现错误。(GH 62467)
Styler
Styler.to_latex() 在样式化列标题并结合隐藏索引或隐藏索引级别时存在的问题已修复。
其他#
DataFrame 在传递包含 NA 标量和 columns 的 dict 时,总是返回 np.nan(GH 57205)
Series 在尝试将 Series 输入数据转换为给定 dtype 时,忽略了错误(GH 60728)
eval() 在 ExtensionArray 上执行除法 / 操作时,由于 TypeError 而失败。(GH 58748)
eval() 在对二进制操作(如 (x + y).dropna())进行方法调用时,引发了 AttributeError: 'BinOp' object has no attribute 'value'(GH 61175)
eval() 在使用 engine="numexpr" 时,未保留 Series 的名称。(GH 10239)
eval() 在使用 engine="numexpr" 时,浮点除法返回了意外的结果。(GH 59736)
to_numeric() 在 arg 为 Timedelta 或 Timestamp 标量时,引发了 TypeError。(GH 59944)
unique() 在 Index 上时,不总是返回 Index。(GH 57043)
DataFrame.apply() 在传递 func=list[int] 时,引发了 RecursionError。(GH 61565)
DataFrame.apply() 在传递 engine="numba" 时,忽略了传递给应用函数的 args(GH 58712)
DataFrame.eval() 和 DataFrame.query() 在使用 @ 符号表示法通过 NumPy 属性(例如,df.eval("@np.floor(a)"))时,导致了异常。(GH 58041)
DataFrame.eval() 和 DataFrame.query() 不支持使用 tan 函数。(GH 55091)
DataFrame.groupby() 在使用 None 值进行过滤时存在问题(GH 62501)
DataFrame.query() 在使用重复列名时导致了 TypeError。(GH 59950)
DataFrame.query() 在表达式包含反引号括起来的包含哈希字符 #、反引号或不在 ASCII 范围内的字符(U+0001..U+007F)的列名时,会引发异常或产生错误的结果。(GH 59285)(GH 49633)
DataFrame.query() 在使用反引号查询整数列名时,会引发异常。(GH 60494)
DataFrame.rename() 和 Series.rename() 在传递的 mapper、index 或 columns 参数是具有非唯一 ser.index 的 Series 时,会产生损坏的结果而不是引发 ValueError。(GH 58621)
DataFrame.sample() 在 replace=False 且 (n * max(weights) / sum(weights)) > 1 的情况下,会返回有偏差的结果。现在会引发 ValueError。(GH 61516)
DataFrame.shift() 在没有列的 DataFrame 上传递 freq 时,索引未正确移动。(GH 60102)
DataFrame.sort_index() 在传递 axis="columns"、ignore_index=True 和 ascending=False 时,未返回 RangeIndex 列。(GH 57293)
DataFrame.sort_values() 在按显式命名为 None 的列排序时,引发了 KeyError,而不是按预期排序。(GH 61512)
DataFrame.transform() 返回的顺序不正确,除非索引是单调递增的。(GH 57069)
DataFrame.where() 在使用非布尔类型数组时,返回了 ValueError 而不是 TypeError(GH 56330)
Index.sort_values() 在传递将值转换为元组的键函数(例如 key=natsort.natsort_key)时,会引发 TypeError(GH 56081)
Series.describe() 在传递 percentiles 参数时,始终包含中位数百分位数。(GH 60550)。
Series.diff() 允许 periods 参数接收非整数值。(GH 56607)
Series.dt() 在 ArrowDtype 中使用时,方法返回了不正确的值。(GH 57355)
Series.isin() 在 Series 较大(>10**6)且 values 包含 NA 时,引发了 TypeError(GH 60678)
Series.kurt() 和 Series.skew() 在低方差数组上结果为零(GH 57972)
Series.list() 访问器方法未保留原始 Index。(GH 58425)
Series.list() 访问器方法未保留原始名称。(GH 60522)
Series.map() 在使用 timestamp[pyarrow] dtype 或 duration[pyarrow] dtype 时,错误地返回了全 NaN 条目(GH 61231)
Series.mode() 在对具有可空类型且 series 中没有 null 值的 Series 取模式时,引发了异常。(GH 58926)
Series.rank() 在 na_option='keep' 时,未保留可空整数的缺失值。(GH 56976)
Series.replace() 和 DataFrame.replace() 在 regex=True 且所有值都为 NA 时,抛出了 ValueError。(GH 60688)
Series.replace() 在 Series 从 Index 创建且启用了 Copy-On-Write 时存在问题(GH 61622)
Series.to_string() 在 series 包含带有指数的复数浮点数时存在问题(GH 60405)
DataFrame Interchange Protocol 实现,在字符串和日期时间列的数据缓冲区相关 dtype 时,返回了不正确的结果(GH 54781)
DataFrame、Series 和 Index 的 divmod 和 rdivmod 操作,在 bool dtypes 上未能引发异常,这与 __floordiv__ 的行为不一致(GH 46043)
打印包含存储在 DataFrame.attrs 中的 DataFrame 的 DataFrame 时,引发了 ValueError(GH 60455)
打印包含存储在 Series.attrs 中的 DataFrame 的 Series 时,引发了 ValueError(GH 60568)
在对 DataFrame 或 Series 调用 copy.copy() 时,返回的是深拷贝而不是浅拷贝(GH 62971)
Series.rank() 在对象 dtype 和极小的浮点值情况下存在的问题已修复。(GH 62036)
DataFrame 构造函数错误地将带有 .name 属性的 array-like 对象分类为 Series 或 Index 的问题已修复(GH 61443)
访问 DataFrame 或 Series 的底层 NumPy 数组时,如果数组与原始 DataFrame 或 Series 共享数据,则会返回一个只读数组(只读 NumPy 数组)。此逻辑已通过
.array(或根据 dtype 不同而为.values)扩展到访问底层的 pandas ExtensionArray(GH 61925)。
贡献者#
共有 729 人为本次发布贡献了补丁。名字旁边有“+”号的人是第一次贡献补丁。
121238257 +
3w36zj6 +
ADITYA KUSHWAHA +
ADITYA V J +
Abby VeCasey +
Abdulaziz Aloqeely
Abel Sanchez +
Abel Tavares +
Abhijit Chakraborty +
Abhinav +
Abhinav Reddy +
Abhinav Thimma +
Abhishek Chaudhari +
Abkari Mohammed Sayeem +
Aditya Ghosh +
Aditya Jha +
Aditya060 +
Agriya Khetarpal +
Ahmed Khairy +
Aidan Feldman
Aidos Kanapyanov
Akashisang +
Akshay Jain +
Albert Villanova del Moral
Alex
Alex Malins
Alexey Murz Korepov +
Alfredo Carella +
Alp +
Aman Sharma +
Amey Shinde +
Amin Allahyar +
Amir +
Amy Fung +
AnaDenisa +
Anand Mukherjee +
Andre Correia +
AndreyKolomiets +
André +
Andy
Angela Liss +
Aniket
Animcogn +
Anish Karki +
Anish Karthik +
Ankit Dhokariya +
Annika +
Anthony Speicher +
Antonio Valentino +
Antriksh006 +
Anurag Varma +
Aokizy2 +
Apoorv +
Arthur Laureus Wigo +
Arthur Wigo +
Artur Kenzo Obara Kawazoe +
Aryn1102 +
Ashar Khan +
Asish Mahapatra
Augustus +
Austin +
Austin Rhodes +
AustinOregonState +
Axeldnahcram +
Benjamin M +
Biplav Barua +
Borja Elizalde +
Brandon Norton +
Brandon Xu +
BreezeLune +
Brett Dixon +
Brian Christian +
Brian M +
Caden Gobat +
CaesarTY +
Carlo Barth +
Carson Fox +
Chaarvi Bansal +
ChiLin Chiu
Chris
Chris Hewitt +
Chris Xiang +
Christian Bläul +
Christian Castro +
Christine P. Chai +
Christopher Horn, PhD +
Christopher Titchen +
Christopher Xiang +
Claude Opus 4.5 +
Cliff Kerr +
Clément Robert
Code_Blooded +
Connor Wallace +
Cornelius Roemer +
Cristiano Sampaio +
Cristina Yenyxe Gonzalez Garcia +
DL Lim +
Dan Lawson +
Danferno +
Daniel Pinto Salazar +
Daniel S +
Dave Bunten +
Dave Tapley +
David Carvalho +
David Krych
Davit Gyulnazaryan +
DaxServer +
Dea María Léon
Deekshita +
Deen-dot +
Deepak Kapila +
Deepak Saldanha +
Denis Karadaş +
Denis Matsiusheuski +
Derek M. Knowlton +
Dhruv B Shetty
Dinesh Dawonauth +
Dipanshi Bansal +
Divya Sharma +
Dmitry Korotaev +
Dominik Smrž +
Echedey Luis +
Eduard Akhmetshin +
Edward FANG +
Ehsan Totoni +
Elliott Sales de Andrade
EngSongYeong +
Enrico Massa +
Eric Brown +
Eric Chen +
Eric Larson +
Espoir Murhabazi +
Ethan V Van Hao +
Eve Loraine Nuñal +
Evgenii Mosikhin
Ewout ter Hoeven
FLOURA ANGEL +
Fandi Meng +
Fangchen Li
Farsidetfs +
Fawaz Ahmed +
Fidorc80 +
Flavia Y. Ouyang +
Florian Bourgey +
Florian Jetter
Francesco Bruzzesi +
Francisco Kurucz +
Frank +
French_Ball +
FuzzyParrabellum +
G Karthik Koundinya +
Gael Varoquaux +
GauravM +
Geeeeeene +
Gen Sato +
George He +
Georgina Scott +
Georgios Giannakoulias +
Georgios Malandrakis +
Gianluca Ficarelli
Gleb Khmyznikov +
Goutham Anand +
Gowtham Kumar K. +
Grant Garrett-Grossman +
Gregers Thomas Skat Rørdam +
Guilherme Martins Crocetti +
GuruprashanthKrishnakumar +
Hanxin Chen +
Hariharan P R +
Harini Krishnamurthy +
Harmen Stoppels +
Harsha Lakamsani +
Harshit Pande +
Hassan Rad +
Henry Cuzco +
HeoHeo +
Hongxu Jia +
Hridey Marwah +
Huanghz2001
Huilin Xu +
HuilinXu +
HulusiOzy +
Ian Thompson +
Iaroslav Igoshev +
Icaro Alves +
Ilya +
Ingo Stallknecht +
Irv Lustig
Isaac Virshup
Isuru Fernando
Ivruix +
JBurley +
JHM Darbyshire
JJLLWW +
Jack +
Jack Shewring +
JackCollins1991 +
JackCollins91
Jacob Eggerd +
Jacob Lazar +
Jake Thomas Trevallion
Jakob Zahn +
Jakub Błażejowski +
Jakub Raczyński +
Jakub Szkliniarz +
James Bourbeau
James Spencer
James Yuill +
Janez Demšar +
JaniceP +
Jason Mok +
Javier Marin Tur +
Jay
Jay Ahn +
Jayalakshmi M +
Jean K. +
Jeff Harrison +
Jennifer Benson +
Jeremy Tuloup
Jesse +
Jixun Sun +
John Hendricks +
John Paul Feliciano +
Jonas Bergner +
Jonathan Marriott +
Jonathan Reimer +
Jordan Murphy +
Joren Hammudoglu +
Joris Van den Bossche
Joseph Kleinhenz +
Josquin Larsen +
José Morales +
JuanCarlos3 +
Julian Harbeck +
Julian-Harbeck +
Julien Palard
JulienBacquart +
Justine Wezenaar +
Kamel Gazzaz +
Karen Javadyan +
Karl Tarbet +
Katsia +
Kei +
KeiOshima +
Kevin Amparado
Kevin Doshi +
Kevin Sheppard
Kevon Scott +
Khemkaran
Khemkaran Sevta
Khor Chean Wei
Kian Eliasi
Kiril Isakov +
Kirill +
Konstantin Malanchev +
Korotaev DV +
Kunal Jani +
Kushagr Arora +
LOCHAN PAUDEL
Lakshman +
Lakshya Upadhyaya +
Laurent Mutricy
Laurie O
Leo Gordon +
Lex Lei +
Li +
Lirong +
Lobna Allam +
Loic Diridollou
Lonercode +
Louis Maddox +
Loïc Estève
Lu Yibo +
Luke Manley
Lysandros Nikolaou
Maaz Bin Asif +
Maitrey Talware +
Mangesh Kashid +
Manish Ranjan Karna +
Manjunath L +
Manlai Amar +
Marc Garcia
Marc Jones +
Marc Mueller
Marco Aurélio A. Barbosa +
Marco Barbosa +
Marco Edward Gorelli
Marco Gorelli
MarcoGorelli
Maren Westermann
Maria Ivanova +
Mark Akritas +
Mark Bekooy +
Mark Ryan +
Martin Braquet +
Mateusz Sokół
Matt Braymer-Hayes
Matt Delengowski +
Matt Heeter +
Matt Page +
Matt Popovich +
Matteo Paltenghi +
Matthew Heguy +
Matthew Pak +
Matthew Roeschke
Matthew Simpson +
Matthieu Thiboust +
Maushumee +
Maximilian Nicholson +
Meet_Vasita +
Memoona Shah +
Michael
Michael Hu +
Michael Moyles +
Michael Vincent Mannino +
Michaël Defferrard +
Michał Górny
Michelino Gali +
Michiel De Muynck +
Mien (Josephine) Nguyen +
Miguel Cárdenas +
Mika Allert +
Mike Perrone +
Mohammad Ahmadi
Moshe Kaplan +
Movsisyan +
Myles Scolnick +
Naresh Kumar +
Natalia Mokeeva
Natalie Dettmer +
Nathan Goldbaum
Navya Srivastava +
NewUserHa +
Nick Crews
Nikhil +
Niklas Rousset +
Niruta Talwekar +
Nithurshen +
Nitish Satyavolu +
Noa Tamir
Noah Asing +
Nrezhang +
Olivier H. +
PRANAV +
Parthava Adabala +
Parthi
Pascal Brochart +
Pascal Corpet +
Patrick Hoefler
Paul
Paul Behrisch +
Paul Bissex +
Paulo S. Costa
Pedro Diogo +
Pedro Freitas +
Pedro Marques +
Pedro Santos +
PenguinPen +
Peter Nguyen +
Peter Westling +
Petroncini +
Philipp Hoffmann +
Pol Rius +
Praateek Mahajan +
Pranav Raghu +
Pranav Wadhwa +
Prathamesh +
Preetham Yerragudi +
Qaiser Abbasi +
Quang Nguyễn
Quentin Lhoest +
Rafael Fontenelle +
Raffi Enficiaud +
Rajvi Gemawat +
Ralf Gommers
Randolf Scholz
Richard Howe +
Richard Shadrach
Ritoban Dutta +
Ritwiz Sinha +
Rob
Robert Schmidtke
Robert Utterback +
Robert Wolff +
Robin
Robin Mader +
Robin Shindelman +
Rohan Jain
Roline Stapny Saldanha +
Ron Arbo +
Rui Amaral +
Ruifeng Zheng +
Rustam Ali +
Rutrum +
S +
SAHARSH TIBREWALA +
SALCAN
Saadha Salim +
Sam Baumann +
Samuel +
Samuel Chai
Samuel Oranyeli
Samuel Xavier +
Sanchit Rishi +
SanchitD +
Sangam Paudel +
Sanjana Moudgalya +
Santhosh Kumar Bethi +
Saraswathy Kalaiselvan +
Sathvik Mulukutla +
Scott Talbert
Sebastian Berg
Sebastian Correa +
SebastianOuslis +
Sergey B Kirpichev +
Sergio Livi +
Shabab Karim
Shashwat Agrawal
ShaunSrirangam +
Shawn Liu +
Shi Entong +
Shing Chan +
Shmulik Cohen +
Shreyal Gupta +
Shreyas +
Shubham Sarkar +
Shubhang Sinha +
Shubhank Gyawali +
Shubhankar Agrawal +
Siddhesh Bangar +
SiemBerhane +
Simon Hawkins
Sinclair Hudson +
Sivasweatha Umamaheswaran +
Sofia Soares +
Sparsh Sah +
Sreeja Govardhana +
Srinitya Kondapally +
Stefano Silvestri +
Steffen Rehberg
Stepfen Shawn
Steven Schaerer
SubsequentlySneeds +
Suhrid Singh +
Sukriti +
Sumeet Bhatnagar +
Swati Sneha +
T. Koskamp +
TJ +
Tal yahav +
Tanya Bouman +
TechnoShip123 +
Tejas Rajput +
Tejaswini V +
TessAfanasyeva +
Thad Guidry +
Thai Villaluna +
Thanh Lam DANG +
Thanh Le-Cong +
Thi PHAN +
Thierry Moisan
Thomas A Caswell
Thomas Baumann
Thomas Dixon +
Thomas H
Thomas Heavey
Thomas Holder +
Thomas Li
Thomaz +
Thomaz Miranda +
Thummalapalli Sai Teja Sri Sanjana +
Tiffany Xiao +
Tilova Shahrin +
Tim Hoffmann
Tim Smith +
Tim Sweña (Swast) +
Tim Yang
Tirthraj Parmar +
Tolker-KU
Tom Augspurger
Tomaz Silva +
Tonow +
Torsten Wörtwein
Trevor Serrao +
Trinh Quoc Anh
Tristan Koskamp +
Tuhin Sharma +
Tunahan Yardımcı +
Tyson Cung +
U-S-jun +
UDIT BALIYAN +
UV +
Udit Baliyan +
Ulrich Dobramysl +
VISWESWARAN1998 +
Valentin Iovene
Veit Heller +
Venkat +
Venkata Akhil Mettu +
Vibavari Gurunathan +
Vignesh Iyer +
Vijay Sarathy +
Vikram Kumar +
Vineet Kumar +
Vishal Shivam +
Viswa Sai Ammiraju Bonam +
Vladimir Fokow
Vrashank Shetty +
W. H. Wang +
Wang Haoxiang +
Wei-Hsiang (Matt) Wang +
Wes Turner
WhimsyHippo +
Will Sorenson +
William Andrea
William Ayd
William Joshua King +
William King +
Winnie +
Wong2333 +
Work +
XY +
Xiao Yuan
Y.X +
Yana Mishula +
Yashpal Ahlawat +
Yassin Abdelghany +
Yaswanth Kumar +
Yi-Fan Wang +
Yi-Han Chen +
Yinon Horev +
YinonHorev +
Yoshimu U. Nats +
Yuki Kitayama
Yuki Kobayashi +
Yuri Batista Ishizawa +
Yuvraj Pradhan +
ZA1815 +
ZKaoChi +
Zachary Collins +
Zanir Pirani +
ZanirP +
Zephy +
Zhengbo Wang
Zorex Salvo +
Zrahay +
[Annika Rudolph] +
aBiR1D +
aaron-robeson-8451
aaronchucarroll +
abonte
ahmedbektic +
aimlnerd +
amansharma612 +
ammar-qazi +
ananiavito +
anishkarki +
anzber +
aokizy +
aram-cinnamon
asoledad33 +
auderson
avecasey +
averagejoy +
avm19 +
aydinkhan2005 +
bdwzhangumich +
benjamindonnachie +
bluestarunderscore +
callumfrederiksen +
calvin +
chaoyihu +
chen +
chi +
cloudboat +
cmjcharlton +
cmp0xff +
cristian_scobioala +
dajale423 +
datapythonista +
davidesquer +
dependabot[bot]
devin-ai-integration[bot] +
dkane01 +
droussea2001 +
dshettyepi +
dsousa +
easternsun7 +
eicchen +
eicchen02 +
eightyseven +
eilonc-cx +
ellaella12 +
ensalada-de-pechuga +
er-eis +
erichxchen +
eshaready +
fatslow +
gabuzi +
gameofby +
gboeker +
hafeja +
haffara +
harinik +
huhu +
huisman +
hye ryung cho +
iangainey +
ianlv +
igeni +
imTejasRajput +
invain01 +
invalidarg +
ivanpan0626 +
ivonastojanovic +
jad +
james-magee +
jarent-nvidia +
jayendhargautham +
jbrockmendel
jeffersbaxter +
jeffery nosakhare Omorodion +
jeffreykenneth +
jerrywbirnbaum +
jgao8 +
jl_win_a +
jmalp +
jmarin +
johnff9 +
johnpaulfeliciano98 +
johnyu013 +
jrmylow +
justmhie +
jzwick +
karnbirrandhawa +
koushik-rout-samsung +
kpvenkat47 +
krishna datta +
ktseng4096 +
lamprinikourou +
lfffkh +
lif +
llayague +
mateomramos +
matiaslindgren +
matsidzi +
mattbest +
mazhar996 +
messense +
microslaw +
mikkas456 +
morotti
mroeschke * DOC: fix example for iv_idx.left * Implement test for GH #21340 * minor fixup * Lint contribution * Make spacing consistent * Lint * Remove duplicate column construction * Avoid DeprecationWarning by setting include_groups=False in apply ——— Co-authored-by: Jason Mok +
mroeschke +
musvaage +
mutricyl +
myenugula +
ncknelson +
ofsouzap +
omahs +
ooo oo +
pandas Development Team
partev
paul +
pedrocariellof +
pre-commit-ci[bot]
ptth222
r0rshark +
rdzantoine.pro@gmail.com +
renanffernando +
rhshadrach
richard +
ritwika314 +
rmorotti +
rohanjain101
root +
s1099 +
sah0725 +
santhoshbethi +
sdhjebngc +
sharkipelago +
shriyakalakata +
sjalkote +
skalwaghe_56 +
sliuos +
sooooooing +
specialkapa +
sshu2017 +
steeleelliott03 +
stevenae +
sunlight +
surenpoghosian +
suzyahyah +
taranarmo +
tasfia8
tharun-mk +
thetestspecimen +
thomasdamcevski +
thwait +
tisjayy +
tomas-cc +
u7397058 +
undermyumbrella1 +
v-lozko +
veljanin +
viable-alternative +
wanglc02 +
wdyy20041223 +
wenchen-cai +
william larkin +
wooseogchoi +
wysiwyg +
xiaohuanlin +
xingyubobo33333 +
xxx.Yan +
yashb
yjennyli +
yokomotod +
zachyattack23 +
zhan7236 +
zhiqiangxu +
zishan044 +
zjweiss-google +
zslsally +
Álvaro Kothe
Óscar Gómez +
张博闻 +
许知恒 +
🍌Shawn +