即使我遵循一个示例问题,我也一直收到“ValueError:值的长度 (1) 与索引 (11) 的长度不匹配”

I keep getting "ValueError: Length of values (1) does not match length of index (11)" even though I am following an example problem

提问人:ali bab613 提问时间:11/16/2023 最后编辑:ali bab613 更新时间:11/17/2023 访问量:86

问:

我正在尝试将 pymoo 优化算法与回归模型相结合。我在 github 上找到了这个很棒的例子,并尝试按照从 In[16] 开始的步骤进行操作。 示例问题可能是使用过时的加载 pickle 文件的方法(它对我不起作用),所以我将用于我的第一个模型输出,同样用于我的第二个输出。我能够按照示例的其余部分进行操作,直到 In[69]。我还使用两个不同的 pkl 文件来预测数据的两种不同结果,但是当我使用Model= load_model('RegModel')Model2=load_model('Reg2Model')

result=pd.DataFrame(list(res.X))
result['Output1']=res.F
result['Output2']=Model2.predict(result)

我在问题标题中收到错误,即:(请注意,我的长度是 11 而不是示例的 5,因为我使用的是不同的数据集。然而,方法是相同的)。ValueError: Length of values (1) does not match length of index (11)

我试着不使用 pd。DataFrame 对象并将其作为 numpy 列表传递,但这也不起作用。在这一点上,我被难住了。 如果我不定义输出 2,而只是单独定义输出 1 输出 = res。F 我的代码可以编译,但这显然是荒谬的。

任何帮助都是值得赞赏的,包括In[69]背后的直觉。 附加的是完整的错误消息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[14], line 4
      1 result= pd.DataFrame(list(res.X))
      2 result
----> 4 result['Output1']= res.F
      5 result['Output2']=Reg2Model.predict(result)

File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:3980, in DataFrame.__setitem__(self, key, value)
   3977     self._setitem_array([key], value)
   3978 else:
   3979     # set column
-> 3980     self._set_item(key, value)

File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:4174, in DataFrame._set_item(self, key, value)
   4164 def _set_item(self, key, value) -> None:
   4165     """
   4166     Add series to DataFrame in specified column.
   4167 
   (...)
   4172     ensure homogeneity.
   4173     """
-> 4174     value = self._sanitize_column(value)
   4176     if (
   4177         key in self.columns
   4178         and value.ndim == 1
   4179         and not is_extension_array_dtype(value)
   4180     ):
   4181         # broadcast across multiple columns if necessary
   4182         if not self.columns.is_unique or isinstance(self.columns, MultiIndex):

File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:4915, in DataFrame._sanitize_column(self, value)
   4912     return _reindex_for_setitem(Series(value), self.index)
   4914 if is_list_like(value):
-> 4915     com.require_length_match(value, self.index)
   4916 return sanitize_array(value, self.index, copy=True, allow_2d=True)

File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\common.py:571, in require_length_match(data, index)
    567 """
    568 Check the length of data matches the length of the index.
    569 """
    570 if len(data) != len(index):
--> 571     raise ValueError(
    572         "Length of values "
    573         f"({len(data)}) "
    574         "does not match length of index "
    575         f"({len(index)})"
    576     )

ValueError: Length of values (1) does not match length of index (11)

pandas numpy 泡菜 值错误 pymoo

评论

1赞 Mark 11/16/2023
嗨,阿里,欢迎来到 Stack Overflow!你能从 Github 链接添加相关内容,以便我可以重现你的问题吗?
0赞 Mark 11/16/2023
也等是 ln 69result=pd.DataFrame(list(res.X))
0赞 ali bab613 11/17/2023
嘿@Mark!感谢您的回复。是的,我的意思是 In[69],我编辑了原始问题。要重现该示例,请下载“钢铁制造.csv”并执行“Modelling.ipnyb”中的代码。这两个文件都可以在 github.com/DataGasmic/ 中找到...请记住,他保存和加载 pkl 文件的方式与我不同,我使用 save_model(reg_model, 'RegModel') 保存并在优化代码中加载为 Model= load_model('RegModel')。
0赞 hpaulj 11/17/2023
带有回溯的完整错误消息可能会有所帮助。如果未提供足够的调试信息,则将依赖其他人下载和运行代码,从而获取该信息。
0赞 ali bab613 11/17/2023
我添加了完整的错误消息。感谢您的方便提示 hpaulj

答:

0赞 Pieter-Jan 11/17/2023 #1

您的错误是由于尝试将长度为 1 的数组添加到大小为 11(索引长度为 11)的数据帧中。

你应该检查一下如何和看起来像。它们是否一致?数据帧是什么样子的?数据帧中还有其他内容吗?res.Xres.F

通常,解空间中的解量应等于设计空间中的集合量。res.Fres.X

0赞 ali bab613 11/17/2023 #2

更新:问题在于遗传算法的世代数太少,这在某种程度上意味着算法在完全运行之前就终止了。将其增加到 1000 而不是 100 后,它运行并且此错误消失了。我现在又有个错误,但这个问题已经解决了。

评论

0赞 Pieter-Jan 11/17/2023
这是否意味着 AND 没有相同的大小?res.Xres.F
0赞 ali bab613 11/17/2023
由于算法终止得太早,是的。否则,res.X 和 res。F 将具有相同的大小
0赞 Pieter-Jan 11/17/2023
好的,在这种情况下,你能接受我的答案吗?