【发布时间】:2017-10-18 10:35:57
【问题描述】:
我有数以千计的系列(DataFrame 的行)需要应用 qcut。定期会有一个系列(行)的值少于所需的分位数(例如,1 个值与 2 个分位数):
>>> s = pd.Series([5, np.nan, np.nan])
当我对其应用.quantile() 时,它没有问题分成2个分位数(具有相同的边界值)
>>> s.quantile([0.5, 1])
0.5 5.0
1.0 5.0
dtype: float64
但是,当我将.qcut() 与分位数的整数值一起应用时,会引发错误:
>>> pd.qcut(s, 2)
...
ValueError: Bin edges must be unique: array([ 5., 5., 5.]).
You can drop duplicate edges by setting the 'duplicates' kwarg
即使我设置了duplicates 参数,它仍然失败:
>>> pd.qcut(s, 2, duplicates='drop')
....
IndexError: index 0 is out of bounds for axis 0 with size 0
我该如何进行这项工作? (同样,pd.qcut(s, [0, 0.5, 1], duplicates='drop') 也不起作用。)
所需的输出是将 5.0 分配给单个 bin 并保留 NaN:
0 (4.999, 5.000]
1 NaN
2 NaN
【问题讨论】:
-
您希望 pd.qcut(s, 2) 的输出是什么?您只有 1 个唯一值,为什么要创建 1 个以上的 bin?
-
我正在提取一个非常具体的案例来解决。实际上,我有数千个系列,所有这些我都需要删减。但是 qcut() 遇到了像这样的异常行的问题。我用所需的输出修改了问题。
-
用
try-except块包围qcut以捕获有缺陷的系列(足够具体,只得到太短的系列)并手动处理太短的系列 -
您解决了这个问题吗?我遇到了同样的错误,找不到解决方案
-
不,截至 2018 年 2 月 21 日,原始问题尚无解决方案