1.2.0 (2020年12月26日) 中的新功能#

以下是 pandas 1.2.0 中的更改。有关包括其他 pandas 版本在内的完整更新日志,请参阅发行说明

警告

用于写入旧式 .xls Excel 文件的 xlwt 包已不再维护。 xlrd 包现在仅用于读取旧式 .xls 文件。

此前,传递给 read_excel() 的默认参数 engine=None 在许多情况下将导致使用 xlrd 引擎,包括新的 Excel 2007+ (.xlsx) 文件。如果 openpyxl 已安装,则现在许多这些情况将默认使用 openpyxl 引擎。有关更多详细信息,请参阅 read_excel() 文档。

因此,强烈建议安装 openpyxl 以读取 Excel 2007+ (.xlsx) 文件。请勿在使用 xlrd 读取 .xlsx 文件时报告问题。此功能不再受支持,请改用 openpyxl

尝试使用 xlwt 引擎将引发一个 FutureWarning,除非将选项 io.excel.xls.writer 设置为 "xlwt"。尽管此选项现在已被弃用,并且也将引发一个 FutureWarning,但它可以全局设置并抑制警告。建议用户改用 openpyxl 引擎写入 .xlsx 文件。

增强功能#

可选地禁止重复标签#

SeriesDataFrame 现在可以使用 allows_duplicate_labels=False 标志来控制索引或列是否可以包含重复标签 (GH 28394)。这可以用于防止意外引入重复标签,因为重复标签可能会影响后续操作。

默认情况下,仍然允许重复项。

In [1]: pd.Series([1, 2], index=['a', 'a'])
Out[1]:
a    1
a    2
Length: 2, dtype: int64

In [2]: pd.Series([1, 2], index=['a', 'a']).set_flags(allows_duplicate_labels=False)
...
DuplicateLabelError: Index has duplicates.
      positions
label
a        [0, 1]

pandas 将通过许多操作传播 allows_duplicate_labels 属性。

In [3]: a = (
   ...:     pd.Series([1, 2], index=['a', 'b'])
   ...:       .set_flags(allows_duplicate_labels=False)
   ...: )

In [4]: a
Out[4]:
a    1
b    2
Length: 2, dtype: int64

# An operation introducing duplicates
In [5]: a.reindex(['a', 'b', 'a'])
...
DuplicateLabelError: Index has duplicates.
      positions
label
a        [0, 2]

[1 rows x 1 columns]

警告

这是一项实验性功能。目前,许多方法未能传播 allows_duplicate_labels 的值。在未来版本中,预计每个接受或返回一个或多个 DataFrame 或 Series 对象的方法都将传播 allows_duplicate_labels

有关重复标签的更多信息。

allows_duplicate_labels 标志存储在新的 DataFrame.flags 属性中。这存储了适用于 pandas 对象的全局属性。这与 DataFrame.attrs 不同,后者存储了适用于数据集的信息。

向 fsspec 后端传递参数#

许多读/写函数都增加了可选参数 storage_options,用于向存储后端传递参数字典。这例如允许将凭据传递给 S3 和 GCS 存储。可以向哪些后端传递哪些参数的详细信息可以在各个存储后端的文档中找到(从 fsspec 文档中详细介绍内置实现并链接到外部实现)。请参阅章节读/写远程文件

GH 35655 增加了 fsspec 支持(包括 storage_options)以读取 Excel 文件。

to_csv 中支持二进制文件句柄#

to_csv() 支持二进制模式的文件句柄 (GH 19827GH 35058),以及 encoding (GH 13068GH 23854) 和 compression (GH 22555)。如果 pandas 没有自动检测文件句柄是以二进制模式还是文本模式打开,则需要提供 mode="wb"

例如

In [1]: import io

In [2]: data = pd.DataFrame([0, 1, 2])

In [3]: buffer = io.BytesIO()

In [4]: data.to_csv(buffer, encoding="utf-8", compression="gzip")

to_latex 中支持短标题和表格位置#

DataFrame.to_latex() 现在允许指定浮动表格位置 (GH 35281) 和短标题 (GH 36267)。

已添加关键词 position 以设置位置。

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

In [6]: table = data.to_latex(position='ht')

In [7]: print(table)
\begin{table}[ht]
\begin{tabular}{lrr}
\toprule
 & a & b \\
\midrule
0 & 1 & 3 \\
1 & 2 & 4 \\
\bottomrule
\end{tabular}
\end{table}

