كيفية الإصلاح: غير قادر على مقارنة المصفوفة المكتوبة [float64] بنوع عددي [bool]


الخطأ الذي قد تواجهه عند استخدام الباندا هو:

 TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

يحدث هذا الخطأ عادةً عندما تحاول تعيين DataFrame فرعيًا استنادًا إلى شروط متعددة وتفشل في وضع الأقواس حول كل شرط على حدة.

يوضح المثال التالي كيفية تصحيح هذا الخطأ عمليًا.

كيفية إعادة إنتاج الخطأ

لنفترض أننا أنشأنا DataFrame الباندا التالية:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'],
                   ' points ': [21, 30, 26, 29, 14, 29, 22, 16]})

#view DataFrame
print (df)

  team position points
0 AG 21
1 AG 30
2 AF26
3AC 29
4 BG 14
5 BF 29
6 BF 22
7 BC 16

لنفترض الآن أننا نحاول استخدام الدالة .loc لعرض تلك الصفوف فقط حيث يساوي الفريق “A” والموضع يساوي “G”:

 #attempt to only show rows where team='A' and position='G'
df. loc [df. team == ' A ' & df. position == ' G ']

TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

لقد تلقينا خطأ ValueError لأننا لم نضع أقواسًا حول الشروط الفردية.

نظرًا لأن عامل التشغيل & له الأسبقية على عامل التشغيل == ، فإن الباندا تفشل في تفسير هذه العبارة بالترتيب الصحيح.

كيفية اصلاح الخطأ

أسهل طريقة لتصحيح هذا الخطأ هي ببساطة إضافة أقواس حول الشروط الفردية كما يلي:

 #only show rows where team='A' and position='G'
df. loc [(df. team == ' A ') & (df. position == ' G ')]

	team position points
0 A G 21
1 A G 30

لاحظ أننا لا نتلقى أي ValueError وتمكنا من تعيين DataFrame بنجاح.

مصادر إضافية

تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:

كيفية الإصلاح: تتداخل الأعمدة ولكن لم يتم تحديد أي لاحقة
كيفية الإصلاح: أنت تحاول دمج الكائن وأعمدة int64
كيفية الإصلاح: غير قادر على تحديد صف بأعمدة غير متطابقة

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *