كيفية الإصلاح: يمكن فقط استخدام ملحق .str مع قيم السلسلة
الخطأ الذي قد تواجهه عند استخدام بايثون هو:
AttributeError : Can only use .str accessor with string values!
يحدث هذا الخطأ عادةً عند محاولة استبدال نمط في عمود سلسلة في pandas DataFrame، ولكن العمود الذي تعمل به ليس في الواقع سلسلة.
يوضح المثال التالي كيفية تصحيح هذا الخطأ عمليًا.
كيفية إعادة إنتاج الخطأ
لنفترض أن لدينا DataFrame الباندا التالية:
import pandas as pd
#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
' points ': [6.5, 7.8, 8.0, 9.0, 7.5, 3.4, 6.6, 6.8],
' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12]})
#view DataFrame
df
team points assists rebounds
0 A 6.5 5 11
1 A 7.8 7 8
2 A 8.0 7 10
3 A 9.0 9 6
4 B 7.5 12 6
5 B 3.4 9 5
6 B 6.6 9 9
7 B 6.8 4 12
لنفترض الآن أننا نحاول استبدال كل منزلة عشرية في عمود “النقاط” بمسافة:
#attempt to replace decimal in "points" column with a blank
df[' points '] = df[' points ']. str . replace (' . ', '')
AttributeError : Can only use .str accessor with string values!
نحن نتلقى خطأ لأن عمود “النقاط” ليس عمود سلسلة.
كيفية اصلاح الخطأ
أسهل طريقة للتغلب على هذا الخطأ هي استخدام الدالة .astype(str) قبل محاولة استبدال القيم في عمود “النقاط”:
#replace decimal in "points" column with a blank
df[' points '] = df[' points ']. astype (str). str . replace (' . ', '')
#view updated DataFrame
df
team points assists rebounds
0 A 65 5 11
1 A 78 7 8
2 A 80 7 10
3 A 90 9 6
4 B 75 12 6
5 B 34 9 5
6 B 66 9 9
7 B 68 4 12
لاحظ أنه تم استبدال كل منزلة عشرية في عمود “النقاط” ولا نتلقى أي أخطاء منذ أن استخدمنا الدالة .astype(str) قبل محاولة استبدال القيم في عمود “النقاط”.
ملاحظة : يمكنك العثور على الوثائق الكاملة لوظيفة استبدال () هنا .
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:
كيفية إصلاح KeyError في الباندا
كيفية الإصلاح: خطأ القيمة: غير قادر على تحويل float NaN إلى int
كيفية الإصلاح: خطأ في القيمة: لا يمكن بث المعاملات بالأشكال