关键词 caption 已扩展使用范围。除了接受单个字符串作为参数外,还可以选择提供一个元组 (full_caption, short_caption) 来添加短标题宏。

In [8]: data = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})

In [9]: table = data.to_latex(caption=('the full long caption', 'short caption'))

In [10]: print(table)
\begin{table}
\caption[short caption]{the full long caption}
\begin{tabular}{lrr}
\toprule
 & a & b \\
\midrule
0 & 1 & 3 \\
1 & 2 & 4 \\
\bottomrule
\end{tabular}
\end{table}

更改了 read_csvread_table 的默认浮点精度#

对于 C 语言解析引擎,read_csv()read_table() 方法以前默认使用一个解析器,该解析器在读取浮点数时,在精度上可能会出现最后一位的轻微不准确。选项 floating_precision="high" 始终可用以避免此问题。从本版本开始,默认设置是使用更精确的解析器,即让 floating_precision=None 对应高精度解析器,并新增选项 floating_precision="legacy" 以使用旧版解析器。默认使用更高精度解析器的更改对性能没有影响。( GH 17154)

浮点数据的新增可空数据类型#

我们添加了 Float32Dtype / Float64DtypeFloatingArray。这些是专门用于浮点数据的扩展数据类型,可以存储 pd.NA 缺失值指示器 (GH 32265, GH 34307)。

虽然默认的浮点数据类型已经支持使用 np.nan 表示缺失值,但这些新数据类型使用 pd.NA(及其相应的行为)作为缺失值指示器,与已有的可空整型布尔型数据类型保持一致。

np.nanpd.NA 行为不同的一个例子是比较操作。

# the default NumPy float64 dtype
In [11]: s1 = pd.Series([1.5, None])

In [12]: s1
Out[12]: 
0    1.5
1    NaN
Length: 2, dtype: float64

In [13]: s1 > 1
Out[13]: 
0     True
1    False
Length: 2, dtype: bool
# the new nullable float64 dtype
In [14]: s2 = pd.Series([1.5, None], dtype="Float64")

In [15]: s2
Out[15]: 
0     1.5
1    <NA>
Length: 2, dtype: Float64

In [16]: s2 > 1
Out[16]: 
0    True
1    <NA>
Length: 2, dtype: boolean

有关使用 pd.NA 缺失值指示器时的更多行为细节,请参见NA 语义文档部分。

如上所示,数据类型可以使用“Float64”或“Float32”字符串(大写以与默认的“float64”数据类型区分)指定。此外,您也可以使用数据类型对象。

In [17]: pd.Series([1.5, None], dtype=pd.Float32Dtype())
Out[17]: 
0     1.5
1    <NA>
Length: 2, dtype: Float32

与现有整型或布尔型可空数据类型进行操作,如果结果是浮点型,现在也将使用可空浮点数据类型 (GH 38178)。

警告

实验性:新的浮点数据类型目前是实验性的,其行为或 API 仍可能在没有警告的情况下发生变化。特别是关于 NaN(与 NA 缺失值不同)的行为可能会发生变化。

聚合时保留索引/列名#

当使用 concat()DataFrame 构造函数进行聚合时,pandas 现在将尽可能尝试保留索引和列名 (GH 35847)。如果所有输入共享一个共同的名称,该名称将分配给结果。当输入名称不一致时,结果将是未命名的。以下是一个保留索引名称的示例。

In [18]: idx = pd.Index(range(5), name='abc')

In [19]: ser = pd.Series(range(5, 10), index=idx)

In [20]: pd.concat({'x': ser[1:], 'y': ser[:-1]}, axis=1)
Out[20]: 
       x    y
abc          
1    6.0  6.0
2    7.0  7.0
3    8.0  8.0
4    9.0  NaN
0    NaN  5.0

[5 rows x 2 columns]

MultiIndex 也是如此,但逻辑是按级别单独应用的。

GroupBy 直接支持 EWM 操作#

DataFrameGroupBy 现在直接支持指数加权窗口操作 (GH 16037)。

In [21]: df = pd.DataFrame({'A': ['a', 'b', 'a', 'b'], 'B': range(4)})

In [22]: df
Out[22]: 
   A  B
0  a  0
1  b  1
2  a  2
3  b  3

[4 rows x 2 columns]

In [23]: df.groupby('A').ewm(com=1.0).mean()
Out[23]: 
            B
A            
a 0  0.000000
  2  1.333333
b 1  1.000000
  3  2.333333

[4 rows x 1 columns]

