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 会失败)

  • 缺失值标记始终是 NaNnp.nan),并且遵循与其他默认数据类型相同的缺失值语义。

这些有意进行的更改可能导致破坏性后果,例如在检查 .dtype 是否为 object 类型或检查确切的缺失值标记时。有关行为更改的更多详细信息以及如何使您的代码适应新的默认设置,请参阅新字符串数据类型迁移指南(pandas 3.0)

Copy-on-Write 的一致复制/视图行为#

pandas 3.0 中的新“Copy-on-Write”行为在 pandas 处理复制和视图的方式上带来了行为上的改变。变更摘要

  1. 任何索引操作(以任何方式子集化 DataFrame 或 Series,即包括将 DataFrame 列作为 Series 访问)或返回新的 DataFrame 或 Series 的任何方法的结果,在用户 API 方面始终表现得像是复制。

  2. 因此,如果您想修改一个对象(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 协议公开。

DataFrameSeries 现在支持 Arrow PyCapsule 接口,用于数据的导出和导入(GH 56587GH 63208GH 59518GH 59631)。

添加了专用的 DataFrame.from_arrow()Series.from_arrow() 方法,用于通过该接口将任何 Arrow 兼容的数据对象导入 pandas 对象。

对于导出,DataFrameSeries 实现 C 流接口(__arrow_c_stream__)方法。

这些方法目前依赖 pyarrow 将表格对象转换为 Arrow 格式或从 Arrow 格式转换为 pandas。

更新的弃用策略#

pandas 3.0.0 更新了弃用策略,使用新的 3 阶段策略来明确将发出哪些弃用警告:首先使用 DeprecationWarning,然后在下一个主要版本之前的最后一个次要版本中切换到 FutureWarning 以获得更广泛的可见性,然后在主要版本中删除已弃用的功能。这样做的目的是为下游包提供更多时间来适应 pandas 的弃用,这应该会减少用户从非自己代码中收到的警告数量。有关更多详细信息,请参阅PDEP 17

pandas 中即将发生的所有更改的警告都将具有基类 pandas.errors.PandasChangeWarning。用户还可以使用以下子类来控制警告。

在 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() 现在会引发 UserWarningGH 56954

  • read_parquet() 接受 to_pandas_kwargs,它会被转发到 pyarrow.Table.to_pandas(),这使得可以传递额外的关键字参数来自定义转换为 pandas 的过程,例如使用 maps_as_pydicts 将 Parquet 映射数据类型读取为 Python 字典(GH 56842

  • read_spss() 现在支持将 kwargs 传递给 pyreadstatGH 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

Reshaping

Missing

  • DataFrame.fillna()Series.fillna() 现在可以接受 value=None;对于非对象 dtype,将使用相应的 NA 值(GH 57723

  • DataFrame.fillna() 中,添加了对 axis=1dictSeries 参数的支持(GH 4514

数值

  • DataFrame.agg() 使用 axis=1 和一个会重新标记结果索引的 func 调用时,现在会引发 NotImplementedErrorGH 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=FalseGH 54328

  • Series.cummin()Series.cummax() 现在支持 CategoricalDtypeGH 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

字符串

Datetimelike

  • Easter 获得了一个新的构造函数参数 method,它指定了用于计算复活节的方法,例如东正教复活节(GH 61665

  • Holiday 构造函数参数 days_of_week 在类型不是 Nonetuple 时将引发 ValueErrorGH 61658

  • Holiday 获得了构造函数参数和字段 exclude_dates,用于从自定义假日日历中排除特定的日期时间(GH 54382

  • 添加了半年度偏移类 HalfYearBeginHalfYearEndBHalfYearBeginBHalfYearEndGH 60928

  • 改进了偏移量别名的弃用消息(GH 60820

  • 将两个 DateOffset 对象相乘现在将引发 TypeError 而不是 RecursionErrorGH 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 48936GH 47489

  • pandas 对象中的 frozenset 元素现在可以本机打印(GH 60690

类型提示

绘图

ExtensionArray

  • ArrowDtype 现在支持 pyarrow.JsonTypeGH 60958

  • 使用 numpy 可空 dtype 的 Series.rank()DataFrame.rank() 会保留 NA 值,并在适当的时候返回 UInt64 dtype,而不是将 NA 转换为 float64 dtype 的 NaNGH 62043

  • 改进了 DataFrame.where()DataFrame.mask() 在使用 ExtensionDtype other 时的结果 dtype(GH 62038

其他

  • set_option() 现在接受一个选项字典,从而简化了多个设置的同时配置(GH 61093

  • DataFrame.apply() 支持使用第三方执行引擎,如 Bodo.ai JIT 编译器(GH 60668

  • Series.map() 现在接受一个 engine 参数,以允许使用第三方执行引擎进行执行(GH 61125

  • 支持将 Series 输入传递给 json_normalize(),并保留 IndexGH 51452

  • 用户可以通过将选项 mode.performance_warnings 设置为 False 来全局禁用任何 PerformanceWarningGH 56920

打包

  • wheels.yml 中,将 wheel 上传切换为 **PyPI 可信发布** (OIDC),以进行 release-tag 推送。(GH 61718

  • 现在 Windows ARM64 架构也提供了 wheels(GH 61462

  • 现在 Windows 上的 free-threading Python 构建也提供了 wheels(除其他平台外)(GH 61463

重要的 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

同样

这些改进也修复了 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。这会影响通用构造函数(SeriesDataFrameIndexDatetimeIndex)以及特定的转换或创建函数(to_datetime()to_timedelta()date_range()timedelta_range()TimestampTimedelta)。

各种输入类型的通用规则

  • 解析字符串时的默认新分辨率为微秒,当字符串的精度需要时,会回退到纳秒。

  • 对于标准库 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=Truesort=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() 导致不一致排序的情况如下。

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 51716GH 35388),但作为附带结果导致了几个小的行为差异。

  • pd.offsets.Day(n) 不再与 pd.offsets.Hour(24*n) 相等。

  • offsets.Day 不再支持除法。

  • Timedelta 不再接受 Day 对象作为输入。

  • tseries.frequencies.to_offset()Timedelta 对象上,在以前返回 Day 对象的情况下,现在返回 offsets.Hour 对象。

  • 向带有 Day freq 的时区感知 DatetimeIndex 添加或减去一个标量,不再保留该 freq 属性。

  • 添加或减去一个带 TimedeltaDay 不再受支持。

  • 向时区感知 Timestamp 或类似日期时间对象添加或减去一个 Day 偏移量,可能会导致歧义或不存在的时间,这将引发错误。

改变了 pyarrow 和 numpy 可空浮点 dtype 中 NaN 值的处理方式#

以前,在处理可空 dtype(例如 Float64Dtypeint64[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

将来,打算将 NaNNA 视为不同的值,并且在 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.valuesnp.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

有关更多信息,请参阅DependenciesOptional 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() 现在将保留 SeriesIndex,以前的输出有一个新的 RangeIndexGH 51452)。

  • 不再明确支持使用 Python 2 创建的 Pickle 和 HDF(.h5)文件(GH 57387)。

  • 不再支持来自 pandas 版本低于 1.0.0 的 pickled 对象(GH 57155)。

  • 移除了 Index.sort(),该方法总是引发 TypeError。此属性未定义,将引发 AttributeErrorGH 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",而是会从 startendfreq 参数推断单位。要覆盖这些,请显式指定所需的 unitGH 59031)。

  • CategoricalIndex.append() 不再尝试将不同数据类型的索引强制转换为调用者的数据类型(GH 41626)。

  • ExtensionDtype.construct_array_type() 现在是普通方法,而不是 classmethodGH 58663)。

  • SeriesIndexExtensionArraylist 之间的算术运算现在将该列表一致地包装在等同于 Series(my_list).array 的数组中。要进行任何其他类型的推断或转换,请在操作之前显式进行(GH 62552)。

  • IndexSeries 之间的比较操作现在始终返回 Series,无论哪个对象在左边还是右边(GH 36759)。

  • NumPy 函数(如 np.isinf),当在 Index 对象上调用时返回布尔 dtype,现在返回布尔数据类型的 Index 而不是 np.ndarrayGH 52676)。

  • 可以就地操作的方法(replace()fillna()ffill()bfill()interpolate()where()mask()clip())在 inplace=True 时,现在返回修改后的 DataFrame 或 Series(self),而不是 NoneGH 63207)。

  • 所有 Index 构造函数现在默认复制 numpy.ndarrayExtensionArray 输入,当 copy=None 时,这与 Series 的行为一致(GH 63388)。

弃用#

Copy 关键字#

以下方法的 copy 关键字参数已被弃用,并将在未来版本中删除。(GH 57347

Copy-on-Write 使用延迟复制机制,该机制会推迟数据复制,直到需要时为止。使用 .copy 触发即时复制。从 3.0 版本开始,copy 关键字没有效果,因此可以安全地从代码中删除它。

其他弃用项#

移除先前版本的弃用/更改#

强制弃用别名 MQY 等,改用 MEQEYE 等表示偏移量。#

重命名了以下偏移量别名(GH 57986)。

偏移量

已移除的别名

新的别名

MonthEnd

M

ME

BusinessMonthEnd

BM

BME

SemiMonthEnd

SM

SME

CustomBusinessMonthEnd

CBM

CBME

QuarterEnd

Q

QE

BQuarterEnd

BQ

BQE

YearEnd

Y

YE

BYearEnd

BY

BYE

其他移除项#

  • DataFrameGroupBy.idxmin()DataFrameGroupBy.idxmax()SeriesGroupBy.idxmin()SeriesGroupBy.idxmax() 现在将在组包含所有 NA 值时,或在使用 skipna=False 并遇到任何 NA 值时,引发 ValueErrorGH 10694GH 57745)。

  • concat() 不再忽略空对象来确定输出 dtype(GH 39122)。

  • concat() 在所有条目均为 NA 的情况下,不再忽略这些条目的 dtype 来确定结果 dtype(GH 40893)。

  • read_excel(), read_json(), read_html(), and read_xml() 不再接受原始字符串或字节表示的数据。该类型的数据必须被包装在 StringIOBytesIO 中(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 对象的 SeriesGH 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() 的可调用参数返回 tupleGH 53769

  • 不允许在 pandas 对象和无 dtype 的序列(例如 listtuple)之间进行逻辑运算(||&^);请先将对象包装在 SeriesIndexnp.array 中(GH 52264

  • 不允许在具有不匹配索引和非 objectbool 的 dtype 的 Series 之间进行逻辑运算(&^||)时自动向上转换为 object 类型(GH 52538

  • 不允许在没有 valueto_replace 不是 dict 类型的情况下调用 Series.replace()DataFrame.replace()GH 33302

  • 不允许使用标量数据构建 arrays.SparseArrayGH 53039

  • 不允许使用长度为零的布尔索引器索引 Index,现在会引发 ValueErrorGH 55820

  • 不允许将非标准(np.ndarrayIndexExtensionArraySeries)类型传递给 isin()unique()factorize()GH 52986

  • 不允许将 pandas 类型传递给 Index.view()GH 55709

  • 不允许在 array() 中为 datetime64 和 timedelta64 dtypes 使用“s”、“ms”、“us”、“ns”以外的单位(GH 53817

  • pandas.core.internalspandas.core.internals.api 中移除了 BlockDatetimeTZBlockExtensionBlockcreate_block_manager_from_blocksGH 55139

  • Categorical 构造函数中移除了 fastpath 关键字参数(GH 20110

  • PeriodArray 构造函数中移除了 freq 关键字参数,请使用“dtype”代替(GH 52462

  • Series.resample()DataFrame.resample() 中移除了 kind 关键字参数(GH 58125

  • 移除了 arrays.NumpyExtensionArray 的别名 arrays.PandasArrayGH 53694

  • Series.replace()DataFrame.replace() 中移除了已弃用的 methodlimit 关键字参数(GH 53492

  • 移除了扩展测试类 BaseNoReduceTestsBaseNumericReduceTestsBaseBooleanReduceTestsGH 54663

  • DatetimeIndex 构造函数中移除了 closednormalize 关键字参数(GH 52628

  • 移除了 read_csv()read_table() 中已弃用的 delim_whitespace 关键字参数,请使用 sep=r"\s+" 代替(GH 55569

  • 要求 SparseDtype.fill_value()SparseDtype.subtype() 的有效值(GH 53043

  • 停止在 Series.isin()Index.isin() 中自动将非日期时间类值(主要是字符串)强制转换为 datetime64timedelta64PeriodDtype dtypes(GH 53111

  • IndexSeriesDataFrame 构造函数中,当输入是 pandas 对象(SeriesIndexExtensionArray)时,停止进行 dtype 推理。要保留当前行为,请先在输入上调用 .infer_objectsGH 56012

  • 在将 Index 设置到 DataFrame 中时,停止进行 dtype 推理(GH 56102

  • Index.insert() 中,当使用 object-dtype 索引时,停止进行 dtype 推理;这通常会影响将新条目设置到空的 SeriesDataFrame 时产生的索引/列(GH 51363

  • TimedeltaIndex 构造函数中移除了 closedunit 关键字参数(GH 52628, GH 55499

  • Index.sort_values() 中的所有参数现在都只能通过关键字传递(GH 56493

  • Series.to_dict() 中的所有参数现在都只能通过关键字传递(GH 56493

  • Categorical.map()na_action 的默认值更改为 NoneGH 51645

  • DataFrame.groupby()Series.groupby()observed 的默认值更改为 TrueGH 51811

  • 强制禁止在原地 setitem 类操作中发生向上转型;请参见 PDEP6GH 59007

  • 强制在 testing.assert_series_equal()testing.assert_frame_equal() 中,对于 object dtype 和不匹配的 null-like 值(现在被视为不相等)进行弃用强制执行(GH 18463

  • 强制执行 datetime64DatetimeTZDtypePeriodDtype dtypes 上 allany 约简的弃用强制执行(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=TrueGH 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 约简 sumprodstdvarsemaxis=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_formatGH 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.ndarrayExtensionArrayIndexSeries)类型的弃用强制执行(GH 52981

  • 强制执行解析系统时区字符串到 tzlocal 的弃用,因为它依赖于系统时区,请改用传递 tz 关键字参数(GH 50791

  • 强制执行向 SeriesGroupBy.agg() 传递字典的弃用强制执行(GH 52268

  • 强制执行 YearBegin 中表示频率的字符串 AS,以及表示具有各种财年起点的年度频率的字符串 AS-DECAS-JAN 等的弃用(GH 57793

  • 强制弃用 YearEnd 中表示频率的字符串 A,以及表示具有不同财年末年度频率的字符串 A-DECA-JAN 等 (GH 57699)

  • 强制弃用 BYearBegin 中表示频率的字符串 BAS,以及表示具有不同财年起始年度频率的字符串 BAS-DECBAS-JAN 等 (GH 57793)

  • 强制弃用 BYearEnd 中表示频率的字符串 BA,以及表示具有不同财年末年度频率的字符串 BA-DECBA-JAN 等 (GH 57793)

  • 强制弃用 HourBusinessHourCustomBusinessHour 中表示频率的字符串 HBHCBH (GH 59143)

  • 强制弃用 Timedelta 中表示单位的字符串 HBHCBH (GH 59143)

  • 强制弃用 MinuteMilliMicroNano 中表示频率的字符串 TLUN (GH 57627)

  • 强制弃用 Timedelta 中表示单位的字符串 TLUN (GH 57627)

  • 强制弃用 concat()len(keys) != len(objs) 时截断到较短长度的行为。现在这会引发 ValueError (GH 43485)

  • 强制弃用 DataFrame.replace()Series.replace() 中可能引入新类别的 CategoricalDtype 的行为。(GH 58270)

  • 强制弃用 Series.argsort() 在存在 NA 值时(GH 58232)的行为。

  • 强制弃用 Series.interpolate()DataFrame.interpolate() 中的值“pad”、“ffill”、“bfill”和“backfill”(GH 57869

  • 强制弃用并移除 Categorical.to_list(),请改用 obj.tolist()GH 51254

  • 强制弃用对 所有相关方法 的静默降级 (GH 54710)

  • DataFrame.stack() 中,future_stack 的默认值现在为 True;指定 False 将引发 FutureWarning (GH 55448)

  • level(长度为 1 的列表)对 DataFrameGroupBySeriesGroupBy 进行迭代时,将返回长度为 1 的组的元组 (GH 50064)

  • 方法 applyaggtransform 将不再用等效的 pandas 实现替换 NumPy 函数(例如 np.sum)和内置函数(例如 min);如果您希望使用 pandas 实现,请使用字符串别名(例如 "sum""min")(GH 53974)

  • DataFrame.shift()Series.shift()DataFrameGroupBy.shift() 中同时传递 freqfill_value 现在会引发 ValueError (GH 54818)

  • 移除了支持布尔 dtype 的 DataFrameGroupBy.quantile()SeriesGroupBy.quantile() (GH 53975)

  • 移除了 DateOffset.is_anchored()offsets.Tick.is_anchored() (GH 56594)

  • 移除了 DataFrame.applymapStyler.applymapStyler.applymap_index (GH 52364)

  • 移除了 DataFrame.boolSeries.bool (GH 51756)

  • 移除了 DataFrame.firstDataFrame.last (GH 53710)

  • 移除了 DataFrame.swapaxesSeries.swapaxes (GH 51946)

  • 移除了 DataFrameGroupBy.grouperSeriesGroupBy.grouper (GH 56521)

  • 移除了 DataFrameGroupby.fillnaSeriesGroupBy.fillna` (GH 55719)

  • 移除了 Index.format,请改用 str 类型的 Index.astype() 或带有 formatter 函数的 Index.map()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)

  • DataFrameSeriesarrays.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() 中的 methodlimitfill_axisbroadcast_axis 关键字 (GH 51968)

  • 移除了 pandas.api.types.is_intervalpandas.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_gbqDataFrame.to_gbq。请改用 pandas_gbq.read_gbqpandas_gbq.to_gbq https://pandas-gbq.readthedocs.io/en/latest/api.html (GH 55525)

  • 移除了 read_parquet() 中的 use_nullable_dtypesGH 51853

  • 移除了 PeriodIndex 构造函数中的 yearmonthquarterdayhourminutesecond 关键字,请改用 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.agg() 使用 Series.apply() 的已弃用行为(GH 53325

  • 移除了 Series.fillna()DataFrame.fillna() 中的已弃用关键字 methodGH 57760

  • 移除了选项 mode.use_inf_as_na,请先将 inf 条目转换为 NaNGH 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)

  • 移除了 Series 构造函数中的 fastpath 参数 (GH 55466)

  • 移除了 Indexis_booleanis_integeris_floatingholds_integeris_numericis_categoricalis_objectis_interval 属性 (GH 50042)

  • 移除了 PeriodIndex 中的 ordinal 关键字,请改用 PeriodIndex.from_ordinals()GH 55960

  • 移除了 Resampler 方法中的未使用参数 *args**kwargs (GH 50977)

  • 解析字符串到日期时间时,无法识别的时区现在会引发 ValueError (GH 51477)

  • 移除了 Grouper 的属性 axgroupsindexerobjGH 51206, GH 51182

  • 移除了 read_csv()read_table() 中的已弃用关键字 verboseGH 56556

  • 移除了 ExtensionArray.fillna() 中的 method 关键字,请改用 ExtensionArray._pad_or_backfillGH 53621

  • 移除了 DataFrameGroupBydtypes 属性 (GH 51997)

  • 强制弃用 argminargmaxidxminidxmaxskipna=False 且遇到 NA 值或所有值都是 NA 值时返回结果的行为;这些操作现在在这种情况下会引发错误(GH 33941, GH 51276

  • 强制弃用 StringDtype 的存储选项“pyarrow_numpy”(GH 60152)

  • 移除了在 DataFrameGroupBy.apply()Resampler.apply() 中指定 include_groups=TrueGH 7155

性能改进#

  • 消除了访问器属性(例如 Series.str)中到原始 pandas 对象的循环引用。但是,访问器实例化不再被缓存(GH 47667, GH 41357

  • 当构造的 valuesrange 时,Categorical.categories 返回 RangeIndex 列而不是 Index。(GH 57787

  • datadict 时,DataFrame 在可能的情况下返回 RangeIndex 列(GH 57943

  • datadict 时,Series 在可能的情况下返回 RangeIndex 索引(GH 58118

  • objs 包含 SeriesDataFrameaxis=0 时,concat() 在可能的情况下返回 RangeIndex 列(GH 58119

  • keysrangeRangeIndex 时,concat()MultiIndex 结果中返回 RangeIndex 级别(GH 57542

  • 当追加的值可以继续 RangeIndex 时,RangeIndex.append() 返回 RangeIndex 而不是 IndexGH 57467

  • 当索引中有重复值时,Series.nlargest() 的性能有所提高(GH 55767

  • 当可能时,Series.str.extract() 返回 RangeIndex 列而不是 Index 列(GH 57542

  • Series.str.partition() 结合 ArrowDtype 在可能的情况下返回 RangeIndex 列而不是 Index 列(GH 57768

  • DataFrame 中,当 datadict 且指定了 columns 时,性能得到提升(GH 24368

  • 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

  • merge() 中,如果可以使用哈希连接,性能得到提升(GH 57970

  • merge() 中,当连接键具有不同的 dtype 并需要向上转型时,性能得到提升(GH 62902

  • 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 修复#

分类#

  • 在使用具有 ArrowDtypeIndex 构建 Categorical 时存在错误(GH 60563

  • Categorical 中,从具有 dtype='object' 的 pandas SeriesIndex 构建时,未能将类别的 dtype 保持为 object;现在,对于这些情况,categories.dtype 被保持为 object,而具有 dtype='object' 的 numpy 数组和 Python 序列继续推断最具体的 dtype(例如,如果所有元素都是字符串,则推断为 str)(GH 61778

  • pandas.Categorical 中,在使用“string”dtype 时显示不带引号的字符串类别存在错误(GH 63045

  • Series.apply() 中,对于 CategoricalDtypenan 被忽略存在错误(GH 59938

  • bdate_range() 中,使用频率 freq="cbh" 会引发 ValueError 存在错误(GH 62849

  • testing.assert_index_equal() 中,当 check_categorical=Trueexact=False 时,对于不可比较的 CategoricalIndex,会引发 TypeError 而不是 AssertionErrorGH 61935

  • Categorical.astype() 中,当 copy=False 时,仍然会触发代码的复制存在错误(GH 62000

  • DataFrame.pivot()DataFrame.set_index() 中,对于具有 pyarrow 字典 dtype 的列,会引发 ArrowNotImplementedError 存在错误(GH 53051

  • Series.convert_dtypes() 中,当 dtype_backend="pyarrow" 时,空的 CategoricalDtype Series 引发错误或被转换为 null[pyarrow] 存在错误(GH 59934

日期时间类型#

  • is_year_start 中,通过 date_range() 使用频率 'MS' 构建的 DatetimeIndex 的年份或季度开始属性不正确存在错误(GH 57377

  • DataFrame 中,当 dtypetimedelta64data 是包含 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,错误地引发 TypeErrorGH 58403

  • to_datetime() 中,将 lxml.etree._ElementUnicodeResultformat 一起传递时引发 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。现在正确引发 OutOfBoundsDatetimeGH 61208

  • DataFrame.min()DataFrame.max() 中,将 datetime64timedelta64 列转换为 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 时出现错误,错误地返回 object dtype(GH 58421

  • Series.dt.microsecond() 中使用 pyarrow 支持的 Series 时,产生不正确的结果(GH 59154

  • Timestamp.normalize()DatetimeArray.normalize() 中出现错误,当非常小(遥远的过去)的值导致整数溢出时,不会引发错误,而是返回不正确的结果(GH 60583

  • Timestamp.replace() 中出现错误,当替换引入非零 nanosecondmicrosecond 时,未能更新 unit 属性(GH 57749

  • to_datetime() 中出现错误,当传递不常见的日期字符串时,不尊重 `dayfirst` 参数(GH 58859

  • to_datetime() 中对包含缺失值的浮点数数组进行操作时,会引发 FloatingPointErrorGH 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 的对象之间进行比较时出现错误,错误地引发 TypeErrorGH 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

  • 在将具有不匹配分辨率的标量值设置到具有非纳秒 datetime64timedelta64DatetimeTZDtype 的数组中时出现错误,错误地截断这些标量(GH 56410

时间差#

  • Timedelta.to_pytimedelta() 中提高了精度,以便对基于纳秒的大型 Timedelta 一致地四舍五入微秒(GH 57841

  • Timedelta 构造函数中出现错误,当传递无效关键字时未能引发错误(GH 53801

  • DataFrame.cumsum() 中出现错误,当 dtype 为 timedelta64[ns] 时会引发 IndexErrorGH 57956

  • 在将非纳秒单位的 Timedelta 对象与 Python datetime.datetime 对象相加或相减时出现错误,导致结果不正确;现在当 Timedeltas 在 datetime.timedelta 实现范围之内时,此操作可以正常工作(GH 53643

  • 在具有 `timedelta64` dtype 的乘法运算中出现错误,当乘以布尔对象或 dtype 时未能引发 TypeErrorGH 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

数值#

转换#

字符串#

Interval#

索引#

  • DataFrame.__getitem__() 中,当切片一个有很多行的 DataFrame 时,会引发 OverflowErrorGH 59531

  • DataFrame.__setitem__() 中,对一个空的 DataFrame 使用元组时,会损坏该帧(GH 54385

  • DataFrame.from_records() 中,当在 `index` 中传递空列表时,会引发 ValueErrorGH 58594

  • DataFrame.loc()DataFrame.iloc() 中,当从具有混合数据类型的 DataFrame 中选择时,返回了不正确的 dtype(GH 60600

  • DataFrame.loc() 中,当向 Series 设置两个索引时,loc-set 的行为不一致(GH 59933

  • Index.equals() 中,当比较具有字符串 dtype 的 SeriesIndex 时出现错误(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#

  • 传递无效的 period 别名给 PeriodIndex.to_timestamp() 时,错误消息已修复 (GH 58974)

  • 接近最小时间戳(微秒和毫秒分辨率)的可恢复溢出已修复 (GH 63278)

绘图#

  • 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 +