2.2.0 版本的新增内容(2024年1月19日)#

这些是 pandas 2.2.0 中的更改。请参阅 发布 以获取包括其他版本 pandas 的完整更新日志。

pandas 3.0 中的即将到来的变化#

pandas 3.0 将带来两个对 pandas 默认行为的更大改变。

写时复制#

目前可选的写时复制模式将在 pandas 3.0 中默认启用。将没有选项保持当前行为启用。新的行为语义在 关于写时复制的用户指南 中解释。

新的行为可以从 pandas 2.0 开始通过以下选项启用:

pd.options.mode.copy_on_write = True

这一更改带来了 pandas 在处理副本和视图时的行为变化。其中一些变化允许明确的弃用,例如链式赋值的变化。其他变化则更为微妙,因此警告隐藏在一个可以在 pandas 2.2 中启用的选项后面。

pd.options.mode.copy_on_write = "warn"

这种模式会在许多不同的情况下发出警告,而这些情况实际上与大多数查询无关。我们建议探索这种模式,但不必消除所有这些警告。迁移指南 更详细地解释了升级过程。

专用的字符串数据类型(默认由 Arrow 支持)#

从历史上看,pandas 使用 NumPy 对象数据类型表示字符串列。这种表示方法存在许多问题,包括性能慢和内存占用大。这将在 pandas 3.0 中发生变化。pandas 将开始推断字符串列为新的 string 数据类型,由 Arrow 支持,该类型在内存中表示连续的字符串。这将带来巨大的性能和内存改进。

旧行为:

In [1]: ser = pd.Series(["a", "b"])
Out[1]:
0    a
1    b
dtype: object

新行为:

In [1]: ser = pd.Series(["a", "b"])
Out[1]:
0    a
1    b
dtype: string

在这些场景中使用的字符串数据类型将主要表现为 NumPy 对象的行为,包括缺失值语义和这些列上的一般操作。

此更改包括API中的一些其他更改:

  • 目前,指定 dtype="string" 会创建一个由 Python 字符串支持的 dtype,这些字符串存储在 NumPy 数组中。在 pandas 3.0 中,这种 dtype 将创建一个由 Arrow 支持的字符串列。

  • 列名和索引也将由 Arrow 字符串支持。

  • PyArrow 将成为 pandas 3.0 的必需依赖项,以适应这一变化。

这个未来的 dtype 推断逻辑可以通过以下方式启用:

pd.options.future.infer_string = True

增强功能#

在 to_sql 和 read_sql 中支持 ADBC 驱动#

read_sql()to_sql() 现在可以使用 Apache Arrow ADBC 驱动程序。与通过 SQLAlchemy 使用的传统驱动程序相比,ADBC 驱动程序应提供显著的性能提升、更好的类型支持和更清晰的空值处理。

import adbc_driver_postgresql.dbapi as pg_dbapi

df = pd.DataFrame(
    [
        [1, 2, 3],
        [4, 5, 6],
    ],
    columns=['a', 'b', 'c']
)
uri = "postgresql://postgres:postgres@localhost/postgres"
with pg_dbapi.connect(uri) as conn:
    df.to_sql("pandas_table", conn, index=False)

# for round-tripping
with pg_dbapi.connect(uri) as conn:
    df2 = pd.read_sql("pandas_table", conn)

Arrow 类型系统提供了更广泛的数据类型,可以更紧密地匹配 PostgreSQL 等数据库所能提供的数据类型。例如,请注意不同数据库和 pandas 后端中可用的类型(非详尽列表):

numpy/pandas

arrow

postgres

sqlite

int16/Int16

int16

SMALLINT

INTEGER

int32/Int32

int32

INTEGER

INTEGER

int64/Int64

int64

BIGINT

INTEGER

float32

float32

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

float64

float64

DOUBLE PRECISION

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

对象

string

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

bool

bool_

布尔值

datetime64[ns]

时间戳(微秒)

TIMESTAMP

datetime64[ns,tz]

timestamp(us,tz)

TIMESTAMPTZ

date32

日期

month_day_nano_interval

INTERVAL

binary

BINARY

BLOB

decimal128

DECIMAL [1]

列表

ARRAY [1]

struct

复合类型

[1]

脚注

如果你有兴趣在整个 DataFrame 的生命周期中尽可能地保留数据库类型,建议用户利用 read_sql()dtype_backend="pyarrow" 参数

