Ahmed Ahmed64 نشر 31 يناير أرسل تقرير نشر 31 يناير (معدل) السلام عليكم أرجو تصحيح الخطأ بهذا الكود 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(). تم التعديل في 31 يناير بواسطة Ahmed Ahmed64 1 اقتباس
0 Chihab Hedidi نشر 31 يناير أرسل تقرير نشر 31 يناير من الواضح أن الخطأ الذي تحدث هنا هو في الجزء الذي يحتوي على الفحص المشروط if self.nT >= 85، المشكلة تكمن في محاولة مقارنة العمود بالقيمة 85، وهذا يؤدي إلى خطأ. بدلا من ذلك، يجب عليك استخدام apply لتطبيق الفحص المشروط على كل عنصر في العمود، فيما يلي كيف يمكنك تحسين الكود: self.searjh["التقدير"] = self.nT.apply(lambda x: 'A' if x >= 85 else 'Other') يتم استخدام apply هنا لتطبيق الشرط على كل عنصر في العمود، ويتم إنشاء عمود جديد تحت إسم التقدير يحتوي على التقدير المناسب لكل قيمة. يمكنك ضبط الشرط حسب احتياجاتك. اقتباس
0 Ahmed Ahmed64 نشر 31 يناير الكاتب أرسل تقرير نشر 31 يناير بتاريخ 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 Chihab Hedidi نشر 31 يناير أرسل تقرير نشر 31 يناير بتاريخ منذ ساعة مضت قال 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 Ahmed Ahmed64 نشر 31 يناير الكاتب أرسل تقرير نشر 31 يناير بتاريخ 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 لتحديد الصفوف التي تلبي شرط "إسم الطالب" ويعدل القيمة في عمود "التقدير" بناءا على الشرط المحدد. عند تشغيل الكود لم يظهر خطأ كذلك لم يقم بتكوين العمود الحديد " التقدير " اقتباس
السؤال
Ahmed Ahmed64
السلام عليكم
أرجو تصحيح الخطأ بهذا الكود
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
تم التعديل في بواسطة Ahmed Ahmed644 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.