1.4.0 中的新增功能(2022 年 1 月 22 日)#

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

增强功能#

改进的警告消息#

以前,警告消息可能指向 pandas 库内的行。运行脚本setting_with_copy_warning.py

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 3]})
df[:2].loc[:, 'a'] = 5

pandas 1.3 的结果是:

.../site-packages/pandas/core/indexing.py:1951: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.

这使得很难确定警告是从哪里生成的。现在 pandas 将检查调用堆栈,报告 pandas 库之外引起警告的第一行。上述脚本的输出现在是:

setting_with_copy_warning.py:4: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.

索引可以保存任意ExtensionArrays #

到目前为止,传递自定义ExtensionArray会将pd.Index数组转换为objectdtype。现在Index可以直接保存任意ExtensionArrays(GH 43930)。

以前的行为

In [1]: arr = pd.array([1, 2, pd.NA])

In [2]: idx = pd.Index(arr)

在旧的行为中,idx将是 object-dtype:

以前的行为

In [1]: idx
Out[1]: Index([1, 2, <NA>], dtype='object')

对于新的行为,我们保留原始的数据类型:

新行为

In [3]: idx
Out[3]: Index([1, 2, <NA>], dtype='Int64')

一个例外是SparseArray,它将继续转换为 numpy dtype,直到 pandas 2.0。此时它将像其他 ExtensionArray 一样保留其数据类型。

造型器#