# for round-tripping
with pg_dbapi.connect(uri) as conn:
    df2 = pd.read_sql("pandas_table", conn, dtype_backend="pyarrow")

这将防止您的数据被转换为传统的 pandas/NumPy 类型系统,该系统通常以无法回溯的方式转换 SQL 类型。

有关ADBC驱动程序及其开发状态的完整列表,请参阅 ADBC驱动程序实现状态 文档。

基于一个或多个条件创建一个 pandas 系列#

Series.case_when() 函数已添加,用于基于一个或多个条件创建一个 Series 对象。(GH 39154)

In [1]: import pandas as pd

In [2]: df = pd.DataFrame(dict(a=[1, 2, 3], b=[4, 5, 6]))

In [3]: default=pd.Series('default', index=df.index)

In [4]: default.case_when(
   ...:      caselist=[
   ...:          (df.a == 1, 'first'),                              # condition, replacement
   ...:          (df.a.gt(1) & df.b.eq(5), 'second'),  # condition, replacement
   ...:      ],
   ...: )
   ...: 
Out[4]: 
0      first
1     second
2    default
dtype: object

to_numpy 用于 NumPy 可空和 Arrow 类型转换为合适的 NumPy dtype#

to_numpy 对于 NumPy 可空类型和 Arrow 类型现在将转换为合适的 NumPy dtype,而不是可空和 PyArrow 支持的扩展 dtype 的 object dtype。

旧行为:

In [1]: ser = pd.Series([1, 2, 3], dtype="Int64")
In [2]: ser.to_numpy()
Out[2]: array([1, 2, 3], dtype=object)

新行为:

In [5]: ser = pd.Series([1, 2, 3], dtype="Int64")

In [6]: ser.to_numpy()
Out[6]: array([1, 2, 3])

In [7]: ser = pd.Series([1, 2, 3], dtype="timestamp[ns][pyarrow]")

In [8]: ser.to_numpy()
Out[8]: 
array(['1970-01-01T00:00:00.000000001', '1970-01-01T00:00:00.000000002',
       '1970-01-01T00:00:00.000000003'], dtype='datetime64[ns]')

默认的 NumPy dtype(没有任何参数)确定如下:

  • float dtypes 被转换为 NumPy 浮点数

  • 没有缺失值的整数数据类型会被转换为 NumPy 整数数据类型

  • 带有缺失值的整数数据类型会被转换为 NumPy 浮点数据类型,并且使用 NaN 作为缺失值指示符

  • 没有缺失值的布尔型数据类型会被转换为 NumPy 布尔型数据类型

  • 带有缺失值的布尔型数据类型保持对象数据类型

  • datetime 和 timedelta 类型分别被转换为 Numpy 的 datetime64 和 timedelta64 类型,并且 NaT 被用作缺失值指示符

Series.struct 访问器用于 PyArrow 结构化数据#

Series.struct 访问器提供了用于处理 struct[pyarrow] dtype 系列数据的属性和方法。例如,Series.struct.explode() 将 PyArrow 结构化数据转换为 pandas DataFrame。(GH 54938)

In [9]: import pyarrow as pa

In [10]: series = pd.Series(
   ....:     [
   ....:         {"project": "pandas", "version": "2.2.0"},
   ....:         {"project": "numpy", "version": "1.25.2"},
   ....:         {"project": "pyarrow", "version": "13.0.0"},
   ....:     ],
   ....:     dtype=pd.ArrowDtype(
   ....:         pa.struct([
   ....:             ("project", pa.string()),
   ....:             ("version", pa.string()),
   ....:         ])
   ....:     ),
   ....: )
   ....: 

In [11]: series.struct.explode()
Out[11]: 
   project version
0   pandas   2.2.0
1    numpy  1.25.2
2  pyarrow  13.0.0

使用 Series.struct.field() 来索引到一个(可能是嵌套的)结构字段。

In [12]: series.struct.field("project")
Out[12]: 
0     pandas
1      numpy
2    pyarrow
Name: project, dtype: string[pyarrow]

Series.list 访问器用于 PyArrow 列表数据#

Series.list 访问器提供了处理 list[pyarrow] dtype 系列数据的属性和方法。例如,Series.list.__getitem__() 允许在系列中索引 pyarrow 列表。(GH 55323)

In [13]: import pyarrow as pa