此外,mean 支持通过 Numba 执行,并带有 engineengine_kwargs 参数。要使用此功能,必须安装 Numba 作为可选依赖项。

其他增强功能#

显著的错误修复#

这些错误修复可能会导致显著的行为变化。

DataFrame 归约的一致性#

DataFrame.any()DataFrame.all()bool_only=True 的情况下,现在会逐列判断是否排除对象数据类型列,而不是检查所有对象数据类型列是否都可以被视为布尔值。

这避免了在列子集上应用归约可能导致更大的 Series 结果的病态行为。参见 (GH 37799)。

In [24]: df = pd.DataFrame({"A": ["foo", "bar"], "B": [True, False]}, dtype=object)

In [25]: df["C"] = pd.Series([True, True])

以前的行为:

In [5]: df.all(bool_only=True)
Out[5]:
C    True
dtype: bool

In [6]: df[["B", "C"]].all(bool_only=True)
Out[6]:
B    False
C    True
dtype: bool

新的行为:

In [26]: In [5]: df.all(bool_only=True)
Out[26]: 
C    True
Length: 1, dtype: bool

In [27]: In [6]: df[["B", "C"]].all(bool_only=True)
Out[27]: 
C    True
Length: 1, dtype: bool

其他带有 numeric_only=None 的 DataFrame 归约也将避免这种病态行为 (GH 37827)

In [28]: df = pd.DataFrame({"A": [0, 1, 2], "B": ["a", "b", "c"]}, dtype=object)

以前的行为:

In [3]: df.mean()
Out[3]: Series([], dtype: float64)

In [4]: df[["A"]].mean()
Out[4]:
A    1.0
dtype: float64

新的行为:

In [3]: df.mean()
Out[3]:
A    1.0
dtype: float64

In [4]: df[["A"]].mean()
Out[4]:
A    1.0
dtype: float64

此外,带有 numeric_only=None 的 DataFrame 归约现在将与其 Series 对应项保持一致。特别是,对于 Series 方法引发 TypeError 的归约,DataFrame 归约现在将把该列视为非数字,而不是强制转换为 NumPy 数组,这可能会有不同的语义 (GH 36076, GH 28949, GH 21020)。

In [29]: ser = pd.Series([0, 1], dtype="category", name="A")

In [30]: df = ser.to_frame()

以前的行为:

In [5]: df.any()
Out[5]:
A    True
dtype: bool

新的行为:

In [5]: df.any()
Out[5]: Series([], dtype: bool)

Python 最低版本要求提升#

pandas 1.2.0 支持 Python 3.7.1 及更高版本 (GH 35214)。

依赖项最低版本要求提升#

一些依赖项的最低支持版本已更新 (GH 35214)。如果已安装,我们现在要求:

软件包

最低版本

必需

已更改

numpy

1.16.5

X

X

pytz

2017.3

X

X

python-dateutil

2.7.3

X

bottleneck

1.2.1

numexpr

2.6.8

X

pytest (开发)

5.0.1

X

mypy (开发)

0.782

X

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

软件包

最低版本

已更改

beautifulsoup4

4.6.0

fastparquet

0.3.2

fsspec

0.7.4

gcsfs

0.6.0

lxml

4.3.0

X

matplotlib

2.2.3

X

numba

0.46.0

openpyxl

2.6.0

X

pyarrow

0.15.0

X

pymysql

0.7.11

X

pytables

3.5.1

X

s3fs

0.4.0

scipy

1.2.0

sqlalchemy

1.2.8

X

xarray

0.12.3

X

xlrd

1.2.0

X

xlsxwriter

1.0.2

X

xlwt

1.3.0

X

pandas-gbq

0.12.0

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

