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

Pandas qcut处理含无穷值数据报错:旧版本可用1.5版本失效求答疑

Pandas 1.5+中pd.qcut处理np.inf报错:是Bug还是有意设计?

问题背景

  • Pandas 1.1.5及更早版本里,用pd.qcut给分箱两端设np.inf完全没问题
  • 升级到1.5版本后,运行pd.qcut([1,2,3,4,5,-np.inf, np.inf], q=3, duplicates="drop")会弹出ValueError: missing values must be missing in the same location both left and right sides错误
  • 要是省略duplicates参数,又会出现ValueError: Bin edges must be unique: array([nan, 2., 4., nan]). You can drop duplicate edges by setting the 'duplicates' kwarg错误
  • 目前只能临时用1e9这类极大值替换np.inf,但远不如直接用无穷值方便

结论:这是有意调整,不是Bug

Pandas 1.5版本后对分箱逻辑做了调整:np.inf和-np.inf在计算分箱边缘时会被当作缺失值(nan)处理。当数组里包含无穷值时,自动计算的分位数边界会出现nan,触发了唯一性检查或者缺失值位置匹配的校验规则,所以才会报错。

更便捷的替代方案

如果想继续用无穷值实现两端分箱,别让qcut自动算边界,手动指定分箱区间就行:

import pandas as pd
import numpy as np

data = [1,2,3,4,5,-np.inf, np.inf]
# 先计算数据的分位数,再把无穷值补到两端当边界
quantiles = pd.Series(data).quantile([1/3, 2/3]).values
bins = [-np.inf, *quantiles, np.inf]
result = pd.cut(data, bins=bins)

这样既保留了无穷值的便捷性,又避开了qcut的报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:10:22