Ahmed Ahmed64 نشر 1 فبراير أرسل تقرير نشر 1 فبراير السلام عليكم ورحمة الله وبركاته أوضح لكم سؤالي بشيء من التبسيط لكي يكون مفهوم إلى حضراتكم السؤال كالتالي : لدي عمود من DataFrame يحتوي على نتائج طلاب ,,,, أحتاج أن أقوم بتكوين عمود جديد لديه اسم [ التقدير ] أحتاج أن أقوم كتابة كود وظيفة تقوم بالمرور على عمود النتائج وطباعة التقدير في عمود التقدير =<85 ممتاز =<75 جيد جداً =<65 جيد ضعيف حاولت كتابة الكود ولاكن لم أنجح في استكماله self.searjh['التقدير'] = self.searjh['نتيجة المادة'].apply(lambda x: np.nan if x > 85 else ممتاز) أرجو المساعدة أساتذتي 1 اقتباس
0 El Sayed El Tohamy نشر 1 فبراير أرسل تقرير نشر 1 فبراير وعليكم السلام ورحمة الله وبركاته، بتاريخ 1 ساعة قال Ahmed Ahmed64: =<85 ممتاز =<75 جيد جداً =<65 جيد ضعيف في مثل هذه الحالات التي يكون فيه كتابة شيفرات مكونة من عدة أسطر، يفضل كتابتها داخل وظيفة function ثم تطبيق هذه الوظيفة على DataFrame def get_grade(degree): if degree >= 85 and degree <= 100: return 'امتياز' elif degree >= 75 and degree < 85: return 'جيد جدًا' elif degree >= 65 and degree < 75: return 'جيد' elif degree >= 50 and degree < 65: return 'ضعيف' elif degree < 50 and degree >= 0: return 'راسب' else: return 'غير صحيح' df['التقدير'] = df['نتيجة المادة'].apply(get_grade) 1 اقتباس
0 Ahmed Ahmed64 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير بتاريخ 15 دقائق مضت قال El Sayed El Tohamy: في مثل هذه الحالات التي يكون فيه كتابة شيفرات مكونة من عدة أسطر، يفضل كتابتها داخل وظيفة وتطبيق هذه الوظيفة على dataframe الخاص بنا def get_grade(degree): if degree >= 85 and degree <= 100: return 'امتياز' elif degree >= 75 and degree < 85: return 'جيد جدًا' elif degree >= 65 and degree < 75: return 'جيد' elif degree >= 50 and degree < 65: return 'ضعيف' elif degree < 50 and degree >= 0: return 'راسب' else: return 'غير صحيح' df['التقدير'] = df['نتيجة المادة'].apply(get_grade) أشكرك أستاذي هذا فعلاً طلبي جزاك الله خيراً الكود نجح أستاذي أستاذي لو سمحت عند التنفيذ يظهر لي هذا الخطأ كيف اتلاشى هذا الخطأ وهو أعتقد ليس خطأ وإنما جانب فني في الكود 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.searjh['نتيجة المادة'].apply(self.get_grade) 1 اقتباس
0 El Sayed El Tohamy نشر 1 فبراير أرسل تقرير نشر 1 فبراير بتاريخ 9 دقائق مضت قال Ahmed Ahmed64: 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.searjh['نتيجة المادة'].apply(self.get_grade) نعم، رغم أنه ليس خطأً، ولكنه تحذير هام جدًا يوضح احتمالية حدوث نتائج كارثية، ومعناه أنك تقوم بتعديل DataFrame مأخوذ من DataFrame أصلي ولكن التعديل الذي تقوم به لن يؤثر في DataFrame الأصلي لأنه مأخوذ بطريقة النسخ المستقل مثل df2 = df1[df1['المادة'] == 'علوم'] ولتجنب هذه المشكلة نقوم بأخذه بطريقة المرجعي، في هذه الحالة التعديلات سوف تؤثر على DataFrame الأصلي df2 = df1[df1['المادة'] == 'علوم'].copy() أما إذا كنت تعلم ما تفعله (على سبيل المثال تقوم بالتجربة فقط)، وتريد إخفاء التحذير، اكتب الشيفرة التالية pd.options.mode.chained_assignment = None 1 اقتباس
0 Ahmed Ahmed64 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير بتاريخ 4 دقائق مضت قال El Sayed El Tohamy: نعم، رغم أنه ليس خطأً، ولكنه تحذير هام جدًا يوضح احتمالية حدوث نتائج كارثية، ومعناه أنك تقوم بتعديل DataFrame مأخوذ من DataFrame أصلي ولكن التعديل الذي تقوم به لن يؤثر في DataFrame الأصلي لأنه مأخوذ بطريقة النسخ المستقل مثل df2 = df1[df1['المادة'] == 'علوم'] ولتجنب هذه المشكلة نقوم بأخذه بطريقة المرجعي، في هذه الحالة التعديلات سوف تؤثر على DataFrame الأصلي df2 = df1[df1['المادة'] == 'علوم'].copy() أما إذا كنت تعلم ما تفعله (على سبيل المثال تقوم بالتجربة فقط)، وتريد إخفاء التحذير، اكتب الشيفرة التالية pd.options.mode.chained_assignment = None الطريقة التي قمت بها لأخذ نسخة من الأصلي هكذا self.df =self.df[['إسم الطالب', 'إسم المادة','الفصل الدراسي' ,'العام الدراسي' , 'نتيجة المادة' ]] هل هذا سبب المشكلة اقتباس
0 El Sayed El Tohamy نشر 1 فبراير أرسل تقرير نشر 1 فبراير بتاريخ 1 دقيقة مضت قال Ahmed Ahmed64: الطريقة التي قمت بها لأخذ نسخة من الأصلي هكذا self.df =self.df[['إسم الطالب', 'إسم المادة','الفصل الدراسي' ,'العام الدراسي' , 'نتيجة المادة' ]] هل هذا سبب المشكلة نعم، لأن هذه الطريقة تقوم بعمل نسخة مستقلة من DataFrame الأصلي، فأي تعديل عليها لن يؤثر على الأصلي جرب إضافة copy بالآخر. 1 اقتباس
0 Ahmed Ahmed64 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير بتاريخ 2 دقائق مضت قال El Sayed El Tohamy: نعم، لأن هذه الطريقة تقوم بعمل نسخة مستقلة من DataFrame الأصلي، فأي تعديل عليها لن يؤثر على الأصلي جرب إضافة copy بالآخر. فعلا لقد قمت بهذا الإجراء ولازال التحذير يظهر self.df1 =self.df[['إسم الطالب', 'إسم المادة','الفصل الدراسي' ,'العام الدراسي' , 'نتيجة المادة' ]].copy() اقتباس
0 El Sayed El Tohamy نشر 1 فبراير أرسل تقرير نشر 1 فبراير بتاريخ 1 دقيقة مضت قال Ahmed Ahmed64: فعلا لقد قمت بهذا الإجراء ولازال التحذير يظهر ربما يكون بسبب سطر آخر، تأكد من تطبيق نفس الفكرة على كل DataFrame عندك، وتأكد من حفظ الملف. 1 اقتباس
0 Ahmed Ahmed64 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير (معدل) بتاريخ 10 دقائق مضت قال El Sayed El Tohamy: ربما يكون بسبب سطر آخر، تأكد من تطبيق نفس الفكرة على كل DataFrame عندك، وتأكد من حفظ الملف. المشكلة يبدو كانت هنا في كود البحث وعند إضافة .copy() نهاية السطر تم حل مشكلة التحذير self.searjh = self.df1[self.df1['إسم الطالب'] == str(self.label_Title.cget("text"))].copy() جزاك الله خيراً أستاذي تم التعديل في 1 فبراير بواسطة Ahmed Ahmed64 1 اقتباس
السؤال
Ahmed Ahmed64
السلام عليكم ورحمة الله وبركاته
أوضح لكم سؤالي بشيء من التبسيط لكي يكون مفهوم إلى حضراتكم
السؤال كالتالي :
لدي عمود من DataFrame يحتوي على نتائج طلاب ,,,, أحتاج أن أقوم بتكوين عمود جديد لديه اسم [ التقدير ]
أحتاج أن أقوم كتابة كود وظيفة تقوم بالمرور على عمود النتائج وطباعة التقدير في عمود التقدير
=<85 ممتاز
=<75 جيد جداً
=<65 جيد
ضعيف
حاولت كتابة الكود ولاكن لم أنجح في استكماله
أرجو المساعدة أساتذتي
8 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.