In [14]: series = pd.Series(
   ....:     [
   ....:         [1, 2, 3],
   ....:         [4, 5],
   ....:         [6],
   ....:     ],
   ....:     dtype=pd.ArrowDtype(
   ....:         pa.list_(pa.int64())
   ....:     ),
   ....: )
   ....: 

In [15]: series.list[0]
Out[15]: 
0    1
1    4
2    6
dtype: int64[pyarrow]

Calamine 引擎用于 读取Excel()#

calamine 引擎被添加到 read_excel() 。它使用 python-calamine ,这为 Rust 库 calamine 提供了 Python 绑定。此引擎支持 Excel 文件(.xlsx.xlsm.xls.xlsb)和 OpenDocument 电子表格(.ods)(GH 50395)。

这个引擎有两个优点:

  1. Calamine 通常比其他引擎更快,一些基准测试显示结果比 ‘openpyxl’ 快 5 倍,比 ‘odf’ 快 20 倍,比 ‘pyxlsb’ 快 4 倍,比 ‘xlrd’ 快 1.5 倍。但是,’openpyxl’ 和 ‘pyxlsb’ 在从大文件中读取几行时由于对行进行惰性迭代而更快。

  2. Calamine 支持在 .xlsb 文件中识别日期时间,而 ‘pyxlsb’ 是 pandas 中唯一可以读取 .xlsb 文件的其他引擎。

pd.read_excel("path_to_file.xlsb", engine="calamine")

更多信息,请参见用户指南中关于 IO 工具的 Calamine(Excel 和 ODS 文件)

其他增强功能#

值得注意的错误修复#

这些是可能具有显著行为变化的错误修复。

merge()DataFrame.join() 现在一致遵循文档中描述的排序行为#

在之前版本的 pandas 中,merge()DataFrame.join() 并不总是返回遵循文档排序行为的结果。现在,pandas 在合并和连接操作中遵循文档排序行为 (GH 54611, GH 56426, GH 56443)。

如文档所述,sort=True 在结果的 DataFrame 中按字典顺序对连接键进行排序。使用 sort=False,连接键的顺序取决于连接类型(how 关键字):

  • how="left": 保留左边键的顺序

  • how="right": 保留右侧键的顺序

  • how="inner": 保留左侧键的顺序

  • how="outer": 按字典顺序排序键

一个行为变化示例是与非唯一左连接键和 sort=False 的内部连接:

In [16]: left = pd.DataFrame({"a": [1, 2, 1]})

In [17]: right = pd.DataFrame({"a": [1, 2]})

In [18]: result = pd.merge(left, right, how="inner", on="a", sort=False)

旧行为

In [5]: result
Out[5]:
   a
0  1
1  1
2  2

新行为

In [19]: result
Out[19]: 
   a
0  1
1  2
2  1

merge()DataFrame.join() 在级别不同时不再重新排序级别#

在 pandas 的早期版本中,merge()DataFrame.join() 在连接两个具有不同级别的索引时会重新排序索引级别 (GH 34133)。

In [20]: left = pd.DataFrame({"left": 1}, index=pd.MultiIndex.from_tuples([("x", 1), ("x", 2)], names=["A", "B"]))

In [21]: right = pd.DataFrame({"right": 2}, index=pd.MultiIndex.from_tuples([(1, 1), (2, 2)], names=["B", "C"]))

In [22]: left
Out[22]: 
     left
A B      
x 1     1
  2     1

In [23]: right
Out[23]: 
     right
B C       
1 1      2
2 2      2

In [24]: result = left.join(right)

旧行为

In [5]: result
Out[5]:
       left  right
B A C
1 x 1     1      2
2 x 2     1      2

新行为

In [25]: result
Out[25]: 
       left  right
A B C             
x 1 1     1      2
  2 2     1      2

增加了依赖项的最小版本#

对于 可选依赖 ,一般的建议是使用最新版本。低于最低测试版本的可选依赖可能仍然有效,但不被认为是受支持的。下表列出了已增加其最低测试版本的可选依赖。

新最低版本

beautifulsoup4

4.11.2

blosc

1.21.3

bottleneck

1.3.6

fastparquet

2022.12.0

fsspec

2022.11.0

gcsfs

2022.11.0

lxml

4.9.2

matplotlib

3.6.3

numba

0.56.4

numexpr

2.8.4

qtpy

2.3.0

openpyxl

3.1.0

