ValueError: Columns must be same length as key - why can I not use pd.cut() on a list of numbers

ValueError: Columns must be same length as key - why can I not use pd.cut() on a list of numbers

我可以看到其他类似的问题,但我无法让他们的解决方案适用于我。

我写了这段代码:

print(list(output_dataframe2['confidence_range'][0:100]))

output_dataframe2['confidence_range'] = output_dataframe2.apply(lambda x:  pd.cut(output_dataframe2['confidence_range'][0:100], [.3, .4, .5, .6, .7, .8, .9, 1]),axis=0)

输出为:

[0.07104106198775281, 0.07681671628936017, 0.07361285547872579, 0.08426241375111888, 0.09426695249304227, 0.07277908132090657, 0.07596724274867177, 0.07787474884487028, 0.08358131238791791, 0.08979761469763338, 0.0738640345607251, 0.07940320140205635, 0.07209276394982556, 0.08757624799906928, 0.08706375208832365, 0.08468075287090132, 0.07730884031039793, 0.07856973785669046, 0.07274862945070759, 0.0866920395113026, 0.08264507927872311, 0.07700725993664485, 0.07368871066870882, 0.07401282247556824, 0.09264612764035488, 0.07506796627630956, 0.0768855363708753, 0.07964452700851928, 0.08487824723635753, 0.08352372310793824, 0.06922871463061396, 0.07166240445643876, 0.08819215856746335, 0.05966794067700878, 0.11124878166847511, 0.0729335885241208, 0.07665325146784958, 0.07396848782906056, 0.08027918516027988, 0.09616548701868913, 0.08648937017004929, 0.07801954928982695, 0.07423476277949745, 0.06942205668967497, 0.09183426107095122, 0.08119386568499445, 0.07444504948553582, 0.07575145788881914, 0.07118742056835665, 0.0974222063722939, 0.09315645088182262, 0.08005020335656701, 0.07474181396368278, 0.0730391962226974, 0.0790123355752301, 0.08790051937652928, 0.0704054007555723, 0.0801805303973437, 0.06953606070228636, 0.09197748876826825, 0.09076666961309225, 0.08183623321317493, 0.07216188648568382, 0.071346024927791, 0.08388918576025792, 0.07270914338733125, 0.0760779087199434, 0.07572877736238637, 0.08134053178046392, 0.09414363874987498, 0.0771266479863377, 0.07900226799968604, 0.0734475982159013, 0.07818121341259629, 0.09224227238547858, 0.07620283778757117, 0.07974822882133276, 0.07710022848031366, 0.07872257722347716, 0.0882261276873052, 0.08622834993827369, 0.07922132900022591, 0.07721666773385354, 0.07352610284819554, 0.08380755047945128, 0.09196214043970832, 0.07826503361885426, 0.07584399258623933, 0.07284303664930264, 0.08108579670589533, 0.08047644130850443, 0.07668602971100233, 0.07450088794646745, 0.07493849851839753, 0.0933981425156282, 0.07821852119931488, 0.08129869040488961, 0.07660410131185957, 0.07842259381874718, 0.08545609326518866]


Traceback (most recent call last):
  File "test_dataframe.py", line 18, in <module>
    output_dataframe2['confidence_range'] = output_dataframe2.apply(lambda x:  pd.cut(output_dataframe2['confidence_range'][0:100], [.3, .4, .5, .6, .7, .8, .9, 1]),axis=0)
  File "/root/miniconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 3602, in __setitem__
    self._set_item_frame_value(key, value)
  File "/root/miniconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 3729, in _set_item_frame_value
    raise ValueError("Columns must be same length as key")
ValueError: Columns must be same length as key

有人可以向我解释为什么不能使用 lambda 函数切割这些数字列表吗?

我不确定您的 lambda 函数如何工作。我弄乱了它,它似乎可以工作,但我不确定它为什么会工作。

您正在通过 apply() 使用 lambda 函数对 DF 的每一行执行完整的矢量化操作。不确定在这种情况下底层分配是如何工作的。您正在为每一行返回一个完整的列切片。看起来引擎可以使用索引挑选出正确的值。但有时我会遇到和你一样的错误。

单独执行矢量化操作会更简洁:

output_dataframe2['confidence_range'] = pd.cut(output_dataframe2['confidence_range'][0:100], [.3, .4, .5, .6, .7, .8, .9, 1])

此外,您的最低分箱 0.3 大于您提供的列表中的任何值。所以返回的 bins 都将是 NaNs.