اذهب إلى المحتوى
  • 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['نتيجة المادة']
        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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...