1.5.0 中的新增功能(2022 年 9 月 19 日)#

这些是 pandas 1.5.0 中的变化。请参阅发行说明以获取完整的变更日志,包括其他版本的 pandas。

增强功能#

pandas-stubs#

pandas-stubs库现在由 pandas 开发团队支持,为 pandas API 提供类型存根。请访问 pandas-dev/pandas-stubs了解更多信息。

我们感谢 VirtusLab 和 Microsoft 对pandas-stubs

本机 PyArrow 支持的 ExtensionArray #

安装Pyarrow后,用户现在可以创建由 apyarrow.ChunkedArray和支持的 pandas 对象pyarrow.DataType

参数可以接受 带括号的pyarrow 数据类型dtype的字符串,例如,对于采用参数的 pyarrow 数据类型, 用 初始化。pyarrow"int64[pyarrow]"ArrowDtypepyarrow.DataType

In [1]: import pyarrow as pa

In [2]: ser_float = pd.Series([1.0, 2.0, None], dtype="float32[pyarrow]")

In [3]: ser_float
Out[3]: 
0     1.0
1     2.0
2    <NA>
dtype: float[pyarrow]

In [4]: list_of_int_type = pd.ArrowDtype(pa.list_(pa.int64()))

In [5]: ser_list = pd.Series([[1, 2], [3, None]], dtype=list_of_int_type)

In [6]: ser_list
Out[6]: 
0      [1. 2.]
1    [ 3. nan]
dtype: list<item: int64>[pyarrow]

In [7]: ser_list.take([1, 0])
Out[7]: 
1    [ 3. nan]
0      [1. 2.]
dtype: list<item: int64>[pyarrow]

In [8]: ser_float * 5
Out[8]: 
0     5.0
1    10.0
2    <NA>
dtype: float[pyarrow]

In [9]: ser_float.mean()
Out[9]: 1.5

In [10]: ser_float.dropna()
Out[10]: 
0    1.0
1    2.0
dtype: float[pyarrow]

大多数操作均受支持并已使用pyarrow 计算函数实现。我们建议安装最新版本的 PyArrow 以访问最近实现的计算功能。

警告

此功能是实验性的,API 可能会在未来版本中更改,恕不另行通知。

DataFrame 交换协议实现#

Pandas 现在实现了 DataFrame 交换 API 规范。有关 API 的完整详细信息,请访问https://data-apis.org/dataframe-protocol/latest/index.html

该协议由两部分组成:

  • DataFrame.__dataframe__()生成交换对象的新方法。它有效地将 pandas 数据帧作为交换对象“导出”,因此任何其他实现了该协议的库都可以“导入”该数据帧,而无需了解生产者的任何信息,除了它生成交换对象之外。

  • 新函数pandas.api.interchange.from_dataframe()可以从任何符合库中获取任意交换对象并从中构造一个 pandas DataFrame。

造型器#