其他 API 变更#

  • 对于 Datetime 类的 Index 子类,Series.sort_values()Index.sort_values() 的降序排序现在是稳定的。这将影响 DataFrame 在多列上排序、使用产生重复值的键函数排序,或在使用 Index.sort_values() 时请求排序索引时的排序顺序。在使用 Series.value_counts() 时,缺失值的计数不再一定排在重复计数列表的最后。相反,其位置与原始 Series 中的位置相对应。在使用 Index.sort_values() 对 Datetime 类的 Index 子类进行排序时,NaT 值会忽略 na_position 参数并被排序到开头。现在它们会遵循 na_position,默认值为 last,与其他的 Index 子类相同 (GH 35992)

  • 将无效的 fill_value 传递给 Categorical.take(), DatetimeArray.take(), TimedeltaArray.take(), 或 PeriodArray.take() 现在会引发 TypeError 而不是 ValueError (GH 37733)

  • 将无效的 fill_value 传递给具有 CategoricalDtypeSeries.shift() 现在会引发 TypeError 而不是 ValueError (GH 37733)

  • 将无效值传递给 IntervalIndex.insert()CategoricalIndex.insert() 现在会引发 TypeError 而不是 ValueError (GH 37733)

  • 尝试使用无效的 fill_value 对带有 CategoricalIndex 的 Series 进行重新索引,现在会引发 TypeError 而不是 ValueError (GH 37733)

  • CategoricalIndex.append() 当索引包含非类别值时,现在将进行转换而不是引发 TypeError (GH 38098)

弃用#

  • MultiIndex.set_codes()MultiIndex.set_levels() 中,参数 inplace 已弃用 (GH 35626)

  • 所有 Index 子类的 copy() 方法的 dtype 参数已弃用。请改用 astype() 方法来更改数据类型 (GH 35853)

  • MultiIndex.copy() 中的 levelscodes 参数已弃用。请改用 set_levels()set_codes() 方法 (GH 36685)

  • pandas.io.date_converters 中的日期解析函数 parse_date_time()parse_date_fields()parse_all_fields()generic_parser() 已弃用,并将在未来版本中移除;请改用 to_datetime() (GH 35741)

  • DataFrame.lookup() 已弃用,并将在未来版本中移除;请改用 DataFrame.melt()DataFrame.loc() (GH 35224)

  • 方法 Index.to_native_types() 已弃用。请改用 .astype(str) (GH 28867)

  • 弃用使用单个 datetime 字符串作为 df[string] 索引 DataFrame 行的用法(考虑到它是索引行还是选择列的歧义),请改用 df.loc[string] (GH 36179)

  • 弃用 Index.is_all_dates() (GH 27744)

  • Series.str.replace()regex 默认值将在未来版本中从 True 更改为 False。此外,当设置 regex=True 时,单字符正则表达式将被视为字面字符串 (GH 24804)

  • 弃用 DataFrameSeries 之间比较操作的自动对齐,请在执行 frame == ser 之前先执行 frame, ser = frame.align(ser, axis=1, copy=False) (GH 28759)

  • Rolling.count() 在未来版本中,当 min_periods=None 时将默认为窗口大小 (GH 31302)

  • 在 DataFrames 上使用“outer” ufuncs 返回 4d ndarray 的功能现已弃用。请先转换为 ndarray (GH 23743)

  • 弃用带有时区信息的 DatetimeIndex 与不带时区信息的 datetime 对象进行切片索引,以匹配标量索引行为 (GH 36148)

  • Index.ravel() 返回 np.ndarray 已弃用,未来将返回同一索引的视图 (GH 19956)

  • to_timedelta() 中,使用带“M”、“Y”或“y”的字符串表示单位已弃用 (GH 36666)

  • Index 方法 &, |, 和 ^ 作为集合操作 Index.intersection(), Index.union(), 和 Index.symmetric_difference() 的行为已弃用,未来将作为逐点布尔操作,与 Series 行为一致。请改用命名的集合方法 (GH 36758)

  • Categorical.is_dtype_equal()CategoricalIndex.is_dtype_equal() 已弃用,将在未来版本中移除 (GH 37545)

  • Series.slice_shift()DataFrame.slice_shift() 已弃用,请改用 Series.shift()DataFrame.shift() (GH 37601)

  • 对无序的 DatetimeIndex 对象进行键不在索引中的部分切片已弃用,并将在未来版本中移除 (GH 18531)

  • PeriodIndex.astype() 中的 how 关键字已弃用,并将在未来版本中移除,请改用 index.to_timestamp(how=how) (GH 37982)

  • 对于 Index 子类(除了 DatetimeIndex, TimedeltaIndex, 和 PeriodIndex),Index.asi8() 已弃用 (GH 37877)

  • Categorical.remove_unused_categories()inplace 参数已弃用,并将在未来版本中移除 (GH 37643)

  • DataFrame.info()null_counts 参数已弃用,并由 show_counts 取代。它将在未来版本中移除 (GH 37999)

在不对齐的 DataFrames 上调用 NumPy ufuncs

在不对齐的 DataFrames 上调用 NumPy ufuncs 的行为在 pandas 1.2.0 中发生了变化(在调用 ufunc 之前对输入进行对齐),但此更改在 pandas 1.2.1 中已恢复。不对齐的行为现在已被弃用,更多详情请参阅 1.2.1 版本说明

