ValueError: Verkeerd aantal items doorgegeven – Betekenis en suggesties?

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 1aan 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 predictedYkan 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.

Other episodes