最值得注意的发展是新方法Styler.concat(),它允许添加自定义页脚行以可视化数据的附加计算,例如总计和计数等。(GH 43875GH 46186

此外,还有一种替代输出方法,它允许使用 Styler 的格式化方法来创建 CSV ( GH 44502Styler.to_string() )等。

还提供了一项新功能,Styler.relabel_index()可以完全自定义索引或列标题的显示(GH 47864

小功能改进包括:

  • 在 Excel 中添加渲染border和CSS 属性的功能( GH 42276 )border-{side}

  • 使关键字参数包含:Styler.highlight_null()现在接受color和弃用null_color,尽管这仍然向后兼容(GH 45907

group_keys用in #控制索引DataFrame.resample()

该参数group_keys已添加到该方法中DataFrame.resample()。与 一样,此参数控制使用DataFrame.groupby()时是否将每个组添加到重采样中的索引中。Resampler.apply()

警告

不指定group_keys参数将保留先前的行为,并在结果因指定而改变时发出警告group_keys=False。在 pandas 的未来版本中,不指定group_keys将默认与group_keys=False.

In [11]: df = pd.DataFrame(
   ....:     {'a': range(6)},
   ....:     index=pd.date_range("2021-01-01", periods=6, freq="8H")
   ....: )
   ....:

In [12]: df.resample("D", group_keys=True).apply(lambda x: x)
Out[12]:
                                a
2021-01-01 2021-01-01 00:00:00  0
           2021-01-01 08:00:00  1
           2021-01-01 16:00:00  2
2021-01-02 2021-01-02 00:00:00  3
           2021-01-02 08:00:00  4
           2021-01-02 16:00:00  5

In [13]: df.resample("D", group_keys=False).apply(lambda x: x)
Out[13]:
                     a
2021-01-01 00:00:00  0
2021-01-01 08:00:00  1
2021-01-01 16:00:00  2
2021-01-02 00:00:00  3
2021-01-02 08:00:00  4
2021-01-02 16:00:00  5

以前,生成的索引将取决于 返回的值apply,如以下示例所示。

In [1]: # pandas 1.3
In [2]: df.resample("D").apply(lambda x: x)
Out[2]:
                     a
2021-01-01 00:00:00  0
2021-01-01 08:00:00  1
2021-01-01 16:00:00  2
2021-01-02 00:00:00  3
2021-01-02 08:00:00  4
2021-01-02 16:00:00  5

In [3]: df.resample("D").apply(lambda x: x.reset_index())
Out[3]:
                           index  a
2021-01-01 0 2021-01-01 00:00:00  0
           1 2021-01-01 08:00:00  1
           2 2021-01-01 16:00:00  2
2021-01-02 0 2021-01-02 00:00:00  3
           1 2021-01-02 08:00:00  4
           2 2021-01-02 16:00:00  5

来自傻瓜#

添加了新函数from_dummies(),将虚拟编码转换DataFrame为分类DataFrame

In [11]: import pandas as pd

In [12]: df = pd.DataFrame({"col1_a": [1, 0, 1], "col1_b": [0, 1, 0],
   ....:                    "col2_a": [0, 1, 0], "col2_b": [1, 0, 0],
   ....:                    "col2_c": [0, 0, 1]})
   ....: 

In [13]: pd.from_dummies(df, sep="_")
Out[13]: 
  col1 col2
0    a    b
1    b    a
2    a    c

写入 ORC 文件#

新方法DataFrame.to_orc()允许写入 ORC 文件 ( GH 43864 )。

此功能取决于pyarrow库。有关更多详细信息,请参阅ORC 上的 IO 文档

警告

  • 由于 pyarrow 出现一些问题,强烈建议使用conda 安装 pyarrow。

  • to_orc()需要 pyarrow>=7.0.0。

  • to_orc()Windows 尚不支持,您可以在安装可选依赖项上找到有效的环境。

  • 有关支持的数据类型,请参阅Arrow 中支持的 ORC 功能

  • 目前,当数据帧转换为 ORC 文件时,日期时间列中的时区不会保留。

df = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
df.to_orc("./out.orc")

直接从 TAR 档案中读取#

read_csv()像或现在这样的 I/O 方法DataFrame.to_json()允许直接读取和写入 TAR 存档 ( GH 44787 )。

df = pd.read_csv("./movement.tar.gz")
# ...
df.to_csv("./out.tar.gz")

这支持.tar.tar.gz.tar.bz存档.tar.xz2。所使用的压缩方法是从文件名推断出来的。如果无法推断压缩方法,请使用参数compression

df = pd.read_csv(some_file_obj, compression={"method": "tar", "mode": "r:gz"}) # noqa F821

mode作为其中一种tarfile.open模式:https://docs.python.org/3/library/tarfile.html#tarfile.open

read_xml 现在支持dtypeconvertersparse_dates#

与其他 IO 方法类似,pandas.read_xml()现在支持将特定的 dtypes 分配给列、应用转换器方法和解析日期 ( GH 43567 )。

In [14]: from io import StringIO

In [15]: xml_dates = """<?xml version='1.0' encoding='utf-8'?>
   ....: <data>
   ....:   <row>
   ....:     <shape>square</shape>
   ....:     <degrees>00360</degrees>
   ....:     <sides>4.0</sides>
   ....:     <date>2020-01-01</date>
   ....:    </row>
   ....:   <row>
   ....:     <shape>circle</shape>
   ....:     <degrees>00360</degrees>
   ....:     <sides/>
   ....:     <date>2021-01-01</date>
   ....:   </row>
   ....:   <row>
   ....:     <shape>triangle</shape>
   ....:     <degrees>00180</degrees>
   ....:     <sides>3.0</sides>
   ....:     <date>2022-01-01</date>
   ....:   </row>
   ....: </data>"""
   ....: 

In [16]: df = pd.read_xml(
   ....:     StringIO(xml_dates),
   ....:     dtype={'sides': 'Int64'},
   ....:     converters={'degrees': str},
   ....:     parse_dates=['date']
   ....: )
   ....: 

In [17]: df
Out[17]: 
      shape degrees  sides       date
0    square   00360      4 2020-01-01
1    circle   00360   <NA> 2021-01-01
2  triangle   00180      3 2022-01-01

In [18]: df.dtypes
Out[18]: 
shape              object
degrees            object
sides               Int64
date       datetime64[ns]
dtype: object

read_xml 现在支持大型 XML 使用iterparse#

对于数百兆字节到千兆字节的非常大的 XML 文件,pandas.read_xml() 现在支持使用lxml 的 iterparseetree 的 iterparse解析如此大的文件 ,这些方法是内存高效的方法,可以迭代 XML 树并提取特定元素和属性,而无需将整个树保留在内存中(GH 45442)。

In [1]: df = pd.read_xml(
...      "/path/to/downloaded/enwikisource-latest-pages-articles.xml",
...      iterparse = {"page": ["title", "ns", "id"]})
...  )
df
Out[2]:
                                                     title   ns        id
0                                       Gettysburg Address    0     21450
1                                                Main Page    0     42950
2                            Declaration by United Nations    0      8435
3             Constitution of the United States of America    0      8435
4                     Declaration of Independence (Israel)    0     17858
...                                                    ...  ...       ...
3578760               Page:Black cat 1897 07 v2 n10.pdf/17  104    219649
3578761               Page:Black cat 1897 07 v2 n10.pdf/43  104    219649
3578762               Page:Black cat 1897 07 v2 n10.pdf/44  104    219649
3578763      The History of Tom Jones, a Foundling/Book IX    0  12084291
3578764  Page:Shakespeare of Stratford (1926) Yale.djvu/91  104     21450

[3578765 rows x 3 columns]

写入时复制#

copy_on_write添加了一个新功能( GH 46958)。写入时复制可确保以任何方式从另一个 DataFrame 或 Series 派生的任何 DataFrame 或 Series 始终表现为副本。写入时复制不允许更新除应用该方法的对象之外的任何其他对象。

可以通过以下方式启用写入时复制:

pd.set_option("mode.copy_on_write", True)
pd.options.mode.copy_on_write = True

或者,可以通过以下方式在本地启用写入时复制:

with pd.option_context("mode.copy_on_write", True):
    ...

如果没有写入时复制,则在更新从此 派生的DataFrame子级时会更新 父级。DataFrameDataFrame

In [19]: df = pd.DataFrame({"foo": [1, 2, 3], "bar": 1})

In [20]: view = df["foo"]

In [21]: view.iloc[0]
Out[21]: 1

In [22]: df
Out[22]: 
   foo  bar
0    1    1
1    2    1
2    3    1

启用写入时复制后,df 将不再更新:

In [23]: with pd.option_context("mode.copy_on_write", True):
   ....:     df = pd.DataFrame({"foo": [1, 2, 3], "bar": 1})
   ....:     view = df["foo"]
   ....:     view.iloc[0]
   ....:     df
   ....: 

更详细的解释可以在这里找到。

其他增强功能#

值得注意的错误修复#

这些错误修复可能会带来显着的行为变化。

dropna=Truegroupby变换一起使用#

变换是一种运算,其结果与其输入的大小相同。当结果为 aDataFrame或 时Series,还要求结果的索引与输入的索引匹配。在 pandas 1.4 中, 在组中使用DataFrameGroupBy.transform()或使用 null 值会给出错误的结果。下面的示例表明,不正确的结果要么包含不正确的值,要么结果与输入的索引不同。SeriesGroupBy.transform()dropna=True

In [24]: df = pd.DataFrame({'a': [1, 1, np.nan], 'b': [2, 3, 4]})

旧行为

In [3]: # Value in the last row should be np.nan
        df.groupby('a', dropna=True).transform('sum')
Out[3]:
   b
0  5
1  5
2  5

In [3]: # Should have one additional row with the value np.nan
        df.groupby('a', dropna=True).transform(lambda x: x.sum())
Out[3]:
   b
0  5
1  5

In [3]: # The value in the last row is np.nan interpreted as an integer
        df.groupby('a', dropna=True).transform('ffill')
Out[3]:
                     b
0                    2
1                    3
2 -9223372036854775808

In [3]: # Should have one additional row with the value np.nan
        df.groupby('a', dropna=True).transform(lambda x: x)
Out[3]:
   b
0  2
1  3

新行为

In [25]: df.groupby('a', dropna=True).transform('sum')
Out[25]: 
     b
0  5.0
1  5.0
2  NaN

In [26]: df.groupby('a', dropna=True).transform(lambda x: x.sum())
Out[26]: 
     b
0  5.0
1  5.0
2  NaN

In [27]: df.groupby('a', dropna=True).transform('ffill')
Out[27]: 
     b
0  2.0
1  3.0
2  NaN

In [28]: df.groupby('a', dropna=True).transform(lambda x: x)
Out[28]: 
     b
0  2.0
1  3.0
2  NaN

使用 to_json() 和iso_dates=True#序列化 tz-naive 时间戳

DataFrame.to_json()Series.to_json()、 和Index.to_json() 会错误地将带有 tz-naive 时间戳的 DatetimeArrays/DatetimeIndexes 本地化为 UTC。 (GH 38760

请注意,此补丁不会在序列化时将 tz 感知时间戳本地化为 UTC。 (相关问题GH 12997

旧行为

In [32]: index = pd.date_range(
   ....:     start='2020-12-28 00:00:00',
   ....:     end='2020-12-28 02:00:00',
   ....:     freq='1H',
   ....: )
   ....:

In [33]: a = pd.Series(
   ....:     data=range(3),
   ....:     index=index,
   ....: )
   ....:

In [4]: from io import StringIO

In [5]: a.to_json(date_format='iso')
Out[5]: '{"2020-12-28T00:00:00.000Z":0,"2020-12-28T01:00:00.000Z":1,"2020-12-28T02:00:00.000Z":2}'

In [6]: pd.read_json(StringIO(a.to_json(date_format='iso')), typ="series").index == a.index
Out[6]: array([False, False, False])

新行为

In [34]: from io import StringIO

In [35]: a.to_json(date_format='iso')
Out[35]: '{"2020-12-28T00:00:00.000Z":0,"2020-12-28T01:00:00.000Z":1,"2020-12-28T02:00:00.000Z":2}'

# Roundtripping now works
In [36]: pd.read_json(StringIO(a.to_json(date_format='iso')), typ="series").index == a.index
Out[36]: array([ True,  True,  True])

DataFrameGroupBy.value_counts 具有非分组分类列和observed=True#

调用DataFrameGroupBy.value_counts()withobserved=True会错误地删除非分组列的未观察到的类别 ( GH 46357 )。

In [6]: df = pd.DataFrame(["a", "b", "c"], dtype="category").iloc[0:2]
In [7]: df
Out[7]:
   0
0  a
1  b

旧行为

In [8]: df.groupby(level=0, observed=True).value_counts()
Out[8]:
0  a    1
1  b    1
dtype: int64

新行为

In [9]: df.groupby(level=0, observed=True).value_counts()
Out[9]:
0  a    1
1  a    0
   b    1
0  b    0
   c    0
1  c    0
dtype: int64

向后不兼容的 API 更改#

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

更新了一些依赖项的最低支持版本。如果安装了,我们现在需要:

包裹

最低版本

必需的

改变了

麻木

1.20.3

X

X

mypy(开发)

0.971

X

美丽汤4

4.9.3

X

布卢斯克

1.21.0

X

瓶颈

1.3.2

X

FS规范

2021.07.0

X

假设

6.13.0

X

GCSFS

2021.07.0

X

金贾2

3.0.0

X

lxml

4.6.3

X

努巴

0.53.1

X

数值表达式

2.7.3

X

开放式pyxl

3.0.7

X

pandas-GBQ

0.15.0

X

心理咨询师2

2.8.6

X

pymysql

1.0.2

X

pyreadstat

1.1.2

X

pyxlsb

1.0.8

X

s3fs

2021.08.0

X

scipy

1.7.1

X

sqlalchemy

1.4.16

X

制表

0.8.9

X

阵列

0.19.0

X

XLSX作家

1.4.3

X

对于可选库,一般建议使用最新版本。下表列出了当前在 pandas 开发过程中测试的每个库的最低版本。低于最低测试版本的可选库可能仍然有效,但不被视为受支持。

包裹

最低版本

改变了

美丽汤4

4.9.3

X

布卢斯克

1.21.0

X

瓶颈

1.3.2

X

布罗特利皮

0.7.0

快速镶木地板

0.4.0

FS规范

2021.08.0

X

html5库

1.1

假设

6.13.0

X

GCSFS

2021.08.0

X

金贾2

3.0.0

X

lxml

4.6.3

X

绘图库

3.3.2

努巴

0.53.1

X

数值表达式

2.7.3

X

奥德菲

1.4.1

开放式pyxl

3.0.7

X

pandas-GBQ

0.15.0

X

心理咨询师2

2.8.6

X

皮箭头

1.0.1

pymysql

1.0.2

X

pyreadstat

1.1.2

X

pytables

3.6.1

python-snappy

0.6.0

pyxlsb

1.0.8

X

s3fs

2021.08.0

X

scipy

1.7.1

X

sqlalchemy

1.4.16

X

制表

0.8.9

X

兹数据

2022a

阵列

0.19.0

X

xlrd

2.0.1

XLSX作家

1.4.3

X

xlwt

1.3.0

标准

0.15.2

有关更多信息,请参阅依赖项可选依赖项

其他 API 更改#

弃用#

警告

在下一个主要版本 2.0 中,正在考虑几个较大的 API 更改,但不会正式弃用,例如将标准库zoneinfo而不是 设为默认时区实现pytz,支持Index所有数据类型而不是多个子类(CategoricalIndexInt64Index等)。 ), 和更多。正在考虑的更改已记录在此 GitHub 问题中,欢迎提供任何反馈或疑虑。

使用 Int64Index 或 RangeIndex 对 Series 进行基于标签的整数切片#

在未来的版本中,使用 a或Seriesa进行整数切片将被视为基于标签,而不是位置。这将使该行为与其他行为一致(GH 45162)。Int64IndexRangeIndexSeries.__getitem__()Series.__setitem__()

例如:

In [29]: ser = pd.Series([1, 2, 3, 4, 5], index=[2, 3, 5, 7, 11])

在旧行为中,ser[2:4]将切片视为位置切片:

旧行为

In [3]: ser[2:4]
Out[3]:
5    3
7    4
dtype: int64

在未来的版本中,这将被视为基于标签:

未来的行为

In [4]: ser.loc[2:4]
Out[4]:
2    1
3    2
dtype: int64

要保留旧行为,请使用series.iloc[i:j].要获得未来的行为,请使用series.loc[i:j].

对 a 进行切片DataFrame不会受到影响。

ExcelWriter属性

的所有属性ExcelWriter之前都记录为非公开的。然而,一些第三方 Excel 引擎记录了对 ExcelWriter.book或 的访问ExcelWriter.sheets,并且用户正在利用这些属性以及可能的其他属性。以前这些属性使用起来并不安全;例如,对的修改ExcelWriter.book不会更新ExcelWriter.sheets ,反之亦然。为了支持这一点,pandas 公开了一些属性并改进了它们的实现,以便现在可以安全地使用它们。 (GH 45572

以下属性现在是公共的并且被认为可以安全访问。

  • book

  • check_extension

  • close

  • date_format

  • datetime_format

  • engine

  • if_sheet_exists

  • sheets

  • supported_extensions

以下属性已被弃用。它们现在会FutureWarning 在访问时引发一个问题,并将在未来的版本中删除。用户应该意识到他们的使用被认为是不安全的,并且可能会导致意外的结果。

  • cur_sheet

  • handles

  • path

  • save

  • write_cells

ExcelWriter有关更多详细信息,请参阅 的文档。

与和#group_keys中的变压器一起使用DataFrameGroupBy.apply()SeriesGroupBy.apply()

在 pandas 的早期版本中,如果推断传递给 DataFrameGroupBy.apply()or 的函数SeriesGroupBy.apply()是一个转换器(即结果索引等于输入索引),则and group_keys的参数将被忽略,并且组键永远不会被添加到结果。将来,当用户指定时,组键将被添加到索引中。DataFrame.groupby()Series.groupby()group_keys=True

由于和 group_keys=True的默认值,不指定变压器将引发.通过指定 可以将其静音并保留先前的行为。DataFrame.groupby()Series.groupby()group_keysFutureWarninggroup_keys=False

loc用和#设置值时的就地操作iloc

大多数情况下,设置值时会DataFrame.iloc()尝试就地设置值,只有在必要时才会回退到插入新数组。在某些情况下,不遵循此规则,例如,当从具有不同 dtype 的数组中设置整列时:

In [30]: df = pd.DataFrame({'price': [11.1, 12.2]}, index=['book1', 'book2'])

In [31]: original_prices = df['price']

In [32]: new_prices = np.array([98, 99])

旧行为

In [3]: df.iloc[:, 0] = new_prices
In [4]: df.iloc[:, 0]
Out[4]:
book1    98
book2    99
Name: price, dtype: int64
In [5]: original_prices
Out[5]:
book1    11.1
book2    12.2
Name: price, float: 64

此行为已被弃用。在未来的版本中,使用 iloc 设置整个列将尝试就地操作。

未来的行为

In [3]: df.iloc[:, 0] = new_prices
In [4]: df.iloc[:, 0]
Out[4]:
book1    98.0
book2    99.0
Name: price, dtype: float64
In [5]: original_prices
Out[5]:
book1    98.0
book2    99.0
Name: price, dtype: float64

要获得旧行为,请DataFrame.__setitem__()直接使用:

In [3]: df[df.columns[0]] = new_prices
In [4]: df.iloc[:, 0]
Out[4]
book1    98
book2    99
Name: price, dtype: int64
In [5]: original_prices
Out[5]:
book1    11.1
book2    12.2
Name: price, dtype: float64

df.columns要在 不唯一并且想要通过索引更改单个列时获得旧行为,可以使用DataFrame.isetitem(),它已在 pandas 1.5 中添加:

In [3]: df_with_duplicated_cols = pd.concat([df, df], axis='columns')
In [3]: df_with_duplicated_cols.isetitem(0, new_prices)
In [4]: df_with_duplicated_cols.iloc[:, 0]
Out[4]:
book1    98
book2    99
Name: price, dtype: int64
In [5]: original_prices
Out[5]:
book1    11.1
book2    12.2
Name: 0, dtype: float64

numeric_only默认值

DataFrameDataFrameGroupBy、和Resampler等操作 中,参数的默认值min(如果存在)是不一致的。此外,使用默认值进行操作可能会导致令人惊讶的结果。 (GH 46560sumidxmaxnumeric_onlyNone

In [1]: df = pd.DataFrame({"a": [1, 2], "b": ["x", "y"]})

In [2]: # Reading the next line without knowing the contents of df, one would
        # expect the result to contain the products for both columns a and b.
        df[["a", "b"]].prod()
Out[2]:
a    2
dtype: int64

为了避免这种行为,指定值numeric_only=None已被弃用,并将在 pandas 的未来版本中删除。将来,所有带参数的操作numeric_only都将默认为False.用户应该仅对可操作的列调用该操作,或者指定numeric_only=True仅对布尔型、整数和浮点型列进行操作。

为了支持向新行为的过渡,以下方法获得了争论numeric_only

其他弃用#

性能改进#

Bug修复

分类#

  • 不接受整数数据类型的错误Categorical.view()GH 25464

  • CategoricalIndex.union()当索引的类别为整数 dtype 并且索引包含NaN错误地提升而不是转换为的值时出现错误float64GH 45362

  • concat()连接两个(或更多)无序CategoricalIndex变量(其类别是排列)时出现错误,会产生不正确的索引值( GH 24845

类似日期时间#

  • DataFrame.quantile()类似日期时间的数据类型存在错误,并且没有行错误地返回float64数据类型,而不是保留类似日期时间的数据类型(GH 41544

  • to_datetime()对象序列错误地引发错误np.str_GH 32264

  • Timestamp将日期时间组件作为位置参数和tzinfo关键字参数传递时错误地引发构造错误( GH 31929

  • Index.astype()从对象 dtype 转换为timedelta64[ns]dtype 时错误地将值转换为np.datetime64("NaT")np.timedelta64("NaT")不是提升 ( GH 45722 )

  • SeriesGroupBy.value_counts()传递分类列时索引中的错误( GH 44324

  • 本地化到 UTC时出现错误DatetimeIndex.tz_localize(),无法复制基础数据 ( GH 46460 )

  • DatetimeIndex.resolution()对于纳秒分辨率索引,错误地返回“天”而不是“纳秒”(GH 46903

  • 错误地Timestamp使用整数或浮点值和unit="Y"/或unit="M"给出稍微错误的结果(GH 47266

  • DatetimeArray当传递另一个数组DatetimeArrayfreq=None错误地从给定数组推断频率时,构造中存在错误( GH 47296

  • 即使行数超过 50 行,to_datetime()也会OutOfBoundsDatetime抛出错误( GH 45319errors=coerce

  • DateOffset将 a 添加到 a时的错误Series不会添加该nanoseconds字段(GH 47856

时间增量#

  • astype_nansafe()当包含 np.nan 时,astype(“timedelta64[ns]”)中的错误会失败 ( GH 45798 )

  • Timedelta使用对象构造 a 时出现错误np.timedelta64unit有时会默默溢出并返回错误结果而不是引发OutOfBoundsTimedeltaGH 46827

  • Timedelta从大整数或浮点数构造 a 时出现错误,unit="W"并无提示地溢出并返回错误结果而不是引发OutOfBoundsTimedeltaGH 47268

时区

数字#

  • 类似数组的操作中的错误dtype="boolean"以及NA错误地就地更改数组(GH 45421

  • 可空类型的算术运算中的错误,NA其值与不可空类型的相同运算不匹配(GH 48223

  • 当除以floordiv返回而IntegerDtype 0不是返回时出现错误(GH 482230inf

  • 除法中的错误,pow以及mod类似数组的操作与dtype="boolean"它们的对应项不同np.bool_GH 46063

  • Series将 a与dtype类似的数组相乘时的IntegerDtype错误会错误地引发(GH 45622FloatingDtypetimedelta64[ns]

  • mean()可选依赖项bottleneck导致数组长度线性精度损失的错误。bottleneck已被禁用以mean()改善对数线性损失,但可能会导致性能下降。 (GH 42878

转换

字符串#

间隔

  • 设置为整数支持的数组IntervalArray.__setitem__()时出现错误,而不是(GH 45484np.nanValueErrorTypeError

  • IntervalDtype使用 datetime64[ns, tz] 作为 dtype 字符串时出现的错误( GH 46999 )

索引#

  • DataFrame.iloc()使用单个 ExtensionDtype列对单个行进行索引时给出的错误DataFrame是提供副本而不是基础数据的视图 ( GH 45241 )

  • 即使选择了唯一列,DataFrame.__getitem__()当具有重复列时返回副本时也会出现错误( GH 45316GH 41062DataFrame

  • 当两个 MultiIndexes 交集相同时,Series.align()不会创建级别的并集错误( GH 45224 )MultiIndex

  • 将 NA 值(Nonenp.nan)设置为Series基于 int 的IntervalDtype错误转换为对象数据类型而不是基于 float 的错误IntervalDtypeGH 45568

  • 将设置值索引到具有相同数据类型的ExtensionDtype列时出现错误,因为错误地插入新数组而不是就地设置(GH 33457df.iloc[:, i] = valuesvaluesdf.iloc[:, i]

  • 当使用整数键设置一个无法在引发 a 的位置设置的值而不是转换为通用数据类型时,出现Series.__setitem__()非整数错误( GH 45070IndexValueError

  • 将值设置为列表时DataFrame.loc()未强制转换None的错误(GH 47987NADataFrame

  • Series.__setitem__()在使用布尔掩码进行索引时将不兼容的值设置为PeriodDtype或引发时出现错误IntervalDtype Series,但在使用其他等效索引器进行索引时进行强制转换;这些现在始终如一地强制,以及Series.mask()Series.where()GH 45768

  • 具有类似日期时间的数据类型的多个列中的错误DataFrame.where()无法向下转换与其他数据类型一致的结果(GH 45837

  • isin()向上转换float64为无符号整数 dtype 和没有 dtype 的类似列表的参数时出现错误( GH 46485 )

  • 在不使用(GH 13831)的情况下使用多个键时出现错误Series.loc.__setitem__()并且不会引发错误Series.loc.__getitem__()MultiIndex

  • 指定何时Index.reindex()提出但未给出的错误;现在忽略级别(GH 35132AssertionErrorlevelMultiIndex

  • 当为 dtype 设置太大的值时Series无法强制转换为常见类型时出现错误(GH 26049GH 32878

  • loc.__setitem__()range键视为位置而不是基于标签的错误( GH 45479

  • DataFrame.__setitem__()使用标量键和DataFrame值进行设置时,将扩展数组 dtypes 转换为对象时出现错误( GH 46896

  • 将标量设置为可为空的 pandas dtype 时出现的错误,如果标量无法(无损)转换为可为空的类型,Series.__setitem__()则不会引发 a ( GH 45404 )TypeError

  • Series.__setitem__()设置包含错误提升而不是转换为dtype 的booleandtype 值时出现的错误( GH 45462 )NAboolean

  • 使用包含何时不匹配的Series.loc()布尔索引器引发的错误( GH 46551NAIndex

  • Series.__setitem__()设置NA为 numeric-dtype时Series会错误地向上转换为 object-dtype 而不是将值视为np.nan( GH 44199 )

  • DataFrame.loc()将值设置为列且右侧​​是字典时出现错误( GH 47216

  • dtype 、全布尔Series.__setitem__()掩码和不兼容的值错误地转换为而不是保留dtype ( GH 45967 )datetime64[ns]Falseobjectdatetime64[ns]

  • 当索引器来自布尔数据类型(GH 45806)时Index.__getitem__()引发错误ValueErrorNA

  • Series.__setitem__()使用标量放大时丢失精度的错误SeriesGH 32346

  • Series.mask()使用inplace=True布尔掩码或设置值时出现错误,小整数数据类型错误地引发( GH 45750

  • 错误DataFrame.mask()和列错误inplace=TrueExtensionDtype提升(GH 45577

  • 从具有类似日期时间值的对象 dtype 行索引的 DataFrame 获取列时出现错误:结果系列现在保留来自父 DataFrame 的确切对象 dtype 索引(GH 42950

  • 如果列具有dtype,则DataFrame.__getattribute__()引发错误(GH 46185AttributeError"string"

  • 比较扩展数组 dtype 和 numpy dtype 时DataFrame.compare()返回所有列的错误( GH 44014NaN

  • DataFrame.where()使用 numpy dtype 的掩码设置错误值时出现错误"boolean"GH 44014

  • 错误地在密钥上建立索引时出现错误DatetimeIndexnp.str_GH 45580

  • CategoricalIndex.get_indexer()当索引包含值时出现错误NaN,导致目标中但不存在于索引中的元素映射到 NaN 元素的索引,而不是 -1 ( GH 45361 )

  • 将大整数值设置为Serieswithfloat32float16dtype 时出现错误,错误地更改了这些值而不是强制为float64dtype ( GH 45844 )

  • 错误并将Series.asof()bool DataFrame.asof()-dtype 结果错误地转换为float64dtype ( GH 16063 )

  • 错误NDFrame.xs()DataFrame.iterrows()并且DataFrame.loc()并不DataFrame.iloc()总是传播元数据(GH 28283

  • DataFrame.sum()如果输入包含 NaN,min_count中的错误会更改 dtype( GH 46947

  • 该错误IntervalTree导致无限递归。 (GH 46658

  • 在索引上时PeriodIndex引发错误,而不是放在其位置上。 (GH 46673AttributeErrorNANaT

  • 错误DataFrame.at()将允许修改多个列(GH 48296

丢失的

多重索引#

输入/输出#

时期

绘图#

分组/重新采样/滚动#

重塑#

稀疏#

扩展数组#

  • 执行操作时出现错误IntegerArray.searchsorted()并返回不一致的结果(GH 45255FloatingArray.searchsorted()np.nan

造型器#

  • 尝试将样式函数应用于空 DataFrame 子集时出现错误 ( GH 45313 )

  • CSSToExcelConverter导致在没有为引擎TypeError提供边框样式的情况下提供边框颜色时出现错误( GH 42276xlsxwriter

  • Styler.set_sticky()在深色模式下导致白色背景上出现白色文本的错误( GH 46984 )

  • Styler.to_latex()导致UnboundLocalError何时clines="all;data"DataFrame没有行的错误。 (GH 47203

  • 与引擎一起Styler.to_excel()使用时出现错误(GH 30107vertical-align: middle;xlsxwriter

  • 将样式应用到带有布尔列标签的 DataFrame 时出现错误 ( GH 47838 )

元数据#

其他

贡献者#

共有 271 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。

  • 阿达什·阿查里亚 +

  • 阿达什-阿查里亚 +

  • 阿迪·马尼瓦南 +

  • 亚当·鲍登

  • 阿迪亚·阿加瓦尔 +

  • 艾哈迈德·易卜拉欣 +

  • 阿拉斯泰尔·波特+

  • 亚历克斯·波维尔 +

  • 亚历克斯-布莱德

  • 亚历山德拉·斯科凯蒂 +

  • 阿隆·门泽 +

  • 安德拉斯·迪克 +

  • 安德鲁·豪鲁​​克

  • 安迪·格里格 +

  • 阿内塔·卡列奥娃 +

  • 安东尼·吉文斯 +

  • 安东·舍夫佐夫 +

  • BJ 波特 +

  • 巴科特贝耶纳 +

  • 本·比斯利 +

  • 本·沃兹尼亚克 +

  • 伯恩哈德·瓦格纳 +

  • 鲍里斯·鲁缅采夫

  • 布莱恩·戈洛普 +

  • CCXXXI +

  • 钱德拉塞卡兰·阿尼鲁德·巴德瓦吉 +

  • 查尔斯·布莱克蒙-卢卡 +

  • 克里斯·莫拉迪 +

  • 克里斯·阿尔伯特森 +

  • 康普罗·普拉萨德 +

  • 达Py15

  • 达米安·巴拉邦科夫 +

  • 丹尼尔一世 +

  • 丹尼尔·艾萨克 +

  • 丹尼尔·施密特

  • 丹尼尔·亚先科 +

  • 戴尔·阿德乌米

  • 丹尼斯·楚昆塔 +

  • 丹尼斯·J·格雷 +

  • 德里克·夏普 +

  • 德鲁夫·桑达尼 +

  • 迪米特拉·卡拉迪玛 +

  • 德米特里·萨沃斯蒂亚诺夫 +

  • 德米特罗·李特维诺夫 +

  • 金道英 +

  • 德里斯·肖蒙 +

  • 黄爱德华 +

  • 埃里克+

  • 叶卡捷琳娜+

  • 伊莱·多拉多 +

  • 埃兹拉·布劳纳 +

  • 法比安·加贝尔 +

  • 因式分解D +

  • 李芳辰

  • 弗朗西斯科·罗曼迪尼 +

  • 格雷格·甘登伯格 +

  • 郭慈+

  • 小笠原宏明

  • 胡德·查塔姆 +

  • 伊恩·亚历山大·乔伊纳 +

  • 欧夫·勒斯蒂格

  • 吴伊万 +

  • JHM 达比郡

  • JHM 达比郡 (MBP)

  • JHM 达比郡 (iMac)

  • 伯利

  • 杰克·戈德史密斯 +

  • 詹姆斯·弗里曼 +

  • 詹姆斯·兰姆

  • 詹姆斯·莫罗 +

  • 贾诺什·里伯塞尔

  • 贾罗德·米尔曼

  • 贾森+

  • 杰夫·雷巴克

  • 杰里米·图卢普 +

  • 约翰内斯·米勒

  • 约翰·本西纳 +

  • 约翰·曼蒂奥斯 +

  • 约翰·赞格威尔

  • 乔恩·布拉姆利 +

  • 乔纳斯·哈格

  • 乔丹·希克斯

  • 乔里斯·范登博什

  • 何塞·奥尔蒂斯 +

  • 约瑟夫·帕拉姆帕图 +

  • 何塞·杜阿尔特

  • 朱利安·斯蒂格 +

  • 凯·牧师 +

  • 卡皮尔·E·艾耶 +

  • 卡蒂克·韦拉尤瑟姆 +

  • 卡西夫·汗

  • 井盖一树+

  • 凯文·简·安克 +

  • 凯文·谢泼德

  • 许增伟

  • 基安·埃利亚西

  • 基安S+

  • 金权贤 +

  • 金扎拉扎 +

  • 康杰蒂·马鲁蒂 +

  • 莱昂纳多·陈

  • 丛林晓 +

  • 卢伊克·埃斯特夫

  • 卢卡斯G0+

  • 露西·希门尼斯 +

  • 路易斯·平托

  • 卢克·曼利

  • 马克·加西亚

  • 马可·爱德华·戈雷利

  • 马可·戈雷利

  • 马可·戈雷利

  • 玛格丽特·迪佩尔 +

  • 玛丽亚姆克+

  • 马丁·弗莱施曼

  • 马文·约翰·沃尔特 +

  • 马文·沃尔特 +

  • 马特乌什

  • 玛蒂尔达 M +

  • 马修·罗斯克

  • 马蒂亚斯·布索尼耶

  • 米塞克斯机器

  • 梅加尔格+

  • 梅丽莎·韦伯·门多萨 +

  • 迈克尔·米尔顿 +

  • 迈克尔·王

  • 迈克·麦卡蒂 +

  • 米洛尼·阿塔尔 +

  • 米特拉索茨基·本斯 +

  • 莫里茨·施赖伯 +

  • 莫滕·坎思·赫尔斯 +

  • 尼克·克鲁斯 +

  • 尼克·菲洛 +

  • 尼古拉斯拥抱+

  • 尼玛萨朗

  • 诺亚·塔米尔 +

  • 熊猫开发团队

  • 冻糕加萨娜

  • 帕蒂+

  • 帕索+

  • 帕特里克·赫夫勒

  • 彼得

  • 彼得·霍金斯 +

  • 菲利普·A

  • 菲利普·谢弗 +

  • 小丑+

  • 普拉蒂克·帕特尔 +

  • 普里特维吉特

  • 普纳·钱德拉·曼辛 +

  • 拉多斯瓦夫·莱米克 +

  • RaphSku +

  • Reinert Huseby Karlsen +

  • 理查德·沙德拉赫

  • 理查德·沙德拉克 +

  • 罗比·帕尔默

  • 罗伯特·德弗里斯

  • 罗杰+

  • 罗杰·穆雷 +

  • 邓瑞哲+

  • 赛利+

  • 萨钦·亚达夫 +

  • 杨世荣 +

  • 萨姆·拉奥 +

  • 桑德罗·卡萨格兰德 +

  • 塞巴斯蒂安·韦尔默伦 +

  • 沙加耶 +

  • 山塔努+

  • 沙尚克谢特+

  • 钟肖恩 +

  • 何双驰 +

  • 西蒙·霍金斯

  • 西蒙·诺特 +

  • 所罗门之歌+

  • 索姆托奇·乌梅 +

  • 斯特凡·克劳奇克 +

  • 斯蒂芬妮·莫林

  • 史蒂芬·雷伯格

  • 史蒂文·班福德 +

  • 史蒂文·罗通多 +

  • 史蒂文·舍勒

  • 西尔万·玛丽 +

  • 西尔万·玛丽

  • 塔伦·拉古南丹·考希克 +

  • 泰勒·帕卡德 +

  • 特尔吉·彼得森

  • 蒂埃里·莫伊桑

  • 托马斯·格兰杰

  • 托马斯·亨特 +

  • 托马斯·李

  • 蒂姆·麦克法兰 +

  • 蒂姆·斯瓦斯特

  • 杨添+

  • 托比亚斯·皮特斯

  • 汤姆·阿尔森 +

  • 汤姆·奥格斯普格

  • 托斯顿·沃特温

  • 穿越小镇 +

  • 泰勒·雷迪

  • 瓦伦丁·约文

  • 瓦伦·夏尔马 +

  • 瓦西里·李特维诺夫

  • 文纳图鲁姆

  • 维尼休斯 今泉晃 +

  • 弗拉基米尔·福科夫 +

  • 司文俊

  • 威尔·拉昌斯 +

  • 威廉·安德烈

  • 沃尔夫冈·F·里德尔 +

  • 陈兴荣

  • 亚戈·冈萨雷斯

  • 蒋轶琨 +

  • 耿元浩

  • 尤瓦尔+

  • 王正飞+

  • 阿布米伊

  • 亚历山大+

  • 施舍

  • 安杰霍尔 +

  • 阿尼尔贝 +

  • 阿诺德莱古 +

  • asv-机器人 +

  • 阿特基+

  • 奥德森+

  • 贝尔沃斯 +

  • 比卡尔森 +

  • 漏碳+

  • 查尔斯+

  • 查洛加佐 +

  • 代码审查医生 +

  • 数据采集​​+

  • 德波诺沃

  • 迪米特拉·卡拉迪玛 +

  • 多斯皮克斯+

  • 埃哈拉姆+

  • 埃桑·希尔瓦尼安 +

  • 余烬91 +

  • 埃希尔瓦纳

  • 分数野兔 +

  • 高田98 +

  • 吉苏斯

  • github-actions[机器人]

  • 贡哈布+

  • 哈桑亚曼

  • 健康+

  • 伊迅+

  • 杰布罗克门德尔

  • 约书亚贝洛2550 +

  • 尤夫+

  • 高桥幸也 +

  • 玛丽安娜-LJ +

  • 亚光+

  • 马特B1989 +

  • 尼尔克斯米+

  • 帕尔捷夫

  • 波洛索+

  • 真实领先

  • 罗伊布20+

  • RTPSW

  • 瑞安吉尔莫 +

  • 舒雅5 +

  • 斯罗通多 +

  • 蔡斯坦利95 +

  • 静态开发+

  • 特猎人+

  • 存在+

  • 托比亚斯·皮特斯 +

  • 解锁+

  • 韦尔内蒂亚

  • wany-哦 +

  • 工作频率+

  • z3c0 +