性能改进#

错误修复#

类别型#

  • Categorical.fillna() 将始终返回一个副本,无论是否有 NA 值需要填充,都会验证传入的填充值,并禁止将 NaT 作为数字类别的填充值 (GH 36530)

  • Categorical.__setitem__() 中存在的错误,当尝试设置元组值时,会错误地引发异常 (GH 20439)

  • CategoricalIndex.equals() 中的一个错误,它错误地将非类别条目转换为 np.nan (GH 37667)

  • CategoricalIndex.where() 中的一个错误,它错误地将非类别条目设置为 np.nan 而不是引发 TypeError (GH 37977)

  • Categorical.to_numpy()np.array(categorical) 在处理带时区信息的 datetime64 类别时存在的错误,错误地丢弃了时区信息,而不是转换为对象数据类型 (GH 38136)

日期时间类#

  • DataFrame.combine_first() 中存在的错误,当列在原始 DataFrame 中不存在时,会将其他 DataFrame 中的日期时间类列转换为整数 (GH 28481)

  • DatetimeArray.date 中存在的错误,当后台数组为只读时,会引发 ValueError (GH 33530)

  • NaT 比较中的一个错误,在无效的不等式比较时未能引发 TypeError (GH 35046)

  • DateOffset 中的一个错误,当输入值超出正常范围(例如 months=12)时,从 pickle 文件重建的属性与原始对象不同 (GH 34511)

  • DatetimeIndex.get_slice_bound() 中存在一个错误,它不接受 datetime.date 对象,或者带有 tz-aware DatetimeIndex 的 naive Timestamp (GH 35690)

  • DatetimeIndex.slice_locs() 中存在一个错误,它不接受 datetime.date 对象 (GH 34077)

  • DatetimeIndex.searchsorted()TimedeltaIndex.searchsorted()PeriodIndex.searchsorted()Series.searchsorted() 在处理 datetime64timedelta64Period 数据类型时,NaT 值的放置与 NumPy 不一致 (GH 36176, GH 36254)

  • DatetimeArrayTimedeltaArrayPeriodArray 方法 __setitem__ 中存在不一致性,它会将字符串数组转换为 datetime 标量,但不转换标量字符串 (GH 36261)

  • DatetimeArray.take() 中存在的错误,错误地允许 fill_value 具有不匹配的时区 (GH 37356)

  • DatetimeIndex.shift 中的一个错误,当移动空索引时会错误地引发异常 (GH 14811)

  • TimestampDatetimeIndex 在比较带时区和不带时区对象时,现在遵循标准库 datetime 的行为,对于 !=/== 返回 True/False,对于不等式比较则引发异常 (GH 28507)

  • DatetimeIndex.equals()TimedeltaIndex.equals() 中存在的错误,错误地将 int64 索引视为相等 (GH 36744)

  • Series.to_json()DataFrame.to_json()read_json() 现在在 orient 结构为 table 时实现时区解析 (GH 35973)

  • astype() 现在尝试直接将 object 转换为 datetime64[ns, tz],并从字符串推断时区 (GH 35973)

  • TimedeltaIndex.sum()Series.sum() 在空索引或序列上返回 timedelta64 数据类型时,返回 NaT 而不是 Timedelta(0) 的错误 (GH 31751)

  • DatetimeArray.shift() 中存在的错误,错误地允许 fill_value 具有不匹配的时区 (GH 37299)

  • 添加具有非零 offsetBusinessDay 到非标量其他对象时出现错误 (GH 37457)

  • to_datetime() 在处理只读数组时错误地引发异常 (GH 34857)

  • Series.isin() 中存在缺陷,当使用 datetime64[ns] dtype 和 DatetimeIndex.isin() 时,会错误地将整数转换为日期时间 (GH 36621)

  • Series.isin() 中存在缺陷,当使用 datetime64[ns] dtype 和 DatetimeIndex.isin() 时,未能将时区感知和时区无关的日期时间始终视为不同 (GH 35728)

  • Series.isin() 中存在缺陷,当使用 PeriodDtype dtype 和 PeriodIndex.isin() 时,未能将具有不同 PeriodDtype 的参数始终视为不同 (GH 37528)

  • 修复了 Period 构造函数中的缺陷,现在能正确处理 value 参数中的纳秒 (GH 34621GH 17053)

