Python ValueError:传递的项目数错误-含义和建议?

Python ValueError:传递的项目数错误-含义和建议?,python,pandas,prediction,data-science,Python,Pandas,Prediction,Data Science,我收到错误信息: ValueError:传递的项目数错误3,位置意味着1,我正在努力找出解决问题的位置和方式 我真的不明白这个错误的含义;这使得我很难排除故障。我还将触发错误的代码块包含在我的Jupyter笔记本中 数据很难附上;因此,我不希望有人试图为我重新创建这个错误。我只是想得到一些关于如何解决这个错误的反馈 KeyError Traceback (most recent call last) C:\Users\brennn

我收到错误信息:
ValueError:传递的项目数错误3,位置意味着1
,我正在努力找出解决问题的位置和方式

我真的不明白这个错误的含义;这使得我很难排除故障。我还将触发错误的代码块包含在我的Jupyter笔记本中

数据很难附上;因此,我不希望有人试图为我重新创建这个错误。我只是想得到一些关于如何解决这个错误的反馈

KeyError                                  Traceback (most recent call last)
C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)
   1944             try:
-> 1945                 return self._engine.get_loc(key)
   1946             except KeyError:

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()

pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12368)()

pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12322)()

KeyError: 'predictedY'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\internals.py in set(self, item, value, check)
   3414         try:
-> 3415             loc = self.items.get_loc(item)
   3416         except KeyError:

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)
   1946             except KeyError:
-> 1947                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   1948 

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()

pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12368)()

pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12322)()

KeyError: 'predictedY'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-95-476dc59cd7fa> in <module>()
     26     return gp, results
     27 
---> 28 gp_dailyElectricity, results_dailyElectricity = predictAll(3, 0.04, trainX_dailyElectricity, trainY_dailyElectricity, testX_dailyElectricity, testY_dailyElectricity, testSet_dailyElectricity, 'Daily Electricity')

<ipython-input-95-476dc59cd7fa> in predictAll(theta, nugget, trainX, trainY, testX, testY, testSet, title)
      8 
      9     results = testSet.copy()
---> 10     results['predictedY'] = predictedY
     11     results['sigma'] = sigma
     12 

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, value)
   2355         else:
   2356             # set column
-> 2357             self._set_item(key, value)
   2358 
   2359     def _setitem_slice(self, key, value):

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\frame.py in _set_item(self, key, value)
   2422         self._ensure_valid_index(value)
   2423         value = self._sanitize_column(key, value)
-> 2424         NDFrame._set_item(self, key, value)
   2425 
   2426         # check if we are modifying a copy

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\generic.py in _set_item(self, key, value)
   1462 
   1463     def _set_item(self, key, value):
-> 1464         self._data.set(key, value)
   1465         self._clear_item_cache()
   1466 

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\internals.py in set(self, item, value, check)
   3416         except KeyError:
   3417             # This item wasn't present, just insert at end
-> 3418             self.insert(len(self.items), item, value)
   3419             return
   3420 

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\internals.py in insert(self, loc, item, value, allow_duplicates)
   3517 
   3518         block = make_block(values=value, ndim=self.ndim,
-> 3519                            placement=slice(loc, loc + 1))
   3520 
   3521         for blkno, count in _fast_count_smallints(self._blknos[loc:]):

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\internals.py in make_block(values, placement, klass, ndim, dtype, fastpath)
   2516                      placement=placement, dtype=dtype)
   2517 
-> 2518     return klass(values, ndim=ndim, fastpath=fastpath, placement=placement)
   2519 
   2520 # TODO: flexible with index=None and/or items=None

C:\Users\brennn1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\internals.py in __init__(self, values, placement, ndim, fastpath)
     88             raise ValueError('Wrong number of items passed %d, placement '
     89                              'implies %d' % (len(self.values),
---> 90                                              len(self.mgr_locs)))
     91 
     92     @property

