Oplossing: typeerror: niet-ondersteunde operandtypen voor –: 'str' en 'int'


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

 TypeError : unsupported operand type(s) for -: 'str' and 'int'

Deze fout treedt op wanneer u probeert aftrekkingen uit te voeren met een tekenreeksvariabele en een numerieke variabele.

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

Hoe de fout te reproduceren

Stel dat we de volgende panda’s DataFrame hebben:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points_for ': ['18', '22', '19', '14', '14', '11', '20', '28'],
                   ' points_against ': [5, 7, 17, 22, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points_for points_against
0 to 18 5
1 B 22 7
2 C 19 17
3 D 14 22
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

#view data type of each column
print ( df.dtypes )

team object
points_for object
points_against int64
dtype:object

Stel nu dat we proberen de punten_tegen- kolom af te trekken van de punten_voor- kolom:

 #attempt to perform subtraction
df[' diff '] = df. points_for - df. points_against

TypeError : unsupported operand type(s) for -: 'str' and 'int'

We ontvangen een TypeError omdat de kolom points_for een tekenreeks is, terwijl de kolom points_against numeriek is.

Om een aftrekking uit te voeren, moeten beide kolommen numeriek zijn.

Hoe u de fout kunt oplossen

Om deze fout op te lossen, kunnen we .astype(int) gebruiken om de kolom points_for naar een geheel getal te converteren voordat we de aftrekking uitvoeren:

 #convert points_for column to integer
df[' points_for '] = df[' points_for ']. astype (int)

#perform subtraction
df[' diff '] = df. points_for - df. points_against

#view updated DataFrame
print (df)

  team points_for points_against diff
0 A 18 5 13
1 B 22 7 15
2 C 19 17 2
3 D 14 22 -8
4 E 14 12 2
5 F 11 9 2
6 G 20 9 11
7:28 4 24

#view data type of each column
print ( df.dtypes )

team object
points_for int32
points_against int64
diff int64
dtype:object

Houd er rekening mee dat we geen foutmelding ontvangen, omdat de twee kolommen die we voor het aftrekken hebben gebruikt, numerieke kolommen zijn.

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