numpy 我一直得到“ValueError:Length of values(1)does not match length of index(11)”,即使我正在跟踪一个示例问题,

mwg9r5ms  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(699)

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

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

字符串
我得到了问题标题中的错误,即:ValueError: Length of values (1) does not match length of index (11)(注意,我的长度是11而不是示例的5,因为我使用的是不同的数据集。但是方法是相同的)。
我尝试不使用pd.DataFrame对象,并将其作为numpy列表传递,但这也不起作用。在这一点上,我被难倒了。如果我不定义Output 2,只定义Output 1 Output=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)

tez616oj

tez616oj1#

你的错误是由于试图添加一个长度为1的数组到一个大小为11的数组中(索引长度为11)。
你应该检查res.Xres.F的样子。它们是一致的吗?还有这个框架是什么样子的?这个框架里还有别的东西吗?
通常,解空间res.F中的解的数量应该等于设计空间res.X中的集合的数量。

xa9qqrwz

xa9qqrwz2#

最新消息:“问题是遗传算法的代数太低了,也就是说算法还没运行完就终止了,当把它从100增加到1000时,它就运行了,这个错误就消失了。现在我又有一个错误,但这个问题已经解决了。”

相关问题