ValueError: Wrong number of items passed 3, placement implies 1

一般来说,错误
ValueError:传递的项目数错误3,placement暗示1
表明您试图将太多的鸽子放在太少的鸽子洞中。在这种情况下,等式右侧的值

results['predictedY']=predictedY

正在尝试将3个“东西”放入一个只允许一个的容器中。因为左侧是dataframe列,并且可以接受该(列)维度上的多个项,所以您应该看到另一个维度上的项太多

在这里,您似乎正在使用sklearn进行建模,这就是
gaussian\u process.GaussianProcess()
的来源(我猜,但如果这是错误的,请纠正我并修改问题)

现在,您可以在此处为y生成预测值:

predictedY,MSE=gp.predict(testX,eval\u MSE=True)

但是,我们可以从中看到,
predict()
返回两项。第一个是y,类似于数组(我的重点)。这意味着它可以有多个维度,或者,对于像我这样的厚脑袋的人来说,它可以有多个列——请注意,它可以返回
(n_样本,n_目标)
,根据
testX
,可以是
(1000,3)
(只是选择数字)。因此,您的
predictedY
可能有3列


如果是这样,当您尝试将具有三个“列”的内容放入单个数据帧列时,您将传递3个项目,其中只有1个适合

不确定这是否与你的问题有关,但可能与将来的其他人有关:我也有类似的错误。结果证明df是空的(没有行),这就是导致我的命令出错的原因

for i in range(100):
try:
  #Your code here
  break
except:
  continue

这一个对我很有用。

所以ValueError:传递的项数错误3,placement暗示传递给多个参数时会出现1,但该方法只支持少数参数。比如说-

df['First_Name', 'Last_Name'] = df['Full_col'].str.split(' ', expand = True)
在上面的代码中,我试图将Full_col拆分为两个子列名称-First_Name&Last_Name,因此在这里我将得到错误,因为我只传递一个参数,而不是列列表

因此,为了避免这种情况,请使用另一个子列表

df[['First_Name', 'Last_Name']] = df['Full_col'].str.split(' ', expand = True)
请跟我查询ML AI内容-

我不知道Pandas(顺便说一句,你应该添加那个标记),但是回溯在
结果['predictedY']=…
行上报告了一个
键错误,意思是
结果
没有
'predictedY'
键。
results
是允许
[]
访问但不允许您创建新密钥的panda对象吗?结果不应该是testX.copy()。你能说说testSet、testX和testY是如何关联的吗?这个问题不是这样的,但这正是谷歌搜索错误的原因,所以我将把它添加到这里。我最终得到了两个同名的列,并且得到了错误
ValueError:传递的项数错误2,位置意味着1
。删除意外重复的列解决了问题。另一个想法:这篇文章说,您可以将DF列类型更改为“object”,以便在单个DF单元中存储元组。从这个sklearn模块中概括出来,似乎一个很好的故障排除策略是:使用shape()方法检查两侧,并推断出右侧与左侧不匹配的原因。然后,您将获得重要信息,帮助解决其中一个形状意外的问题。是的,谢谢@Philip。使用形状方法有帮助。对我来说,有问题的项目是一个空数据框。与我类似,因此我将
if len(df)>0:
,以防止出错这也是我的答案。我已经做了
df\u splits=np.array\u split(input\u df,nb\u splits)
并且
nb\u splits
对于我的
input\u df
的大小来说太高了,这导致了一些分割成为空数据帧。与我类似!如果选择了数据帧的“某些行”并对其执行数据操作,则可能会发生此错误。当选定数据帧的形状为(0,x)时,出现此错误时使用try/except是一种非常糟糕的做法,当您不知道某些东西不起作用时。请解释链接站点如何应用于原始问题。请详细说明?@AshishAgarwal方法所需的参数我们必须从调用中传递相同数量的参数部分
df[['First_Name', 'Last_Name']] = df['Full_col'].str.split(' ', expand = True)