Styler在1.4.0中得到了进一步的发展。进行了以下一般增强:

  • 添加了索引的样式和格式设置,包括Styler.apply_index()Styler.applymap_index()Styler.format_index()。这些镜像反映了已用于设置数据值样式和格式的方法的签名,并且适用于 HTML、LaTeX 和 Excel 格式(GH 41893GH 43101GH 41993GH 41995

  • 新方法Styler.hide()不赞成使用Styler.hide_index()( Styler.hide_columns()GH 43758 )

  • 关键字参数levelandnames已添加到Styler.hide()(并隐式添加到已弃用的方法Styler.hide_index()and 中Styler.hide_columns()),用于对 MultiIndex 和索引名称的可见性进行额外控制(GH 25475GH 43404GH 43346

  • 和已更新Styler.export(),以解决 v1.2.0 和 v1.3.0 ( GH 40675 )Styler.use()中添加的所有功能

  • 该类别下的全局选项pd.options.styler已扩展为配置默认Styler属性,以解决格式设置、编码以及 HTML 和 LaTeX 渲染问题。请注意,以前Styler依赖display.html.use_mathjax,现在已被styler.html.mathjax( GH 41395 )取代

  • 验证某些关键字参数,例如captionGH 43368

  • 各种错误修复如下所示

此外,还有针对 HTML 特定渲染的特定增强功能:

还有一些 LaTeX 特定的增强功能:

  • Styler.to_latex()引入了关键字参数environment,它还允许通过单独的 jinja2 模板(GH 41866)输入特定的“longtable”条目

  • LaTeX 现在可以进行简单的稀疏化,而无需包含多行包(GH 43369

  • MultiIndex通过关键字参数添加了cline支持以进行行稀疏化 ( GH 45138 )

使用基于 pyarrow 的新 CSV 引擎进行多线程 CSV 读取#

pandas.read_csv()现在接受engine="pyarrow"(至少需要 pyarrow1.0.1)作为参数,允许在安装了 pyarrow 的多核计算机上更快地解析 csv。有关详细信息,请参阅I/O 文档。 (GH 23697GH 43706

用于滚动和扩展窗口的 Rank 函数#

为和增加了rank功能。新函数支持、和标志 。该参数支持、和 排序方法。例子:RollingExpandingmethodascendingpctDataFrame.rank()methodminmaxaverage

In [4]: s = pd.Series([1, 4, 2, 3, 5, 3])

In [5]: s.rolling(3).rank()
Out[5]: 
0    NaN
1    NaN
2    2.0
3    2.0
4    3.0
5    1.5
dtype: float64

In [6]: s.rolling(3).rank(method="max")
Out[6]: 
0    NaN
1    NaN
2    2.0
3    2.0
4    3.0
5    2.0
dtype: float64

Groupby 位置索引#

现在可以指定相对于每个组末端的位置范围。

DataFrameGroupBy.head()SeriesGroupBy.head()DataFrameGroupBy.tail()和的负参数SeriesGroupBy.tail()现在可以正常工作,并分别产生相对于每个组的结束和开始的范围。以前,负参数返回空帧。

In [7]: df = pd.DataFrame([["g", "g0"], ["g", "g1"], ["g", "g2"], ["g", "g3"],
   ...:                    ["h", "h0"], ["h", "h1"]], columns=["A", "B"])
   ...: 

In [8]: df.groupby("A").head(-1)
Out[8]: 
   A   B
0  g  g0
1  g  g1
2  g  g2
4  h  h0

DataFrameGroupBy.nth()现在SeriesGroupBy.nth()接受一个切片或整数和切片的列表。

In [9]: df.groupby("A").nth(slice(1, -1))
Out[9]: 
   A   B
1  g  g1
2  g  g2

In [10]: df.groupby("A").nth([slice(None, 1), slice(-1, None)])
Out[10]: 
   A   B
0  g  g0
3  g  g3
4  h  h0
5  h  h1

DataFrameGroupBy.nth()现在SeriesGroupBy.nth()接受索引符号。

In [11]: df.groupby("A").nth[1, -1]
Out[11]: 
   A   B
1  g  g1
3  g  g3
5  h  h1

In [12]: df.groupby("A").nth[1:-1]
Out[12]: 
   A   B
1  g  g1
2  g  g2

In [13]: df.groupby("A").nth[:1, -1:]
Out[13]: 
   A   B
0  g  g0
3  g  g3
4  h  h0
5  h  h1

DataFrame.from_dict 和 DataFrame.to_dict 有新'tight'选项#

保留条目和名称的新'tight'字典格式MultiIndex现在可以通过DataFrame.from_dict()DataFrame.to_dict()方法使用,并且可以与标准json 库一起使用来生成对象的紧密表示DataFrameGH 4889)。

In [14]: df = pd.DataFrame.from_records(
   ....:     [[1, 3], [2, 4]],
   ....:     index=pd.MultiIndex.from_tuples([("a", "b"), ("a", "c")],
   ....:                                     names=["n1", "n2"]),
   ....:     columns=pd.MultiIndex.from_tuples([("x", 1), ("y", 2)],
   ....:                                       names=["z1", "z2"]),
   ....: )
   ....: 

In [15]: df
Out[15]: 
z1     x  y
z2     1  2
n1 n2      
a  b   1  3
   c   2  4

In [16]: df.to_dict(orient='tight')
Out[16]: 
{'index': [('a', 'b'), ('a', 'c')],
 'columns': [('x', 1), ('y', 2)],
 'data': [[1, 3], [2, 4]],
 'index_names': ['n1', 'n2'],
 'column_names': ['z1', 'z2']}

其他增强功能#

值得注意的错误修复#

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

日期字符串解析不一致#

dayfirst的选项并不to_datetime()严格,这可能会导致令人惊讶的行为:

In [17]: pd.to_datetime(["31-12-2021"], dayfirst=False)
Out[17]: DatetimeIndex(['2021-12-31'], dtype='datetime64[ns]', freq=None)

dayfirst现在,当该值为分隔日期字符串(例如 31-12-2012)时,如果无法根据给定值解析日期字符串,则会发出警告。

忽略带有空或全 NA 列的 concat 数据类型#

笔记

此行为更改已在 pandas 1.4.3 中恢复。

当用于concat()连接两个或多个DataFrame对象时,如果其中一个 DataFrame 为空或具有全 NA 值,则 在查找连接的数据类型时有时会忽略其数据类型。这些现在始终不会被忽视(GH 43507)。

In [3]: df1 = pd.DataFrame({"bar": [pd.Timestamp("2013-01-01")]}, index=range(1))
In [4]: df2 = pd.DataFrame({"bar": np.nan}, index=range(1, 2))
In [5]: res = pd.concat([df1, df2])

以前, in 中的 float-dtypedf2将被忽略,因此结果 dtype 将为datetime64[ns]。结果,np.nan将被转换为 NaT.

以前的行为

In [6]: res
Out[6]:
         bar
0 2013-01-01
1        NaT

现在 float-dtype 受到尊重。由于这些 DataFrame 的通用数据类型是 object,因此np.nan保留了 。

新行为

In [6]: res
Out[6]:
                   bar
0  2013-01-01 00:00:00
1                  NaN

在 value_counts 和模式中,空值不再被强制为 NaN 值#

Series.value_counts()并且Series.mode()不再将 和其他 null 值强制转换None为 -dtypeNaT的 NaN 值np.object_。此行为现​​在与uniqueisin和其他人一致 ( GH 42688 )。

In [18]: s = pd.Series([True, None, pd.NaT, None, pd.NaT, None])

In [19]: res = s.value_counts(dropna=False)

以前,所有空值都被替换为 NaN 值。

以前的行为

In [3]: res
Out[3]:
NaN     5
True    1
dtype: int64

现在空值不再被破坏。

新行为

In [20]: res
Out[20]: 
None    3
NaT     2
True    1
Name: count, dtype: int64

read_csv 中的 mangle_dupe_cols 不再重命名与目标名称冲突的唯一列#

read_csv()不再重命名与重复列的目标名称冲突的唯一列标签。已存在的列将被跳过,即下一个可用索引用于目标列名称 ( GH 14704 )。

In [21]: import io

In [22]: data = "a,a,a.1\n1,2,3"

In [23]: res = pd.read_csv(io.StringIO(data))

以前,第二列称为a.1,而第三列也重命名为a.1.1

以前的行为

In [3]: res
Out[3]:
    a  a.1  a.1.1
0   1    2      3

a.1现在,重命名会在更改第二列的名称时检查是否已存在并跳转该索引。第二列改为重命名为 a.2

新行为

In [24]: res
Out[24]: 
   a  a.2  a.1
0  1    2    3

unstack 和 hub_table 不再因超出 int32 限制的结果引发 ValueError #

以前,如果操作可以产生包含多个元素的结果 ,则DataFrame.pivot_table()andDataFrame.unstack()会引发异常。此操作现在会引发 ( GH 26314 )。ValueError2**31 - 1errors.PerformanceWarning

以前的行为

In [3]: df = DataFrame({"ind1": np.arange(2 ** 16), "ind2": np.arange(2 ** 16), "count": 0})
In [4]: df.pivot_table(index="ind1", columns="ind2", values="count", aggfunc="count")
ValueError: Unstacked DataFrame is too big, causing int32 overflow

新行为

In [4]: df.pivot_table(index="ind1", columns="ind2", values="count", aggfunc="count")
PerformanceWarning: The following operation may generate 4294967296 cells in the resulting pandas object.

groupby.apply一致变换检测#

DataFrameGroupBy.apply()并且SeriesGroupBy.apply()被设计得非常灵活,允许用户执行聚合、转换、过滤,并将其与可能不属于任何这些类别的用户定义函数一起使用。作为其中的一部分,apply 将尝试检测操作何时是转换,在这种情况下,结果将具有与输入相同的索引。为了确定该操作是否是转换,pandas 将输入的索引与结果的索引进行比较,并确定它是否已发生变异。之前在 pandas 1.3 中,不同的代码路径使用不同的“mutated”定义:有些会使用 Python is ,而另一些则仅测试是否相等。

这种不一致已被消除,pandas 现在测试是否相等。

In [25]: def func(x):
   ....:     return x.copy()
   ....: 

In [26]: df = pd.DataFrame({'a': [1, 2], 'b': [3, 4], 'c': [5, 6]})

In [27]: df
Out[27]: 
   a  b  c
0  1  3  5
1  2  4  6

以前的行为

In [3]: df.groupby(['a']).apply(func)
Out[3]:
     a  b  c
a
1 0  1  3  5
2 1  2  4  6

In [4]: df.set_index(['a', 'b']).groupby(['a']).apply(func)
Out[4]:
     c
a b
1 3  5
2 4  6

在上面的示例中,第一个使用 pandas 使用的代码路径is并确定这func不是转换,而第二个测试是否相等并确定这func是一个转换。在第一种情况下,结果的索引与输入的索引不同。

新行为

In [5]: df.groupby(['a']).apply(func)
Out[5]:
   a  b  c
0  1  3  5
1  2  4  6

In [6]: df.set_index(['a', 'b']).groupby(['a']).apply(func)
Out[6]:
     c
a b
1 3  5
2 4  6

现在在这两种情况下都确定这func是一个变换。在每种情况下,结果都具有与输入相同的索引。

向后不兼容的 API 更改#

增加了 Python 的最低版本#

pandas 1.4.0 支持 Python 3.8 及更高版本。

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

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

包裹

最低版本

必需的

改变了

麻木

1.18.5

X

X

皮茨

2020.1

X

X

python-dateutil

2.8.1

X

X

瓶颈

1.3.1

X

数值表达式

2.7.1

X

pytest(开发)

6.0

mypy(开发)

0.930

X

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

包裹

最低版本

改变了

美丽汤4

4.8.2

X

快速镶木地板

0.4.0

FS规范

0.7.4

GCSFS

0.6.0

lxml

4.5.0

X

绘图库

3.3.2

X

努巴

0.50.1

X

开放式pyxl

3.0.3

X

pandas-GBQ

0.14.0

X

皮箭头

1.0.1

X

pymysql

0.10.1

X

pytables

3.6.1

X

s3fs

0.4.0

scipy

1.4.1

X

sqlalchemy

1.4.0

X

制表

0.8.7

阵列

0.15.1

X

xlrd

2.0.1

X

XLSX作家

1.2.2

X

xlwt

1.3.0

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

其他 API 更改#

  • Index.get_indexer_for()不再接受关键字参数(除了target);在过go,如果索引不唯一(GH 42310),这些将被默默地忽略

  • min_rows由于文档字符串的更改而导致参数位置的更改DataFrame.to_string()GH 44304

  • 减少操作DataFrameSeries现在提高ValueError何时None通过skipnaGH 44178

  • read_csv()当标题行之一仅包含列时,不再read_html()引发错误Unnamed:GH 13054

  • 更改了name几个假期的属性以 专门USFederalHolidayCalendar匹配官方联邦假期名称

    • “元旦”获得所有格撇号

    • “总统日”变成“华盛顿生日”

    • “马丁·路德·金日”现在是“马丁·路德·金生日”。

    • “7 月 4 日”现在是“独立日”

    • “感恩节”现在是“感恩节”

    • “圣诞节”现在是“圣诞节”

    • 添加了“六月独立日”

弃用#

已弃用 Int64Index、UInt64Index 和 Float64Index #

Int64IndexUInt64IndexFloat64Index已被弃用,取而代之的是基类Index,并将在 Pandas 2.0 中删除(GH 43028)。

为了构建数字索引,您可以使用基Index类而不是指定数据类型(这也适用于较旧的 pandas 版本):

# replace
pd.Int64Index([1, 2, 3])
# with
pd.Index([1, 2, 3], dtype="int64")

要检查索引对象的数据类型,您可以将isinstance 检查替换为检查dtype

# replace
isinstance(idx, pd.Int64Index)
# with
idx.dtype == "int64"

目前,为了保持向后兼容性,调用Index 将继续返回, Int64Index当给定数字数据时,但将来, 将返回 an 。UInt64IndexFloat64IndexIndex

当前行为

In [1]: pd.Index([1, 2, 3], dtype="int32")
Out [1]: Int64Index([1, 2, 3], dtype='int64')
In [1]: pd.Index([1, 2, 3], dtype="uint64")
Out [1]: UInt64Index([1, 2, 3], dtype='uint64')

未来的行为

In [3]: pd.Index([1, 2, 3], dtype="int32")
Out [3]: Index([1, 2, 3], dtype='int32')
In [4]: pd.Index([1, 2, 3], dtype="uint64")
Out [4]: Index([1, 2, 3], dtype='uint64')

已弃用 DataFrame.append 和 Series.append #

DataFrame.append()Series.append()被弃用,并将在未来版本中删除。请改用pandas.concat()GH 35407)。

已弃用的语法

In [1]: pd.Series([1, 2]).append(pd.Series([3, 4])
Out [1]:
<stdin>:1: FutureWarning: The series.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
0    1
1    2
0    3
1    4
dtype: int64

In [2]: df1 = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
In [3]: df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
In [4]: df1.append(df2)
Out [4]:
<stdin>:1: FutureWarning: The series.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
   A  B
0  1  2
1  3  4
0  5  6
1  7  8

推荐语法

In [28]: pd.concat([pd.Series([1, 2]), pd.Series([3, 4])])
Out[28]: 
0    1
1    2
0    3
1    4
dtype: int64

In [29]: df1 = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))

In [30]: df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))

