اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم

أرجو تصحيح الخطأ بهذا الكود 

        self.df = pd.read_excel(self.file_name,sheet_name=self.vq,header=None)
        self.DATA_A()
        self.df = pd.DataFrame.from_dict(self.dataT)
        self.df =self.df[['إسم الطالب', 'إسم المادة' ,'العام الدراسي' , 'نتيجة المادة' ]]
        self.df['نتيجة المادة'] = pd.to_numeric(self.df['نتيجة المادة'], errors='coerce')
        self.searjh = self.df[self.df['إسم الطالب'] == str(self.label_Title.cget("text"))] 
        self.nT=self.searjh['نتيجة المادة']
        if self.nT >= 85:
            self.searjh["التقدير"]="A"

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

تم التعديل في بواسطة Ahmed Ahmed64

Recommended Posts

  • 0
نشر

من الواضح أن الخطأ الذي تحدث هنا هو في الجزء الذي يحتوي على الفحص المشروط if self.nT >= 85، المشكلة تكمن في محاولة مقارنة العمود بالقيمة 85، وهذا يؤدي إلى خطأ.

بدلا من ذلك، يجب عليك استخدام apply لتطبيق الفحص المشروط على كل عنصر في العمود،  فيما يلي كيف يمكنك تحسين الكود:

self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

يتم استخدام apply هنا لتطبيق الشرط على كل عنصر في العمود، ويتم إنشاء  عمود جديد تحت إسم التقدير يحتوي على التقدير المناسب لكل قيمة. يمكنك ضبط الشرط حسب احتياجاتك.

  • 0
نشر
بتاريخ 15 دقائق مضت قال Chihab Hedidi:

من الواضح أن الخطأ الذي تحدث هنا هو في الجزء الذي يحتوي على الفحص المشروط if self.nT >= 85، المشكلة تكمن في محاولة مقارنة العمود بالقيمة 85، وهذا يؤدي إلى خطأ.

بدلا من ذلك، يجب عليك استخدام apply لتطبيق الفحص المشروط على كل عنصر في العمود،  فيما يلي كيف يمكنك تحسين الكود:

self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

يتم استخدام apply هنا لتطبيق الشرط على كل عنصر في العمود، ويتم إنشاء  عمود جديد تحت إسم التقدير يحتوي على التقدير المناسب لكل قيمة. يمكنك ضبط الشرط حسب احتياجاتك.

هذا ما قمت بتعديله هل هكذا صحيح

        self.df = pd.read_excel(self.file_name,sheet_name=self.vq,header=None)
        self.DATA_A()
        self.df = pd.DataFrame.from_dict(self.dataT)
        self.df =self.df[['إسم الطالب', 'إسم المادة' ,'العام الدراسي' , 'نتيجة المادة' ]]
        self.df['نتيجة المادة'] = pd.to_numeric(self.df['نتيجة المادة'], errors='coerce')
        self.searjh = self.df[self.df['إسم الطالب'] == str(self.label_Title.cget("text"))] 
        self.nT = self.searjh['نتيجة المادة']
        self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

لأن الكود به خطأ 

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

  • 0
نشر
بتاريخ منذ ساعة مضت قال Ahmed Ahmed64:

هذا ما قمت بتعديله هل هكذا صحيح

        self.df = pd.read_excel(self.file_name,sheet_name=self.vq,header=None)
        self.DATA_A()
        self.df = pd.DataFrame.from_dict(self.dataT)
        self.df =self.df[['إسم الطالب', 'إسم المادة' ,'العام الدراسي' , 'نتيجة المادة' ]]
        self.df['نتيجة المادة'] = pd.to_numeric(self.df['نتيجة المادة'], errors='coerce')
        self.searjh = self.df[self.df['إسم الطالب'] == str(self.label_Title.cget("text"))] 
        self.nT = self.searjh['نتيجة المادة']
        self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

لأن الكود به خطأ 

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

الرسالة التي تظهر تشير إلى أنك تقوم بتعديل قيمة في DataFrame على نسخة من البيانات، وهو ما يمكن أن يؤدي إلى مشكلات في بعض الحالات، يمكنك محاولة تجنب هذا الخطأ عن طريق استخدام loc لتحديد الصفوف والأعمدة المحددة.

في السطور الأخيرة من الكود، قم بتغيير هذا السطر:

self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

إلى:

self.df.loc[self.df['إسم الطالب'] == str(self.label_Title.cget("text")), "التقدير"] = self.df.loc[self.df['إسم الطالب'] == str(self.label_Title.cget("text")), 'نتيجة المادة'].apply(lambda x: 'A' if x >= 85 else 'Other')

هذا التعديل يستخدم  loc لتحديد الصفوف التي تلبي شرط "إسم الطالب" ويعدل القيمة في عمود "التقدير" بناءا على الشرط المحدد.

  • 0
نشر
بتاريخ 16 دقائق مضت قال Chihab Hedidi:

الرسالة التي تظهر تشير إلى أنك تقوم بتعديل قيمة في DataFrame على نسخة من البيانات، وهو ما يمكن أن يؤدي إلى مشكلات في بعض الحالات، يمكنك محاولة تجنب هذا الخطأ عن طريق استخدام loc لتحديد الصفوف والأعمدة المحددة.

في السطور الأخيرة من الكود، قم بتغيير هذا السطر:

self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other')

إلى:

self.df.loc[self.df['إسم الطالب'] == str(self.label_Title.cget("text")), "التقدير"] = self.df.loc[self.df['إسم الطالب'] == str(self.label_Title.cget("text")), 'نتيجة المادة'].apply(lambda x: 'A' if x >= 85 else 'Other')

هذا التعديل يستخدم  loc لتحديد الصفوف التي تلبي شرط "إسم الطالب" ويعدل القيمة في عمود "التقدير" بناءا على الشرط المحدد.

عند تشغيل الكود لم يظهر خطأ كذلك لم يقم بتكوين العمود الحديد " التقدير "

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...