psycopg2

2.9.6

pyreadstat

1.2.0

pytables

3.8.0

pyxlsb

1.0.10

s3fs

2022.11.0

scipy

1.10.0

sqlalchemy

2.0.0

tabulate

0.9.0

xarray

2022.12.0

xlsxwriter

3.0.5

zstandard

0.19.0

pyqt5

5.15.8

tzdata

2022.7

更多信息请参见 依赖项可选依赖项

其他 API 更改#

弃用#

链式赋值#

在为即将到来的对 pandas 3.0 中复制 / 视图行为的较大更改做准备时(写时复制 (CoW),PDEP-7),我们开始弃用 链式赋值

链式赋值发生在您尝试通过两个连续的索引操作来更新 pandas DataFrame 或 Series 时。根据这些操作的类型和顺序,目前这可能会或不会起作用。

一个典型的例子如下:

df = pd.DataFrame({"foo": [1, 2, 3], "bar": [4, 5, 6]})

# first selecting rows with a mask, then assigning values to a column
# -> this has never worked and raises a SettingWithCopyWarning
df[df["bar"] > 5]["foo"] = 100

# first selecting the column, and then assigning to a subset of that column
# -> this currently works
df["foo"][df["bar"] > 5] = 100

这个链式赋值的第二个示例目前可以更新原始的 df。这在 pandas 3.0 中将不再有效,因此我们开始弃用这一点:

>>> df["foo"][df["bar"] > 5] = 100
FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!
You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.
A typical example is when you are setting values in a column of a DataFrame, like:

df["col"][row_indexer] = value

Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

你可以通过移除链式赋值的使用来修复这个警告,并确保你的代码为 pandas 3.0 做好准备。通常,这可以通过使用例如 .loc 在单一步骤中进行赋值来完成。对于上面的例子,我们可以这样做:

df.loc[df["bar"] > 5, "foo"] = 100

同样的弃用适用于以链式方式进行的就地方法,例如:

>>> df["foo"].fillna(0, inplace=True)
FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.
The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.

For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.

当目标是更新DataFrame df 中的列时,这里的选择是直接在 df 上调用方法,例如 df.fillna({"foo": 0}, inplace=True)

更多详情请参见 迁移指南

弃用别名 M, Q, Y 等,改为使用 ME, QE, YE 等作为偏移量#

已弃用以下频率别名(GH 9586):

offsets

已弃用的别名

新别名

MonthEnd

M

ME

BusinessMonthEnd

BM

BME

SemiMonthEnd

SM

SME

自定义业务月末

CBM

CBME

QuarterEnd

Q

QE

BQuarterEnd

BQ

BQE

YearEnd

Y

YE

BYearEnd

BY

BYE

例如:

以前的行为:

In [8]: pd.date_range('2020-01-01', periods=3, freq='Q-NOV')
Out[8]:
DatetimeIndex(['2020-02-29', '2020-05-31', '2020-08-31'],
              dtype='datetime64[ns]', freq='Q-NOV')

未来行为:

In [26]: pd.date_range('2020-01-01', periods=3, freq='QE-NOV')
Out[26]: DatetimeIndex(['2020-02-29', '2020-05-31', '2020-08-31'], dtype='datetime64[ns]', freq='QE-NOV')

已弃用的自动向下转换#

弃用了在多种方法中对象dtype结果的自动向下转换。这些方法会以难以预测的方式静默改变dtype,因为行为依赖于值。此外,pandas正在远离静默的dtype变化(GH 54710, GH 54261)。

这些方法是:

显式调用 DataFrame.infer_objects() 以在未来复制当前的行为。

result = result.infer_objects(copy=False)

或者使用 astype 将所有全范围浮点数显式转换为整数。

将以下选项设置为选择未来的行为:

In [9]: pd.set_option("future.no_silent_downcasting", True)

其他弃用#

性能提升#

错误修复#

Categorical#

  • Categorical.isin() 对于包含重叠 Interval 值的分类数据引发 InvalidIndexError (GH 34974)

  • CategoricalDtype.__eq__() 中存在一个错误,对于混合类型的无序分类数据返回 False (GH 55468)

  • 在将 pa.dictionary 转换为 CategoricalDtype 时出现错误,使用 pa.DictionaryArray 作为类别 (GH 56672)

