Ik krijg de foutmelding:
ValueError: Wrong number of items passed 3, placement implies 1
, en ik heb moeite om erachter te komen waar en hoe ik het probleem kan aanpakken.
Ik begrijp de betekenis van de fout niet echt; wat het voor mij moeilijk maakt om problemen op te lossen. Ik heb ook het codeblok dat de fout veroorzaakt in mijn Jupyter Notebook opgenomen.
De gegevens zijn moeilijk te koppelen; dus ik ben niet op zoek naar iemand die deze fout voor mij probeert opnieuw te maken. Ik ben gewoon op zoek naar feedback over hoe ik deze fout kan verhelpen.
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
Mijn code is als volgt:
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')
Antwoord 1, autoriteit 100%
Over het algemeen geeft de fout ValueError: Wrong number of items passed 3, placement implies 1
aan dat u probeert te veel duiven in te weinig hokjes te plaatsen. In dit geval is de waarde rechts van de vergelijking
results['predictedY'] = predictedY
probeert 3 “dingen” in een container te plaatsen die er maar één toelaat. Omdat de linkerkant een dataframekolom is en meerdere items op die (kolom)dimensie kan accepteren, zou je moeten zien dat er te veel items op een andere dimensie zijn.
Hier lijkt het erop dat je sklearn gebruikt voor modellering, en dat is waar gaussian_process.GaussianProcess()
vandaan komt (ik gok, maar corrigeer me en herzie de vraag als dit verkeerd is) .
Nu genereert u hier voorspelde waarden voor y:
predictedY, MSE = gp.predict(testX, eval_MSE = True)
Zoals we echter kunnen zien in de documentatie voor GaussianProcess, predict()
retourneert twee items. De eerste is y, wat array-achtigis (nadruk van mij). Dat betekent dat het meer dan één dimensie kan hebben, of, om concreet te zijn voor dikkoppige mensen zoals ik, het kan meer dan één kolom hebben — zie dat het (n_samples, n_targets)
kan retourneren, wat , afhankelijk van testX
, kan (1000, 3)
zijn (alleen om nummers te kiezen). Uw predictedY
kan dus 3 kolommen hebben.
Als dat zo is, als u iets met drie “kolommen” in een enkele dataframekolom probeert te plaatsen, geeft u 3 items door waar er maar één zou passen.
Antwoord 2, autoriteit 49%
Ik weet niet zeker of dit relevant is voor uw vraag, maar het kan in de toekomst relevant zijn voor iemand anders: ik had een soortgelijke fout. Bleek dat de df leeg was (had nul rijen) en dat was de oorzaak van de fout in mijn commando.
Antwoord 3, autoriteit 4%
Een andere oorzaak van deze fout is wanneer u een functie toepast op een DataFrame waar twee kolommen met dezelfde naam zijn.
Antwoord 4
Vanaf panda’s 1.3.x is het niet toegestaan om objecten (zoals een gretigheidtensor van een inbedding) in kolommen te vullen.
https://github.com /pandas-dev/pandas/blame/master/pandas/core/internals/blocks.py
Antwoord 5
Dus ValueError: het verkeerde aantal items is doorgegeven 3, plaatsing impliceert dat 1 optreedt wanneer u veel argumenten doorgeeft, maar de methode ondersteunt er maar een paar. bijvoorbeeld –
df['First_Name', 'Last_Name'] = df['Full_col'].str.split(' ', expand = True)
In de bovenstaande code probeer ik Full_col op te splitsen in twee subkolomnamen als -First_Name & Last_Name, dus hier krijg ik de foutmelding omdat in plaats daarvan een lijst met kolommen de kolommen die ik slechts één argument doorgeef.
Dus om dit te vermijden – gebruik een andere sublijst
df[['First_Name', 'Last_Name']] = df['Full_col'].str.split(' ', expand = True)
Volg mij voor ML AI-inhoud –
https://github.com/eryadavmukesh
Antwoord 6
Als je dit gewoon als antwoord toevoegt: nestmethoden en het verkeerd plaatsen van gesloten haakjes zal deze fout ook optreden, bijvoorbeeld:
march15_totals= march15_t.assign(sum_march15_t=march15_t[{"2021-03-15","2021-03-16","2021-03-17","2021-03-18","2021-03-19","2021-03-20","2021-03-21"}]).sum(axis=1)
Vergeleken met de (juiste) versie:
march15_totals= march15_t.assign(sum_march15_t=march15_t[{"2021-03-15","2021-03-16","2021-03-17","2021-03-18","2021-03-19","2021-03-20","2021-03-21"}].sum(axis=1))
Dit is waarschijnlijk gezond verstand voor de meesten van jullie, maar ik was nogal in de war totdat ik mijn fout besefte.
Antwoord 7
Ik kreeg deze fout toen ik probeerde een dataframe met één kolom, df
, om te zetten in een serie, pd.Series(df)
.
Ik heb dit opgelost met
pd.Series(df.values.flatten())
Het probleem was dat de waarden in het dataframe lijsten waren:
my_col
0 ['a']
1 ['b']
2 ['c']
3 ['d']
Toen ik het dataframe aan het afdrukken was, werden de haakjes niet weergegeven, waardoor het moeilijk op te sporen was.
Antwoord 8
for i in range(100):
try:
#Your code here
break
except:
continue
Deze werkte voor mij.