1.5.1 版本的新变化 (2022 年 10 月 19 日)#

以下是 pandas 1.5.1 版本中的变更。请参阅 发布说明,以获取包括其他 pandas 版本在内的完整变更日志。

使用分类群组键的 groupby 行为 (GH 48645)#

在 pandas 1.5 版本之前,当分组键为分类 dtype 时,使用 groupby 并设置 dropna=False 仍然会删除 NA 值。在 1.5 版本中尝试修复此问题,但这引入了一个回归,即向 groupby 传递 observed=Falsedropna=False 会导致仅显示观察到的类别。发现修复 dropna=False 错误补丁与 observed=False 不兼容,因此决定最好的解决方案是恢复正确的 observed=False 行为,代价是重新引入 dropna=False 错误。

In [1]: df = pd.DataFrame(
   ...:     {
   ...:         "x": pd.Categorical([1, None], categories=[1, 2, 3]),
   ...:         "y": [3, 4],
   ...:     }
   ...: )
   ...: 

In [2]: df
Out[2]: 
     x  y
0    1  3
1  NaN  4

1.5.0 行为:

In [3]: # Correct behavior, NA values are not dropped
        df.groupby("x", observed=True, dropna=False).sum()
Out[3]:
     y
x
1    3
NaN  4


In [4]: # Incorrect behavior, only observed categories present
        df.groupby("x", observed=False, dropna=False).sum()
Out[4]:
     y
x
1    3
NaN  4

1.5.1 行为:

# Incorrect behavior, NA values are dropped
In [3]: df.groupby("x", observed=True, dropna=False).sum()
Out[3]: 
     y
x     
1    3
NaN  4

# Correct behavior, unobserved categories present (NA values still dropped)
In [4]: df.groupby("x", observed=False, dropna=False).sum()
Out[4]: 
     y
x     
1    3
2    0
3    0
NaN  4

已修复的回归#

  • 修复了 Series.__setitem__() 回归,该回归会将对象 dtype 的 None 强制转换为 NaN (GH 48665)

  • 修复了 DataFrame.loc() 在使用全为 True 的索引器将值设置为 DataFrame 时的回归 (GH 48701)

  • 修复了 read_csv() 在使用已读取过的 UTF-8 文件句柄时会导致 EmptyDataError 的回归 (GH 48646)

  • 修复了 to_datetime()utc=Truearg 包含时区无关和有时区信息的参数时会引发 ValueError 的回归 (GH 48678)

  • 修复了 DataFrame.loc() 在设置空 DataFrame 时会引发 FutureWarning 的回归 (GH 48480)

  • 修复了 DataFrame.describe() 在结果包含 NA 时会引发 TypeError 的回归 (GH 48778)

  • 修复了 DataFrame.plot()kind="scatter" 时会忽略无效 colormap 的回归 (GH 48726)

  • 修复了 MultiIndex.values() 会重置底层 Index 对象的 freq 属性的回归 (GH 49054)

  • 修复了 factorize()na_sentinel 不是 Nonesort=False 时的性能回归 (GH 48620)

  • 修复了 DataFrame.to_sql() 在提供的表名与数据库中实际使用的表名不匹配时发出警告期间会导致 AttributeError 的回归 (GH 48733)

  • 修复了 to_datetime()arg 是带有纳秒的日期字符串且 format 包含 %f 时会引发 ValueError 的回归 (GH 48767)

  • 修复了 testing.assert_frame_equal() 在处理包含 Categorical 且设置了 check_like=TrueMultiIndex 时会引发异常的回归 (GH 48975)

  • 修复了 DataFrame.fillna() 在处理 datetime64[ns] dtype 且设置了 inplace=True 时替换错误值的回归 (GH 48863)

  • 修复了 DataFrameGroupBy.size()axis=1 时不返回 Series 的问题 (GH 48738)

  • 修复了 DataFrameGroupBy.apply() 在用户定义函数被空 dataframe 调用时的回归 (GH 47985)

  • 修复了 DataFrame.apply() 在通过关键字参数传递非零 axis 时的回归 (GH 48656)

  • 修复了 Series.groupby()DataFrame.groupby() 在分组键为可空数据类型(如 Int64)或 PyArrow 支持的字符串数组,包含空值,且设置了 dropna=False 时的回归 (GH 48794)

  • 修复了 Series.isin() 在 dtype 不匹配时的性能回归 (GH 49162)

  • 修复了 DataFrame.to_parquet() 在文件名指定为 bytes 时会引发异常的回归 (GH 48944)

  • 修复了 ExcelWriter 的回归,其中 book 属性不再能被设置;但现在设置此属性已被弃用,此功能将在未来的 pandas 版本中移除 (GH 48780)

  • 修复了 DataFrame.corrwith() 在使用 method="spearman" 计算并列数据的相关性时的回归 (GH 48826)

错误修复#

  • 修复了 Series.__getitem__() 在整数键和布尔值 Index 时未能回退到位置索引的错误 (GH 48653)

  • 修复了 DataFrame.to_hdf() 在布尔索引时会引发 AssertionError 的错误 (GH 48667)

  • 修复了 testing.assert_index_equal() 在处理带有不匹配 NA 的扩展数组时会引发 ValueError 的错误 (GH 48608)

  • 修复了 DataFrame.pivot_table() 在将日期时间列设置为索引时会引发意外 FutureWarning 的错误 (GH 48683)

  • 修复了 DataFrame.sort_values() 在处理带有布尔稀疏列的 DataFrame 时会发出不必要 FutureWarning 的错误 (GH 48784)

  • 修复了 arrays.ArrowExtensionArray 在与无效对象进行比较操作时不会引发 NotImplementedError 的错误 (GH 48833)

其他#

  • 避免在内省函数时,对于参数即将变为仅限关键字的警告,显示已弃用的签名 (GH 48692)

贡献者#

共有 16 位贡献者为本次发布贡献了补丁。名字旁带有“+”的人是首次贡献补丁。

  • Amay Patel +

  • Deepak Sirohiwal +

  • Dennis Chukwunta

  • Gaurav Sheni

  • Himanshu Wagh +

  • Lorenzo Vainigli +

  • Marc Garcia

  • Marco Edward Gorelli

  • Matthew Roeschke

  • MeeseeksMachine

  • Noa Tamir

  • Pandas 开发团队

  • Patrick Hoefler

  • Richard Shadrach

  • Shantanu

  • Torsten Wörtwein