Timedelta#

时区#

数值#

  • to_numeric() 中存在缺陷,导致浮点精度不正确 (GH 31364)

  • DataFrame.any() 中存在缺陷,当 axis=1bool_only=True 时,会忽略 bool_only 关键字 (GH 32432)

  • Series.equals() 中存在缺陷,当 NumPy 数组与标量进行比较时会引发 ValueError (GH 35267)

  • Series 中存在缺陷,当两个 Series 各自拥有带有不同时区的 DatetimeIndex 时,执行算术运算会导致这些索引被错误更改 (GH 33671)

  • pandas.testing 模块函数中存在缺陷,当与 check_exact=False 用于复数数值类型时 (GH 28235)

  • DataFrame.__rmatmul__() 错误处理中存在缺陷,报告了转置的形状 (GH 21581)

  • Series 灵活算术方法中存在缺陷,当与 listtuplenp.ndarray 进行操作时,结果会有一个不正确的名称 (GH 36760)

  • IntegerArraytimedeltanp.timedelta64 对象进行乘法运算时存在缺陷 (GH 36870)

  • MultiIndex 与元组进行比较时存在缺陷,错误地将元组视为类数组 (GH 21517)

  • DataFrame.diff() 中存在缺陷,当 datetime64 dtypes 包含 NaT 值时,未能正确填充 NaT 结果 (GH 32441)

  • DataFrame 算术操作中存在缺陷,错误地接受了关键字参数 (GH 36843)

  • IntervalArraySeries 进行比较时存在缺陷,未返回 Series (GH 36908)

  • DataFrame 中存在缺陷,允许对类数组列表进行算术运算,结果未定义。行为已更改为引发 ValueError (GH 36702)

  • DataFrame.std() 中存在缺陷,当使用 timedelta64 dtype 和 skipna=False 时 (GH 37392)

  • DataFrame.min()DataFrame.max() 中存在缺陷,当使用 datetime64 dtype 和 skipna=False 时 (GH 36907)

  • DataFrame.idxmax()DataFrame.idxmin() 中存在缺陷,当使用混合 dtypes 时错误地引发 TypeError (GH 38195)

转换#

  • DataFrame.to_dict() 中存在缺陷,当 orient='records' 时,现在会为日期时间类型列返回 Python 原生日期时间对象 (GH 21256)

  • Series.astype() 中存在缺陷,当存在 pd.NA 值时,从 stringfloat 的转换会引发异常 (GH 37626)

字符串#

区间#

  • DataFrame.replace()Series.replace() 中存在缺陷,导致 Interval dtypes 会被转换为 object dtypes (GH 34871)

  • IntervalIndex.take() 中存在缺陷,当使用负索引和 fill_value=None 时 (GH 37330)

  • IntervalIndex.putmask() 中存在缺陷,当使用日期时间类型 dtype 时,会错误地转换为 object dtype (GH 37968)

  • IntervalArray.astype() 中存在缺陷,当使用 CategoricalDtype 对象时,会错误地丢弃 dtype 信息 (GH 37984)

索引#

缺失值#

MultiIndex#

I/O#

Period#

绘图#

Styler#

  • Styler.render() 中存在缺陷,由于 rowspan 属性的格式错误导致 HTML 生成不正确,现在它与 w3 语法匹配 (GH 38234)

分组/重采样/滚动#

