Oplossing: typeerror: kan niet verkleinen met flexibel type


Een fout die u kunt tegenkomen bij het gebruik van Python is:

 ValueError : cannot perform reduce with flexible type

Deze fout treedt op wanneer u probeert een berekening uit te voeren op een object in Python dat niet numeriek is.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.

Hoe de fout te reproduceren

Stel dat we de volgende NumPy-array hebben:

 import numpy as np

#define NumPy array of values
data = np. array (['1', '2', '3', '4', '7', '9', '10', '12'])

#attempt to calculate median of values
n.p. median (data)

TypeError : cannot perform reduce with flexible type

We ontvangen een TypeError omdat we hebben geprobeerd de mediaan van een lijst met tekenreekswaarden te berekenen.

Hoe u de fout kunt oplossen

De eenvoudigste manier om deze fout op te lossen is door de NumPy-array eenvoudigweg naar een float-object te converteren, zodat we er wiskundige bewerkingen op kunnen uitvoeren.

De volgende code laat zien hoe u dit doet:

 #convert NumPy array of string values to float values
data_new = data. astype (float)

#view updated NumPy array
data_new

array([ 1., 2., 3., 4., 7., 9., 10., 12.])

#check data type of array
data_new. dtype

dtype('float64')

We kunnen nu wiskundige bewerkingen uitvoeren op de NumPy-array:

 #calculate median value of array
n.p. median (data_new)

5.5

#calculate mean value of array
n.p. mean (data_new)

6.0

#calculate max value of array
n.p. max (data_new)

12.0

Merk op dat we geen fouten ontvangen omdat de NumPy-array een float-object is, wat betekent dat we er wiskundige bewerkingen op kunnen uitvoeren.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:

Hoe KeyError in Panda’s te repareren
Oplossing: ValueError: Kan float NaN niet naar int converteren
Oplossing: ValueError: Operanden konden niet worden uitgezonden met vormen

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert