You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas.cut()含pandas.NA抛出TypeError的原因咨询

为什么pandas.cut传入含pandas.NA的数据会抛出TypeError?

问题代码

import pandas
pandas.cut(x=[1, 2, pandas.NA, 4, 5, 6, 7], bins=3)

错误信息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/.local/lib/python3.9/site-packages/pandas/core/reshape/tile.py", line 293, in cut
    fac, bins = _bins_to_cuts(
  File "/home/user/.local/lib/python3.9/site-packages/pandas/core/reshape/tile.py", line 428, in _bins_to_cuts
    ids = ensure_platform_int(bins.searchsorted(x, side=side))
  File "pandas/_libs/missing.pyx", line 382, in pandas._libs.missing.NAType.__bool__
TypeError: boolean value of NA is ambiguous

问题背景

传入的数据包含pandas.NA,但查阅pandas.cut官方文档Notes部分说明:

任何NA值在结果中都会返回NA,超出边界的值在生成的Series或Categorical对象中也会返回NA。

按文档理解代码不应报错,因此咨询错误产生原因。

原因分析

这个错误是pandas版本兼容性问题:

  • 你当前使用的pandas版本对pandas.NA(Nullable类型缺失值)的支持不完善,cut方法内部调用的searchsorted无法正确处理pandas.NA——在底层判断pandas.NA的布尔值时,会触发"boolean value of NA is ambiguous"的错误。
  • 文档描述的行为,针对的是传统的np.nan缺失值,早期pandas版本对pandas.NA的处理逻辑没有跟上文档描述。

解决方案

  1. 升级pandas版本:升级到1.3.0及以上版本,该版本已修复pandas.cut对pandas.NA的处理问题,能按照文档预期返回含NA的结果。
  2. 替换缺失值类型:将pandas.NA替换为np.nan,旧版本pandas对np.nan的处理符合文档描述:
    import pandas as pd
    import numpy as np
    pd.cut(x=[1, 2, np.nan, 4, 5, 6, 7], bins=3)
    
  3. 转换为Series处理:将输入的列表转为pandas Series,Series的缺失值处理逻辑更完善:
    import pandas as pd
    pd.cut(pd.Series([1, 2, pd.NA, 4, 5, 6, 7]), bins=3)
    

内容的提问来源于stack exchange,提问作者buhtz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:45:34