重塑#

  • DataFrame.crosstab() 中存在一个错误,即在输入具有重复行名、重复列名或行标签和列标签之间存在重复名称时返回不正确的结果 (GH 22529)

  • DataFrame.pivot_table() 中存在一个错误,即当以 Categorical 进行透视时,aggfunc='count'aggfunc='sum' 对于缺失类别返回 NaN。现在返回 0 (GH 31422)

  • concat()DataFrame 构造函数中存在一个错误,即在某些情况下未保留输入索引名称 (GH 13475)

  • 在函数 crosstab() 中存在一个错误,即在使用多列并设置 margins=Truenormalize=True 时 (GH 35144)

  • DataFrame.stack() 中存在一个错误,即空的 DataFrame.stack 会引发错误 (GH 36113)。现在返回一个带空 MultiIndex 的空 Series。

  • Series.unstack() 中存在一个错误。现在,具有单级索引的 Series 在尝试 unstack 时会引发 ValueError (GH 36113)

  • DataFrame.agg() 中存在一个错误,即当 DataFrame.columns==['Name'] 时,使用 func={'name':<FUNC>} 会错误地引发 TypeError (GH 36212)

  • Series.transform() 中存在一个错误,即当参数 func 为字典时,会给出不正确的结果或引发错误 (GH 35811)

  • DataFrame.pivot() 中存在一个错误,即当行和列都具有多级索引时,未保留列的 MultiIndex 级别名称 (GH 36360)

  • DataFrame.pivot() 中存在一个错误,即当传递 columns 但未传递 values 时,会修改 index 参数 (GH 37635)

  • DataFrame.join() 中存在一个错误,即返回的 MultiIndex 的级别顺序不确定 (GH 36910)

  • DataFrame.combine_first() 中存在一个错误,即当 dtype 为 stringMultiIndex 的一个级别仅包含 NA 时,会导致错误的对齐 (GH 37591)

  • 修复了 merge() 在合并 DatetimeIndex 与空 DataFrame 时的回归问题 (GH 36895)

  • DataFrame.apply() 中存在一个错误,即当 func 返回类型为 dict 时,未设置返回值的索引 (GH 37544)

  • DataFrame.merge()pandas.merge() 中存在一个错误,即当 how=righthow=left 时,返回结果的顺序不一致 (GH 35382)

  • merge_ordered() 中存在一个错误,即无法处理列表式的 left_byright_by (GH 35269)

  • merge_ordered() 中存在一个错误,即当 left_byright_by 的长度等于 leftright 的行数时,返回错误的连接结果 (GH 38166)

  • merge_ordered() 中存在一个错误,即当 left_byright_by 中的元素不存在于 left 列或 right 列中时,未引发错误 (GH 38167)

  • DataFrame.drop_duplicates() 中存在一个错误,即未验证 ignore_index 关键字的布尔 dtype (GH 38274)

扩展数组#

其他#

贡献者#

