ValueError: Falsche Anzahl der Elemente übergeben - Bedeutung und Vorschläge?
Ich erhalte die Fehlermeldung:
ValueError: Wrong number of items passed 3, placement implies 1
, und ich bin kämpfen, um herauszufinden, wo und wie ich anfangen kann das problem anzugehen.
Ich nicht wirklich verstehen, die Bedeutung der Fehler; das macht es schwierig für mich zu beheben. Ich habe auch den code-block ausgelöst wird der Fehler in meinem Jupyter Notebook.
Den Daten ist schwer zu befestigen; also ich bin nicht auf der Suche für jedermann zu versuchen und neu erstellen, diese Fehler für mich. Ich bin gerade auf der Suche nach etwas Rückgespräch auf, wie ich konnte-Adresse dieser Fehler Auftritt.
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
Mein code ist wie folgt:
def predictAll(theta, nugget, trainX, trainY, testX, testY, testSet, title):
gp = gaussian_process.GaussianProcess(theta0=theta, nugget =nugget)
gp.fit(trainX, trainY)
predictedY, MSE = gp.predict(testX, eval_MSE = True)
sigma = np.sqrt(MSE)
results = testSet.copy()
results['predictedY'] = predictedY
results['sigma'] = sigma
print ("Train score R2:", gp.score(trainX, trainY))
print ("Test score R2:", sklearn.metrics.r2_score(testY, predictedY))
plt.figure(figsize = (9,8))
plt.scatter(testY, predictedY)
plt.plot([min(testY), max(testY)], [min(testY), max(testY)], 'r')
plt.xlim([min(testY), max(testY)])
plt.ylim([min(testY), max(testY)])
plt.title('Predicted vs. observed: ' + title)
plt.xlabel('Observed')
plt.ylabel('Predicted')
plt.show()
return gp, results
gp_dailyElectricity, results_dailyElectricity = predictAll(3, 0.04, trainX_dailyElectricity, trainY_dailyElectricity, testX_dailyElectricity, testY_dailyElectricity, testSet_dailyElectricity, 'Daily Electricity')
Ich weiß nicht, Pandas (man sollte hinzufügen, dass, tag, übrigens), aber das traceback ist die Berichterstattung eine
sollten nicht die Ergebnisse eher testX.kopieren(). Können Sie sagen, wie testSet, testX und testY verwandt sind?
KeyError
auf die results['predictedY'] = ...
Linie, was bedeutet results
nicht 'predictedY'
- Taste. Ist results
einige Pandas Objekt, das es ermöglicht []
Zugang, sondern ermöglicht es Ihnen nicht, um neue Schlüssel?sollten nicht die Ergebnisse eher testX.kopieren(). Können Sie sagen, wie testSet, testX und testY verwandt sind?
InformationsquelleAutor Gary | 2017-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, die Fehler
ValueError: Wrong number of items passed 3, placement implies 1
schlägt vor, dass Sie versuchen, zu viele Tauben auf zu wenig Schubladen. In diesem Fall wird der Wert auf der rechten Seite der Gleichungresults['predictedY'] = predictedY
ist zu versuchen, 3 "Dinge" in einen container, der erlaubt nur eine. Denn die linke Seite ist ein dataframe Spalte und akzeptieren können mehrere Elemente auf, die (in einer Spalte) dimension, Sie sollten sehen, dass es zu viele Elemente auf einer anderen dimension.
Hier, es scheint, Sie sind mit sklearn für die Modellierung, die ist, wo
gaussian_process.GaussianProcess()
kommt (ich vermute, aber mich korrigieren und überarbeiten die Frage wenn das falsch ist).Nun, Sie generieren vorhergesagten Werte für y hier:
predictedY, MSE = gp.predict(testX, eval_MSE = True)
Jedoch, wie wir sehen können, von die Dokumentation für GaussianProcess,
predict()
gibt zwei Elemente. Die erste ist y, die array-wie (Hervorhebung von mir). Das bedeutet, dass es kann mehr als eine dimension oder Beton für dicken unter Leitung von Leuten wie mir, es kann mehr als eine Spalte -- sehen, dass zurück(n_samples, n_targets)
die je nachtestX
könnte(1000, 3)
(nur zahlen Holen). So, IhrpredictedY
vielleicht 3 Spalten.Wenn das so ist, wenn Sie versuchen, etwas zu setzen, mit drei "Spalten" in einer einzigen dataframe Spalte, übergeben Sie 3 Produkte, wo nur 1 passen würde.
InformationsquelleAutor Savage Henry