كيفية الإصلاح: typeerror: أنواع المعاملات غير المدعومة لـ –: 'str' و'int'
الخطأ الذي قد تواجهه عند استخدام بايثون هو:
TypeError : unsupported operand type(s) for -: 'str' and 'int'
يحدث هذا الخطأ عند محاولة إجراء الطرح باستخدام متغير سلسلة ومتغير رقمي.
يوضح المثال التالي كيفية حل هذا الخطأ عمليًا.
كيفية إعادة إنتاج الخطأ
لنفترض أن لدينا DataFrame الباندا التالية:
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
لنفترض الآن أننا نحاول طرح عمود Points_against من عمود Points_for :
#attempt to perform subtraction
df[' diff '] = df. points_for - df. points_against
TypeError : unsupported operand type(s) for -: 'str' and 'int'
نتلقى خطأ TypeError لأن عمود Points_for عبارة عن سلسلة بينما عمود Points_against رقمي.
لإجراء عملية طرح، يجب أن يكون كلا العمودين رقميين.
كيفية اصلاح الخطأ
لحل هذا الخطأ، يمكننا استخدام .astype(int) لتحويل عمود point_for إلى عدد صحيح قبل إجراء عملية الطرح:
#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
لاحظ أننا لا نتلقى خطأ لأن العمودين اللذين استخدمناهما للطرح هما عمودان رقميان.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:
كيفية إصلاح KeyError في الباندا
كيفية الإصلاح: خطأ القيمة: غير قادر على تحويل float NaN إلى int
كيفية الإصلاح: خطأ في القيمة: لا يمكن بث المعاملات بالأشكال