在python中的pandas.cut中对齐垃圾箱的数量和边缘的数量(出现错误:垃圾箱标签必须比垃圾箱的边缘数量少一个)

时间:2020-07-03 18:35:59

标签: python pandas

在python中,我使用pandas.cut将值归类为垃圾箱,但出现一个错误,我无法深入了解/变通。

就上下文而言,我正在使用数据集1来定义各种“参数”的箱/边。然后将它们应用于数据集2。对于字典中的每个参数,边的列表在“ list_of_edges”中,仓的名称在“ names_of_bins”中。最后一个边总是np.inf。

我使用以下代码,该代码应运行40-50次迭代。它运行正常,但是到了一定程度,给了我一个错误。

'ValueError: Bin labels must be one fewer than the number of bin edges'

但是,我确保bin标签比边缘的数量少一个。因此,当出现异常时,我会在代码周围进行try / except来打印边数和垃圾箱数。但这表明箱的数量确实比边的数量少一。

以下是带有异常处理的代码:

     for parameter in parameters_for_quantiles:
        list_of_edges = bin_edges_dict[parameter]
        names_of_bins = bin_names_dict[parameter]
        try: 
            test_price_df_dict[symbol][parameter+'_Quantile.1'] = pd.cut(test_price_df_dict[symbol][parameter], list_of_edges, labels=names_of_bins, include_lowest = True, duplicates = 'drop' )
        except ValueError: 
            print("Error!!!! Number of Edges: {0}, Number of Bins: {1}".format(len(list_of_edges), len(names_of_bins)))
            print(list_of_edges)
            print(names_of_bins)

以下是代码的输出,它显示bin的数量确实比边数少1:

Error!!!! Number of Edges: 11, Number of Bins: 10
[-0.005, -0.001, -0.001, -0.001, -0.0, 0.0, 0.0, 0.001, 0.001, 0.001, inf]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Error!!!! Number of Edges: 11, Number of Bins: 10
[-0.029, -0.002, -0.001, -0.001, -0.0, 0.0, 0.0, 0.001, 0.001, 0.002, inf]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

(有趣的是,该错误仅显示在有11条边和10个bin的地方。不是对于有11条边和10个bin的所有迭代,但是当我遇到错误时,它是11条边的一个迭代和10个垃圾箱)。

我真的很困惑,不确定如何解决此问题。我已切换“ include_lowest”和重复项,但似乎没有任何效果。关于如何解决此问题的任何想法?

0 个答案:

没有答案