在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”和重复项,但似乎没有任何效果。关于如何解决此问题的任何想法?