Datetimelike#

  • 在传递 tzdayfirstyearfirst 时,DatetimeIndex 构造中的错误忽略了 dayfirst/yearfirst (GH 55813)

  • 当传递一个浮点对象的对象类型 ndarray 和一个 tz 时,DatetimeIndex 中的错误不正确地本地化结果 (GH 55780)

  • Series.isin() 中存在一个错误,当使用 DatetimeTZDtype dtype 和所有为 NaT 的比较值时,即使序列包含 NaT 条目,也会错误地返回全为 False 的结果 (GH 56427)

  • 当使用 DatetimeTZDtype dtype DataFrame 连接全NA的 DataFrame 时,concat() 中出现的 AttributeError 错误 (GH 52093)

  • testing.assert_extension_array_equal() 中的错误,在比较分辨率时可能会使用错误的单位 (GH 55730)

  • 在传递混合字符串和数字类型的列表时,to_datetime()DatetimeIndex 中的错误不正确地引发 (GH 55780)

  • 在传递混合类型对象时,to_datetime()DatetimeIndex 中的错误,这些对象混合了时区或混合了时区感知,未能引发 ValueError (GH 55693)

  • Tick.delta() 中存在一个错误,当处理非常大的 tick 时,会引发 OverflowError 而不是 OutOfBoundsTimedelta (GH 55503)

  • 在非纳秒分辨率下使用 DatetimeIndex.shift() 的错误,错误地以纳秒分辨率返回 (GH 56117)

  • DatetimeIndex.union() 中存在一个错误,当具有相同时区但单位不同的时区感知索引时,返回对象类型 (GH 55238)

  • Index.is_monotonic_increasing()Index.is_monotonic_decreasing() 中的错误总是将 Index.is_unique() 缓存为 True 当索引中的第一个值是 NaT 时 (GH 55755)

  • Index.view() 中存在一个错误,将 datetime64 dtype 转换为不支持的分辨率时错误地引发 (GH 55710)

  • 在非纳秒分辨率和 NaT 条目的情况下,Series.dt.round() 中的错误不正确地引发 OverflowError (GH 56158)

  • Series.fillna() 中使用非纳秒分辨率的数据类型和高分辨率向量值返回不正确(内部损坏)的结果 (GH 56410)

  • 在具有分钟或小时分辨率和时区偏移的ISO8601格式字符串中,Timestamp.unit() 的错误被错误推断 (GH 56208)

  • .astype 中将高分辨率的 datetime64 数据类型转换为低分辨率的 datetime64 数据类型(例如 datetime64[us]->datetime64[ms])时,在接近较低实现边界值时会静默溢出(GH 55979

  • 在将 Week 偏移量添加或减去到 datetime64 SeriesIndexDataFrame 列时,非纳秒分辨率返回不正确的结果 (GH 55583)

  • 在将 BusinessDay 偏移量与 offset 属性相加或相减时,非纳秒的 IndexSeriesDataFrame 列出现错误结果 (GH 55608)

  • 在将具有微秒分量的 DateOffset 对象添加或减去到 datetime64 IndexSeriesDataFrame 列时出现的错误,这些列具有非纳秒分辨率 (GH 55595)

  • 在非常大的 Tick 对象与 TimestampTimedelta 对象进行加减运算时,出现 OverflowError 而不是 OutOfBoundsTimedelta 的错误 (GH 55503)

  • 在使用非纳秒的 DatetimeTZDtype 创建 IndexSeriesDataFrame 时,如果输入值在纳秒分辨率下会超出界限,错误地引发 OutOfBoundsDatetime (GH 54620)

  • 在创建 IndexSeriesDataFrame 时存在一个错误,当使用非纳秒的 ``datetime64``(或 DatetimeTZDtype)从混合数值输入时,将这些数值视为纳秒而不是数据类型单位的倍数(这种情况会在非混合数值输入时发生)(GH 56004)

  • 在创建具有非纳秒 datetime64 数据类型和超出 datetime64[ns] 范围输入的 IndexSeriesDataFrame 时,错误地引发 OutOfBoundsDatetime 的错误 (GH 55756)

  • 解析具有纳秒分辨率的非ISO8601格式日期时间字符串时,错误地截断亚微秒组件的错误 (GH 56051)

  • 解析带有亚秒分辨率和尾随零的日期时间字符串时,错误地推断秒或毫秒分辨率的问题 (GH 55737)

  • 在使用 unitTimestamp 的逐点结果不匹配的浮点型参数时,to_datetime() 的结果中存在错误 (GH 56037)

  • 修复了 concat() 在连接具有不同分辨率的 datetime64 列时会引发错误的问题 (GH 53641)

Timedelta#

  • Timedelta 构造中出现错误,引发 OverflowError 而不是 OutOfBoundsTimedelta (GH 55503)

  • 在渲染 (__repr__) 中 TimedeltaIndex 和带有 timedelta64 值的 Series 的错误,这些值具有非纳秒分辨率的条目,且都是 24 小时的倍数,无法使用在纳秒情况下使用的紧凑表示法 (GH 55405)

时区#

  • AbstractHolidayCalendar 中的一个错误,计算假期时区数据未传播 (GH 54580)

  • 在具有模糊值和 pytz 时区未能引发 pytz.AmbiguousTimeErrorTimestamp 构造中的错误 (GH 55657)

  • 在夏令时期间UTC+0附近使用 nonexistent="shift_forwardTimestamp.tz_localize() 的错误 (GH 51501)

Numeric#

转换#

  • 在调用 str 对未序列化的数组进行 DataFrame.astype() 时存在错误 - 数组可能会就地更改 (GH 54654)

  • DataFrame.astype() 中的错误,其中 errors="ignore" 对扩展类型无效 (GH 54654)

  • Series.convert_dtypes() 中的错误未将所有 NA 列转换为 null[pyarrow] (GH 55346)

  • :meth:DataFrame.loc 中的错误在通过全列设置器(例如 df.loc[:, 'a'] = incompatible_value)分配具有不同 dtype 的 Series 时没有抛出“不兼容 dtype 警告”(参见 PDEP6)(GH 39584

字符串#

Interval#

索引#

缺失#

MultiIndex#

I/O#

  • Bug in read_csv() where engine="python" did not respect chunksize arg when skiprows was specified (GH 56323) 的中文翻译为:

  • Bug in read_csv() where engine="python" was causing a TypeError when a callable skiprows and a chunk size was specified (GH 55677) 的中文翻译结果为:

  • read_csv() 中的错误,其中 on_bad_lines="warn" 会写入 stderr 而不是引发 Python 警告;现在这会产生一个 errors.ParserWarning (GH 54296)

  • engine="pyarrow"read_csv() 中的 quotechar 被忽略的错误 (GH 52266)

  • Bug in read_csv() with engine="pyarrow" where usecols wasn’t working with a CSV with no headers (GH 54459)

  • Bug in read_excel(), with engine="xlrd" (xls files) erroring when the file contains NaN or Inf (GH 54564) 的中文翻译结果为:

  • read_json() 中的错误,如果设置了 infer_string ,则无法正确处理 dtype 转换 (GH 56195)

  • DataFrame.to_excel() 中的错误,使用 OdsWriter (ods 文件) 写入布尔/字符串值 (GH 54994)

  • DataFrame.to_hdf()read_hdf() 中存在一个错误,当使用 datetime64 数据类型且分辨率不是纳秒时,无法正确往返 (GH 55622)

  • DataFrame.to_stata() 中对扩展数据类型引发错误的缺陷 (GH 54671)

  • Bug in read_excel() with engine="odf" (ods files) when a string cell contains an annotation (GH 55200)

  • read_excel() 中使用没有缓存格式化单元格的 ODS 文件处理浮点值的错误 (GH 55219)

  • DataFrame.to_json() 中,对于不支持的 NumPy 类型会引发 OverflowError 而不是 TypeError 的错误 (GH 55403)

周期#

  • 当传递 dataordinal**fields 中的多个时,PeriodIndex 构造中的错误未能引发 ValueError (GH 55961)

  • Period 加法中,错误地静默环绕而不是引发 OverflowError (GH 55503)

  • 在从 PeriodDtype 使用 astype 转换为 datetime64DatetimeTZDtype 时,如果单位不是纳秒,错误地返回纳秒单位 (GH 55958)

绘图#

分组/重采样/滚动#

Reshaping#

Sparse#

  • 在使用不同于数组填充值的填充值时,arrays.SparseArray.take() 中的错误 (GH 55181)

其他#

贡献者#

总共有162人为此版本贡献了补丁。名字旁边有“+”的人首次贡献了补丁。

  • AG

  • Aaron Rahman +

  • Abdullah Ihsan Secer +

  • Abhijit Deo +

  • Adrian D’Alessandro

  • Ahmad Mustafa Anis +

  • Amanda Bizzinotto

  • Amith KK +

  • Aniket Patil +

  • Antonio Fonseca +

  • Artur Barseghyan

  • Ben Greiner

  • Bill Blum +

  • Boyd Kane

  • Damian Kula

  • Dan King +

  • Daniel Weindl +

  • Daniele Nicolodi

  • David Poznik

  • David Toneian +

  • Dea María Léon

  • Deepak George +

  • Dmitriy +

  • Dominique Garmier +

  • Donald Thevalingam +

  • Doug Davis +

  • Dukastlik +

  • Elahe Sharifi +

  • Eric Han +

  • Fangchen Li

  • Francisco Alfaro +

  • Gadea Autric +

  • Guillaume Lemaitre

  • Hadi Abdi Khojasteh

  • Hedeer El Showk +

  • Huanghz2001 +

  • Isaac Virshup

  • Issam +

  • Itay Azolay +

  • Itayazolay +

  • Jaca +

  • Jack McIvor +

  • JackCollins91 +

  • James Spencer +

  • Jay

  • Jessica Greene

  • Jirka Borovec +

  • JohannaTrost +

  • John C +

  • Joris Van den Bossche

  • José Lucas Mayer +

  • José Lucas Silva Mayer +

  • João Andrade +

  • Kai Mühlbauer

  • Katharina Tielking, MD +

  • Kazuto Haruguchi +

  • Kevin

  • Lawrence Mitchell

  • Linus +

  • Linus Sommer +

  • Louis-Émile Robitaille +

  • Luke Manley

  • Lumberbot (aka Jack)

  • Maggie Liu +

  • MainHanzo +

  • Marc Garcia

  • Marco Edward Gorelli

  • MarcoGorelli

  • Martin Šícho +

  • Mateusz Sokół

  • Matheus Felipe +

  • Matthew Roeschke

  • Matthias Bussonnier

  • Maxwell Bileschi +

  • Michael Tiemann

  • Michał Górny

  • Molly Bowers +

  • Moritz Schubert +

  • NNLNR +

  • Natalia Mokeeva

  • Nils Müller-Wendt +

  • Omar Elbaz

  • Pandas Development Team

  • Paras Gupta +

  • Parthi

  • Patrick Hoefler

  • Paul Pellissier +

  • Paul Uhlenbruck +

  • Philip Meier

  • Philippe THOMY +

  • Quang Nguyễn

  • Raghav

  • Rajat Subhra Mukherjee

  • Ralf Gommers

  • Randolf Scholz +

  • Richard Shadrach

  • Rob +

  • Rohan Jain +

  • Ryan Gibson +

  • Sai-Suraj-27 +

  • Samuel Oranyeli +

  • Sara Bonati +

  • Sebastian Berg

  • Sergey Zakharov +

  • Shyamala Venkatakrishnan +

  • StEmGeo +

  • Stefanie Molin

  • Stijn de Gooijer +

  • Thiago Gariani +

  • Thomas A Caswell

  • Thomas Baumann +

  • Thomas Guillet +

  • Thomas Lazarus +

  • Thomas Li

  • Tim Hoffmann

  • Tim Swast

  • Tom Augspurger

  • Toro +

  • Torsten Wörtwein

  • Ville Aikas +

  • Vinita Parasrampuria +

  • Vyas Ramasubramani +

  • William Andrea

  • William Ayd

  • Willian Wang +

  • Xiao Yuan

  • Yao Xiao

  • Yves Delley

  • Zemux1613 +

  • Ziad Kermadi +

  • aaron-robeson-8451 +

  • aram-cinnamon +

  • caneff +

  • ccccjone +

  • chris-caballero +

  • cobalt

  • color455nm +

  • denisrei +

  • dependabot[bot]

  • jbrockmendel

  • jfadia +

  • johanna.trost +

  • kgmuzungu +

  • mecopur +

  • mhb143 +

  • morotti +

  • mvirts +

  • omar-elbaz

  • paulreece

  • pre-commit-ci[bot]

  • raj-thapa

  • rebecca-palmer

  • rmhowe425

  • rohanjain101

  • shiersansi +

  • smij720

  • srkds +

  • taytzehao

  • torext

  • vboxuser +

  • xzmeng +

  • yashb +