共有 257 人为本次发布贡献了补丁。名字旁有“+”号的人是首次贡献补丁。

  • 21CSM +

  • AbdulMAbdi +

  • Abhiraj Hinge +

  • Abhishek Mangla +

  • Abo7atm +

  • Adam Spannbauer +

  • Albert Villanova del Moral

  • Alex Kirko

  • Alex Lim +

  • Alex Thorne +

  • Aleš Erjavec +

  • Ali McMaster

  • Amanda Dsouza +

  • Amim Knabben +

  • Andrew Wieteska

  • Anshoo Rajput +

  • Anthony Milbourne

  • Arun12121 +

  • Asish Mahapatra

  • Avinash Pancham +

  • BeanNan +

  • Ben Forbes +

  • Brendan Wilby +

  • Bruno Almeida +

  • Byron Boulton +

  • Chankey Pathak

  • Chris Barnes +

  • Chris Lynch +

  • Chris Withers

  • Christoph Deil +

  • Christopher Hadley +

  • Chuanzhu Xu

  • Coelhudo +

  • Dan Moore

  • Daniel Saxton

  • David Kwong +

  • David Li +

  • David Mrva +

  • Deepak Pandey +

  • Deepyaman Datta

  • Devin Petersohn

  • Dmitriy Perepelkin +

  • Douglas Hanley +

  • Dāgs Grīnbergs +

  • Eli Treuherz +

  • Elliot Rampono +

  • Erfan Nariman

  • Eric Goddard

  • Eric Leung +

  • Eric Wieser

  • Ethan Chen +

  • Eve +

  • Eyal Trabelsi +

  • Fabian Gebhart +

  • Fangchen Li

  • Felix Claessen +

  • Finlay Maguire +

  • Florian Roscheck +

  • Gabriel Monteiro

  • Gautham +

  • Gerard Jorgensen +

  • Gregory Livschitz

  • Hans

  • Harsh Sharma

  • Honfung Wong +

  • Igor Gotlibovych +

  • Iqrar Agalosi Nureyza

  • Irv Lustig

  • Isaac Virshup

  • Jacob Peacock

  • Jacob Stevens-Haas +

  • Jan Müller +

  • Janus

  • Jeet Parekh

  • Jeff Hernandez +

  • Jeff Reback

  • Jiaxiang

  • Joao Pedro Berno Zanutto +

  • Joel Nothman

  • Joel Whittier +

  • John Karasinski +

  • John McGuigan +

  • Johnny Pribyl +

  • Jonas Laursen +

  • Jonathan Shreckengost +

  • Joris Van den Bossche

  • Jose +

  • JoseNavy +

  • Josh Temple +

  • Jun Kudo +

  • Justin Essert

  • Justin Sexton +

  • Kaiqi Dong

  • Kamil Trocewicz +

  • Karthik Mathur

  • Kashif +

  • Kenny Huynh

  • Kevin Sheppard

  • Kumar Shivam +

  • Leonardus Chen +

  • Levi Matus +

  • Lucas Rodés-Guirao +

  • Luis Pinto +

  • Lynch +

  • Marc Garcia

  • Marco Gorelli

  • Maria-Alexandra Ilie +

  • Marian Denes

  • Mark Graham +

  • Martin Durant

  • Matt Roeschke

  • Matthew Roeschke

  • Matthias Bussonnier

  • Maxim Ivanov +

  • Mayank Chaudhary +

  • MeeseeksMachine

  • Meghana Varanasi +

  • Metehan Kutlu +

  • Micael Jarniac +

  • Micah Smith +

  • Michael Marino

  • Miroslav Šedivý

  • Mohammad Jafar Mashhadi

  • Mohammed Kashif +

  • Nagesh Kumar C +

  • Nidhi Zare +

  • Nikhil Choudhary +

  • Number42

  • Oleh Kozynets +

  • OlivierLuG

  • Pandas Development Team

  • Paolo Lammens +

  • Paul Ganssle

  • Pax +

  • Peter Liu +

  • Philip Cerles +

  • Pranjal Bhardwaj +

  • Prayag Savsani +

  • Purushothaman Srikanth +

  • Qbiwan +

  • Rahul Chauhan +

  • Rahul Sathanapalli +

  • Rajat Bishnoi +

  • Ray Bell

  • Reshama Shaikh +

  • Richard Shadrach

  • Robert Bradshaw

  • Robert de Vries

  • Rohith295

  • S Mono +

  • S.TAKENO +

  • Sahid Velji +

  • Sam Cohen +

  • Sam Ezebunandu +

  • Sander +

  • Sarthak +

  • Sarthak Vineet Kumar +

  • Satrio H Wicaksono +

  • Scott Lasley

  • Shao Yang Hong +

  • Sharon Woo +

  • Shubham Mehra +

  • Simon Hawkins

  • Sixuan (Cherie) Wu +

  • Souris Ash +

  • Steffen Rehberg

  • Suvayu Ali

  • Sven

  • SylvainLan +

  • T. JEGHAM +

  • Terji Petersen

  • Thomas Dickson +

  • Thomas Heavey +

  • Thomas Smith

  • Tobias Pitters

  • Tom Augspurger

  • Tomasz Sakrejda +

  • Torsten Wörtwein +

  • Ty Mick +

  • UrielMaD +

  • Uwe L. Korn

  • Vikramaditya Gaonkar +

  • VirosaLi +

  • W.R +

  • Warren White +

  • Wesley Boelrijk +

  • William Ayd

  • Yanxian Lin +

  • Yassir Karroum +

  • Yong Kai Yi +

  • Yuanhao Geng +

  • Yury Mikhaylov +

  • Yutaro Ikeda

  • Yuya Takashina +

  • Zach Brookler +

  • Zak Kohler +

  • ZhihuiChen0903 +

  • abmyii

  • alexhtn +

  • asharma13524 +

  • attack68

  • beanan +

  • chinhwee

  • cleconte987

  • danchev +

  • ebardie +

  • edwardkong

  • elliot rampono +

  • estasney +

  • gabicca

  • geetha-rangaswamaiah +

  • gfyoung

  • guru kiran

  • hardikpnsp +

  • icanhazcodeplz +

  • ivanovmg +

  • jbrockmendel

  • jeschwar

  • jnecus

  • joooeey +

  • junk +

  • krajatcl +

  • lacrosse91 +

  • leo +

  • lpkirwin +

  • lrjball

  • lucasrodes +

  • ma3da +

  • mavismonica +

  • mlondschien +

  • mzeitlin11 +

  • nguevara +

  • nrebena

  • parkdj1 +

  • partev

  • patrick

  • realead

  • rxxg +

  • samilAyoub +

  • sanderland

  • shawnbrown

  • sm1899 +

  • smartvinnetou

  • ssortman +

  • steveya +

  • taytzehao +

  • tiagohonorato +

  • timhunderwood

  • tkmz-n +

  • tnwei +

  • tpanza +

  • vineethraj510 +

  • vmdhhh +

  • xinrong-databricks +

  • yonas kassa +

  • yonashub +

  • Ádám Lippai +