In [31]: pd.concat([df1, df2])
Out[31]: 
   A  B
0  1  2
1  3  4
0  5  6
1  7  8

其他弃用#

  • 已弃用Index.is_type_compatible()GH 42113

  • method中已弃用的参数Index.get_loc(),请改用( GH 42269 )index.get_indexer([label], method=...)

  • Series.__setitem__()当索引Float64Index不包含键、IntervalIndex没有包含键的条目或MultiIndex前导Float64Index级别不包含键时,不建议将整数键视为位置键 ( GH 33469 )

  • 不建议将对象与时区一起numpy.datetime64传递给构造函数时将其视为 UTC 时间。Timestamp在未来的版本中,这些将被视为墙时间。要保留旧行为,请使用Timestamp(dt64).tz_localize("UTC").tz_convert(tz)( GH 24559 )

  • 在使用 a 级别的标签序列进行索引时,不推荐忽略丢失的标签MultiIndexGH 42351

  • Series创建一个没有 a 的空dtype现在将引发一个更明显的FutureWarning而不是DeprecationWarning( GH 30017 )

  • 弃用了、和kind中的参数;在未来的版本中,传递将引发(GH 42857Index.get_slice_bound()Index.slice_indexer()Index.slice_locs()kind

  • Rolling已弃用删除、Expanding和聚合中的干扰列EWM( GH 42738 )

  • 已弃用Index.reindex()非唯一Index( GH 42568 )

  • 已弃用Styler.render(),取而代之的是Styler.to_html()GH 42140

  • 已弃用Styler.hide_index()Styler.hide_columns()赞成Styler.hide()GH 43758

  • 已弃用将字符串列标签传递到timesin DataFrame.ewm()( GH 43265 )

  • 弃用了中的include_start和参数;在未来的版本中通过或将提高(GH 40245include_endDataFrame.between_time()include_startinclude_end

  • 弃用了、和 的squeeze参数。用户应改为挤压之后(GH 43242read_csv()read_table()read_excel()DataFrame.squeeze("columns")

  • 弃用了构造index参数SparseArrayGH 23089

  • 反对closed论证date_range()bdate_range()赞成inclusive论证;在未来的版本中,传递closed将引发(GH 40245

  • 已弃用Rolling.validate(), Expanding.validate(), 和ExponentialMovingWindow.validate()( GH 43665 )

  • 已弃用静默删除TypeErrorSeries.transformDataFrame.transform与字典一起使用时引发 a 的列 ( GH 43740 )

  • 已弃用静默删除引发 a TypeError、和in 、、、 和与列表一起使用时的DataError某些情况的列 ( GH 43740 )ValueErrorSeries.aggregate()DataFrame.aggregate()Series.groupby.aggregate()DataFrame.groupby.aggregate()

  • 当时区不匹配时将时区感知值设置到时区感知Series或列时,已弃用转换行为。DataFrame以前此转换为对象数据类型。在未来版本中,插入的值将转换为系列或列的现有时区 ( GH 37605 )

  • 将时区不匹配的项目传递给DatetimeIndex.insert()DatetimeIndex.putmask()DatetimeIndex.where() DatetimeIndex.fillna()Series.mask()、 、Series.where()Series.fillna()Series.shift()、(和列类似物)时已弃用的强制转换行为。在过go,这已转换为 object 。在未来的版本中,这些会将传递的项目投射到索引或系列的时区(GH 37605GH 44940Series.replace()Series.reindex()DataFramedtype

  • 已弃用andprefix中的关键字参数,在未来版本中该参数将被删除(GH 43396read_csv()read_table()

  • 已弃用将非布尔参数传递给sortin concat()( GH 41518 )

  • 已弃用将参数传递为read_fwf()filepath_or_buffer( GH 41485 )以外的位置

  • 已弃用将参数传递为read_xml()path_or_buffer( GH 45133 )以外的位置

  • 已弃用传递skipna=Noneand DataFrame.mad()Series.mad()改为传递skipna=True( GH 44580 )

  • to_datetime()弃用了带有字符串“now”的行为utc=False;在未来的版本中,这将匹配Timestamp("now"),进而匹配Timestamp.now()返回本地时间(GH 18705

  • 已弃用DateOffset.apply(),请改用 ( GH 44522 )offset + other

  • ( GH 44916 )names中已弃用的参数Index.copy()

  • 现在显示弃用警告,指示参数签名可能会更改并在未来版本中DataFrame.to_latex()模拟更多参数( GH 44411Styler.to_latex()

  • concat()已弃用 bool-dtype 和 numeric-dtypes 对象之间的行为;在未来的版本中,这些将转换为对象数据类型,而不是将布尔值强制转换为数值(GH 39817

  • 已弃用Categorical.replace(),请Series.replace()改用 ( GH 44929 )

  • 已弃用传递setdict作为DataFrame.loc.__setitem__(), DataFrame.loc.__getitem__(), Series.loc.__setitem__(), Series.loc.__getitem__(), ,DataFrame.__getitem__()Series.__getitem__()( Series.__setitem__()GH 42825 )的索引器

  • 已弃用Index.__getitem__()bool 键;用于index.values[key]获取旧行为(GH 44051

  • DataFrame.where()已弃用整数 dtypes中的逐列向下转型( GH 44597 )

  • 已弃用DatetimeIndex.union_many(),请DatetimeIndex.union()改用 ( GH 44091 )

  • 已弃用Groupby.pad(),取而代之的是Groupby.ffill()GH 33396

  • 已弃用Groupby.backfill(),取而代之的是Groupby.bfill()GH 33396

  • 已弃用Resample.pad(),取而代之的是Resample.ffill()GH 33396

  • 已弃用Resample.backfill(),取而代之的是Resample.bfill()GH 33396

  • numeric_only=None弃用DataFrame.rank();在未来的版本中numeric_only必须是TrueFalse(默认)( GH 45036 )

  • 已弃用 的行为Timestamp.utcfromtimestamp(),将来它将返回时区感知的 UTC Timestamp( GH 22451 )

  • 已弃用NaT.freq()GH 45071

  • 当传递包含忽略 dtype 参数的整数 dtype 的浮点 dtype 数据时,已弃用的行为Series和构造;在未来的版本中,这将提高(GH 40110DataFrameNaN

  • Series.to_frame()弃用了和时Index.to_frame()忽略参数的行为。目前,这意味着保留现有名称,但将来显式传递将设置为结果 DataFrame 中的列名称(GH 44212namename=Nonename=NoneNone

性能改进#

Bug修复

分类#

  • 将与 dtype 不兼容的值设置为Categorical(或SeriesDataFrameCategorical提升ValueError而不是TypeErrorGH 41919)中的错误

  • 传递与Categorical.searchsorted()数据类型不兼容的值时出现错误(GH 41919KeyErrorTypeError

  • Categorical.astype()转换日期时间和Timestampdtype 的 int 时出现错误objectGH 44930

  • Series.where()传递与CategoricalDtype数据类型不兼容的值时出现错误,ValueError而不是TypeErrorGH 41919

  • 传递与Categorical.fillna()数据类型不兼容的值时出现错误(GH 41919ValueErrorTypeError

  • Categorical.fillna()使用类似元组的类别提升ValueError而不是TypeError填充非类别元组时出现错误( GH 41919

类似日期时间#

时间增量#

  • 对 all-或具有 object-dtype 数组的列进行除法时出现错误NaT TimeDeltaIndex,例如数字无法将结果推断为 timedelta64-dtype ( GH 39750 )SeriesDataFrame

  • timedelta64[ns]使用标量返回垃圾值的数据楼层划分中的错误( GH 44466

  • 现在Timedelta正确考虑了任何 kwarg 的任何纳秒贡献(GH 43764GH 45227

时区

数字#

  • 通过错误的提升对整数列表或元组进行底除的错误SeriesGH 44674

  • 使用列DataFrame.rank()提升时的错误和(GH 41931ValueErrorobjectmethod="first"

  • DataFrame.rank()将缺失值和极值视为相等的错误(例如np.nan和),导致使用或np.inf时结果不正确(GH 41931na_option="bottom"na_option="top

  • numexpr当选项compute.use_numexpr设置为FalseGH 32556)时,引擎中的错误仍在使用

  • DataFrame子类的算术运算中的错误,其_constructor()属性是除子类本身之外的可调用项(GH 43201

  • 算术运算中的错误涉及RangeIndex结果不正确的地方nameGH 43962

  • 算术运算中的错误涉及当操作数具有匹配的 NA 或匹配的元组名称时Series结果可能不正确的位置( GH 44459name

  • 除法IntegerDtypeBooleanDtype数组和 NA 标量错误地引发错误 ( GH 44685 )

  • Series将 a与FloatingDtype类似 timedelta 的标量相乘时错误地提升的错误( GH 44772 )

转换

字符串#

  • 在未安装 pyarrow 时检查string[pyarrow]dtype 时错误地引发错误 ( GH 44276 )ImportError

间隔

索引#

  • 错误Series.rename()MultiIndexlevel提供(GH 43659

  • DataFrame.truncate()Series.truncate()对象的Index长度大于一但只有一个唯一值时出现错误( GH 42365

  • 当使用元组进行索引Series.loc()时,其中一个级别也是元组(GH 27591DataFrame.loc()MultiIndex

  • Series.loc()第一个级别MultiIndex仅包含值的错误np.nanGH 42055

  • Series传递字符串时在 a或DataFramea上建立索引的错误DatetimeIndex,返回类型取决于索引是否单调(GH 24892

  • MultiIndex当索引器是包含类似日期时间的字符串的元组时,索引中无法删除标量级别的错误( GH 42476

  • DataFrame.sort_values()在传递升序值时出现错误Series.sort_values(),无法提高或错误地提高ValueErrorGH 41634

  • pandas.Series使用布尔索引更新值时的错误,通过使用pandas.DataFrame.pop()GH 42530)创建

  • Index.get_indexer_non_unique()当索引包含多个时出现错误np.nanGH 35392

  • 错误DataFrame.query()未处理反引号列名称中的度数符号,例如“Temp(°C)”,在表达式中用于查询DataFrame( GH 42826 )

  • 错误消息在DataFrame.drop()引发时未显示带有逗号的缺失标签KeyErrorGH 42881

  • 安装包DataFrame.query()时查询字符串中的方法调用导致错误的错误( GH 22435 )numexpr

  • DataFrame.nlargest()排序结果中的错误Series.nlargest()未计算包含np.nanGH 28984)的索引

  • Index在具有 NA 标量的非唯一对象数据类型上建立索引时出现错误(例如np.nan)(GH 43711

  • DataFrame.__setitem__()当新数据类型和旧数据类型匹配时,错误地写入现有列的数组而不是设置新数组的错误( GH 43406

  • Series当这些值可以无损转换为整数时,将浮动数据类型值设置为整数数据类型时无法设置到位的错误( GH 44316

  • Series.__setitem__()设置具有匹配大小的数组且 dtype='datetime64[ns]' 或 dtype='timedelta64[ns]' 错误地将日期时间/时间增量转换为整数时,对象 dtype出现错误( GH 43868

  • 当索引已经排序时,DataFrame.sort_index()哪里没有被尊重的错误( GH 43591ignore_index=True

  • Index.get_indexer_non_unique()当索引包含多个np.datetime64("NaT")and时出现错误np.timedelta64("NaT")GH 43869

  • 当标量的边是浮点数并且值的边是整数时,将标量值设置IntervalSerieswith时出现错误( GH 44201IntervalDtype

  • Categorical将可解析为日期时间的字符串支持的值设置为无法解析这些字符串的DatetimeArraySeriesDataFrame列时出现错误( GH 44236DatetimeArray

  • 除了使用不必要的对象向上转换到(GH 44261)的设置Series.__setitem__()之外,还存在整数数据类型的错误int64rangeint64

  • 使用Series.__setitem__()布尔掩码索引器设置长度为 1 的类似列表值时错误地广播该值(GH 44265

  • 当和设置为(GH 44575)时Series.reset_index()不忽略name参数的错误dropinplaceTrue

  • DataFrame.loc.__setitem__()混合数据类型中的错误DataFrame.iloc.__setitem__()有时无法就地操作(GH 44345

  • 使用布尔键选择单个列时DataFrame.loc.__getitem__()错误地引发错误( GH 44322)。KeyError

  • DataFrame.iloc()使用单列设置ExtensionDtype和设置 2D 值时出现错误,例如错误地提升 ( GH 44514 )df.iloc[:] = df.values

  • DataFrame.iloc()使用单列ExtensionDtype和数组元组作为索引器设置值时出现错误( GH 44703

  • loc在带有或iloc使用具有负步骤的切片的列上建立索引时出现错误,并且ExtensionDtype列错误地提升(GH 44551

  • DataFrame.loc.__setitem__()当索引器完全打开时更改数据类型时出现错误FalseGH 37550

  • IntervalIndex.get_indexer_non_unique()对于非唯一且非单调索引返回布尔掩码而不是整数数组的错误( GH 44084

  • IntervalIndex.get_indexer_non_unique()未正确处理dtype带有 NaN 的“对象”目标的错误( GH 44482

  • 修复了回归,其中单个列在添加到( GH 42376 )时np.matrix不再被强制为 1dnp.ndarrayDataFrame

  • Series.__getitem__()将整数列表视为位置索引器的整数错误CategoricalIndex,与单个标量整数的行为不一致(GH 15470GH 14865

  • Series.__setitem__()将浮点数或整数设置为整​​数 dtype 时出现的错误Series,在需要保留精度时无法向上转换(GH 45121

  • DataFrame.iloc.__setitem__()忽略轴参数中的错误( GH 45032

丢失的

多重索引#

输入/输出#

时期

绘图#

分组/重新采样/滚动#

重塑#

稀疏#

  • 当列名称不唯一时DataFrame.sparse.to_coo()引发错误( GH 29564AttributeError

  • 错误插入SparseArray.max()SparseArray.min()引发ValueError具有 0 个非空元素的数组 ( GH 43527 )

  • DataFrame.sparse.to_coo()默默地将非零填充值转换为零的错误( GH 24817

  • SparseArray具有不匹配长度的类似数组操作数的比较方法中的错误会根据输入而提升AssertionError或不清楚( GH 43863ValueError

  • SparseArray除以零时算术方法floordiv和行为中的错误mod与非稀疏Series行为不匹配(GH 38172

  • 一元方法中的错误SparseArray以及SparseArray.isna()不重新计算索引(GH 44955

扩展数组#

  • array()无法保存的错误PandasArrayGH 43887

  • NumPy ufuncs np.absnp.positivenp.negative现在在分别实现 的 ExtensionArray 上调用时可以正确保留 dtype 。特别是这是固定的(GH 43899GH 23316__abs__, __pos__, __neg__TimedeltaArray

  • NumPy ufuncs np.minimum.reduce np.maximum.reducenp.add.reducenp.prod.reduce现在可以正常工作,而不是使用or进行NotImplementedError提升(GH 43923GH 44793SeriesIntegerDtypeFloatDtype

  • 带有关键字的 NumPy ufunc现在由带有and 的out数组支持( GH 45122 )IntegerDtypeFloatingDtype

  • 使用具有扩展数据类型的许多列时避免PerformanceWarning引发碎片( GH 44098DataFrame

  • 错误IntegerArrayFloatingArray构造错误地将不匹配的 NA 值(例如np.timedelta64("NaT"))强制转换为数字 NA(GH 44514

  • 与不兼容的类型(如字符串)进行比较时出现错误BooleanArray.__eq__()BooleanArray.__ne__()引发错误。如果包含可为空的布尔列,TypeErrorDataFrame.replace()有时会引发错误( GH 44499TypeError

  • 当通过dtypearray()传递时错误地引发错误(GH 44715ndarrayfloat16

  • 调用np.sqrt返回BooleanArray格式错误时出现错误FloatingArrayGH 44715

  • 当NA 标量与数据类型(例如数字数据类型)不兼容Series.where()时错误地转换为兼容的 NA 值(GH 44697ExtensionDtypeotherSeriesNaT

  • Series.replace()显式传递value=None被视为未value传递且不None在结果中的错误( GH 36984GH 19998

  • Series.replace()在无操作替换中进行不必要的向下转换时出现错误( GH 44498

  • Bug in Series.replace()with FloatDtype, string[python], 或string[pyarrow]dtype 在可能的情况下未被保留(GH 33484GH 40732GH 31644GH 41215GH 25438

造型器#

  • Styler初始化uuid时维护浮动下划线的错误( GH 43037

  • 如果使用某些参数调用方法,则更新对象的Styler.to_html()位置存在错误( GH 43034Stylerto_html

  • 先前未复制的Styler.copy()位置出现错误( GH 40675uuid

  • Styler.apply()在对齐索引标签方面,返回Series对象的函数未正确处理的错误( GH 13657GH 42014

  • DataFrame使用命名渲染空时出现错误IndexGH 43305

  • 渲染单个关卡时出现错误MultiIndex( GH 43383 )

  • 组合非稀疏渲染和Styler.hide_columns()或时的错误Styler.hide_index()GH 43464

  • Styler在( GH 44011 )中使用多个选择器时设置表格样式的错误

  • 行修剪和列修剪无法反映隐藏行的错误(GH 43703GH 44247

其他

贡献者#

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

  • 阿布舍克·R

  • 阿尔伯特·维拉诺瓦·德尔·莫拉尔

  • 亚历山德罗·比西亚尼 +

  • 亚历克斯·林

  • 亚历克斯-格雷戈里-1 +

  • 亚历山大·戈罗德茨基

  • 亚历山大·雷盖罗 +

  • 阿列克谢·杰里

  • 亚历克西斯·米尼翁

  • 阿莱斯·埃哈韦茨

  • 阿里·麦克马斯特

  • 不在场证明 +

  • 安德烈·巴托蒙库耶夫 +

  • 安德鲁·埃卡特 +

  • 安德鲁·豪鲁​​克

  • 安德鲁·伍德

  • 安东·洛德 +

  • 阿明·贝尔雷斯 +

  • 阿鲁什·夏尔马 +

  • 本尼迪克特·海德里希 +

  • 贝尼·比恩茨 +

  • 伯努瓦·维诺

  • 伯特·帕尔姆+

  • 鲍里斯·鲁缅采夫 +

  • 布赖恩·休莱特

  • 布罗克

  • 布鲁诺·科斯塔+

  • 布莱恩·拉西克 +

  • 迦勒·爱泼斯坦

  • 何志坚

  • 克里斯托弗·考夫曼 +

  • 克里斯托弗·叶 +

  • 肖楚良 +

  • 克劳迪娅·银 +

  • 帝斯曼

  • 丹尼尔·科尔 +

  • 丹尼尔·施密特 +

  • 戴尔·阿德乌米

  • 大卫+

  • 大卫·桑德斯 +

  • 大卫·威尔士 +

  • 蒋德赞 +

  • 狡猾实验室+

  • 德鲁夫·B·谢蒂 +

  • 迪格雷斯45 +

  • 多米尼克·库特拉 +

  • 德鲁·莱维特 +

  • 德里斯

  • 埃德·阿巴蒂

  • 埃勒

  • 埃利奥特·兰波诺

  • 恩德烈·马克·博尔扎

  • 埃尔凡·纳里曼

  • 叶夫根尼·瑙莫夫 +

  • 埃乌特·特尔霍芬 +

  • 李芳辰

  • 菲利克斯·迪沃

  • 菲利克斯·杜利斯 +

  • 弗朗西斯科·安德烈乌齐 +

  • 弗朗索瓦·迪翁 +

  • 弗兰斯·拉尔森 +

  • 弗雷德·赖斯

  • 吉万

  • 加布里埃尔·迪·帕迪·阿鲁达 +

  • 格萨·施图佩里奇

  • 贾科莫·卡里亚 +

  • 格雷格·西亚诺 +

  • 格里芬·安塞尔

  • 小笠原宏明 +

  • 贺拉斯+

  • 黎浩然 +

  • 欧夫·勒斯蒂格

  • 艾萨克·维尔舒普

  • JHM 达比郡 (MBP)

  • JHM 达比郡 (iMac)

  • JHM 达比郡 +

  • 刘杰克

  • 雅各布·斯克维尔斯克 +

  • 海梅·迪·克里斯蒂娜 +

  • 詹姆斯·霍尔科姆 +

  • 贾诺什·里伯塞尔 +

  • 贾罗德·米尔曼

  • 边杰森 +

  • 杰夫·雷巴克

  • 耶内·马科夫塞克 +

  • 吉姆·布拉德利 +

  • 乔尔·吉布森 +

  • 乔珀·德弗洛普 +

  • 约翰内斯·穆勒 +

  • 约翰·S·博加特 +

  • 约翰·赞格威尔 +

  • 乔恩·海茨·勒加雷塔·戈罗尼奥 +

  • 乔恩·威金斯 +

  • 乔纳斯·哈格 +

  • 乔里斯·范登博什

  • 乔什·弗里德兰德

  • 何塞·杜阿尔特 +

  • 朱利安·弗莱舍 +

  • 朱利安·德拉布鲁埃-T

  • 贾斯汀·麦奥米

  • 卡达塔特卢·基肖尔 +

  • 董凯琪

  • 卡西夫·汗 +

  • 卡维亚9986 +

  • 肯德尔+

  • 凯文·谢泼德

  • 凯利·休伊特

  • 科恩·罗洛夫斯 +

  • 克里希纳·奇武库拉

  • 克里希纳赛2020

  • 莱昂纳多·弗雷阿 +

  • 莱昂纳多·陈

  • 谢良吉 +

  • 卢瓦克·迪里多卢 +

  • 洛伦佐·马菲奥利 +

  • 卢克·曼利 +

  • 登月+

  • 马克·加西亚

  • 马塞尔·比塔 +

  • 马塞尔·格伯 +

  • 马可·爱德华·戈雷利

  • 马可·戈雷利

  • 马可·戈雷利

  • 马文+

  • 马特乌斯·皮奥特罗斯基 +

  • 马蒂亚斯·豪瑟 +

  • 马特·理查兹 +

  • 马修·戴维斯 +

  • 马修·罗斯克

  • 马修·泽特林

  • 马蒂亚斯·布索尼耶

  • 马蒂·皮库斯

  • 毛罗·西尔伯伯格 +

  • 马克西姆·伊万诺夫

  • 马克西米利安·卡尔 +

  • 米塞克斯机器

  • 迈克尔·扎拉青 +

  • 迈克尔·王+

  • 米哈乌·戈尔尼 +

  • 迈克·冯 +

  • 迈克·塔夫斯 +

  • 穆罕默德·侯赛因·赖因 +

  • NJOKU OKECHUKWU 情人节 +

  • 尼尔·麦克伯内特 +

  • 尼克·安德森 +

  • 尼基塔·索博列夫 +

  • 奥利维尔·卡瓦迪蒂 +

  • 帕斯托尔+

  • 熊猫开发团队

  • 帕特里克·赫夫勒

  • 彼得

  • 彼得·蒂尔曼 +

  • 普拉巴·阿里瓦拉甘 +

  • 帕杜姆纳·拉胡尔

  • 普雷纳·查克拉博蒂

  • 普里特维吉特 +

  • 拉胡尔·盖克瓦德 +

  • 雷·贝尔

  • 里卡多·马丁斯 +

  • 理查德·沙德拉赫

  • 罗伯特-扬特霍恩 +

  • 罗伯特·沃耶 +

  • 罗宾·雷蒙德 +

  • 罗汉·夏尔马 +

  • 罗汉·西罗希亚 +

  • 罗曼·尤尔恰克

  • 阮·比勒陀利亚 +

  • 山姆·詹姆斯 +

  • 斯科特·塔尔伯特

  • 沙什瓦·夏尔马 +

  • 谢尔格拉27 +

  • 希夫·古普塔

  • 肖汉姆·德布纳斯

  • 西蒙·霍金斯

  • 苏米亚+

  • 斯坦·韦斯特 +

  • 斯蒂芬妮·莫林 +

  • 斯特凡诺·阿尔贝托·鲁索 +

  • 史蒂芬·赫塞尔曼

  • 斯蒂芬

  • 苏亚什·古普塔 +

  • 斯文

  • 天鹅堡01 +

  • 西尔万·玛丽 +

  • 劳夫

  • 塔尼亚·阿拉德 +

  • 特尔吉·彼得森

  • 衍生者+

  • 托马斯·迪克森

  • 托马斯·卡斯特尔 +

  • 托马斯·克鲁弗

  • 托马斯·李

  • 托马斯·史密斯

  • 蒂姆·斯瓦斯特

  • 蒂姆·特兰 +

  • 托拜厄斯·麦克纳尔蒂 +

  • 托比亚斯·皮特斯

  • 中川智树 +

  • 托尼·赫斯特 +

  • 托斯顿·沃特温

  • 六木+

  • 瓦伊巴夫 K +

  • 瓦伦丁·奥利弗·洛夫特森 +

  • 瓦伦·施里瓦斯塔瓦 +

  • 维韦克·塔扎塔提尔 +

  • 维姆·帕塔克

  • 司文俊

  • 威廉·安德烈 +

  • 威廉·布拉德利 +

  • 沃伊切赫·萨多夫斯基 +

  • 黄耀庆 +

  • 亚什·古普塔 +

  • 雅尼斯·哈吉查拉兰波斯 +

  • 吉树·巴斯克斯·巴埃萨

  • 耿元浩

  • 尤里·米哈伊洛夫

  • 伊万·盖特 +

  • 伊夫·戴利 +

  • 扎克·雷特

  • 兹比谢克·克罗利科夫斯基 +

  • 零+

  • 哲园

  • 吴志毅 +

  • 艾迪罗格

  • 阿里·萨亚+

  • 阿内什98 +

  • 阿普塔尔卡

  • 2019年+

  • 攻击68

  • 布兰德鲁里 +

  • 冒泡橡木 +

  • 卡尔文某事+

  • 爪子+

  • 德波诺沃 +

  • 迪克里斯蒂娜

  • el-g-1 +

  • 平顺+

  • 福蒂诺21 +

  • FSHI01+

  • GF康+

  • github-actions[机器人]

  • 我-秋-y

  • 杰布罗克门德尔

  • 杰雷巴克

  • 朱利安德温+

  • jxb4892+

  • 肯德尔·史密斯 +

  • 姆辛杜瓦 +

  • 伊雷皮通

  • 马克西米利安Akka多 +

  • 迈克尔-GH

  • 尼尔姆拉曼

  • 帕尔捷夫

  • 福尔+

  • 普拉秋沙兰 +

  • 量子阿拉维亚 +

  • 拉斐尔+

  • 真实领先

  • 罗卡布雷拉 +

  • 玫瑰金

  • 世熙黄+

  • 萨洛蒙杜什 +

  • 舒巴姆11941140 +

  • 斯里尼瓦桑 +

  • 斯蒂芬利德

  • 索尼克

  • 特雷沃卡斯克 +

  • 图书书

  • 强吉+

  • 用户阻止+

  • 韦尔内蒂亚+

  • 弗瑟尔帕+

  • 威利3838 +

  • 泽特林夫+

  • 张小星+