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

السؤال

نشر

السلام عليكم ورحمة الله وبركاته

أوضح لكم سؤالي بشيء من التبسيط لكي يكون مفهوم إلى حضراتكم

السؤال كالتالي :

لدي عمود من DataFrame يحتوي على نتائج طلاب ,,,, أحتاج أن أقوم بتكوين عمود جديد لديه اسم [ التقدير  ] 

أحتاج أن أقوم كتابة كود وظيفة تقوم بالمرور على عمود النتائج وطباعة التقدير في عمود التقدير

=<85 ممتاز

=<75 جيد جداً

=<65 جيد

ضعيف

حاولت كتابة الكود ولاكن لم أنجح في استكماله

        self.searjh['التقدير'] = self.searjh['نتيجة المادة'].apply(lambda x: np.nan if x > 85 else ممتاز)

أرجو المساعدة أساتذتي

 

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته،

بتاريخ 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)

 

  • 0
نشر
بتاريخ 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)

 

  • 0
نشر
بتاريخ 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

 

  • 0
نشر
بتاريخ 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
نشر
بتاريخ 1 دقيقة مضت قال Ahmed Ahmed64:

الطريقة التي قمت بها لأخذ نسخة من الأصلي هكذا

self.df =self.df[['إسم الطالب', 'إسم المادة','الفصل الدراسي' ,'العام الدراسي' , 'نتيجة المادة' ]]

هل هذا سبب المشكلة

نعم، لأن هذه الطريقة تقوم بعمل نسخة مستقلة من DataFrame الأصلي، فأي تعديل عليها لن يؤثر على الأصلي

جرب إضافة copy بالآخر.

  • 0
نشر
بتاريخ 2 دقائق مضت قال El Sayed El Tohamy:

نعم، لأن هذه الطريقة تقوم بعمل نسخة مستقلة من DataFrame الأصلي، فأي تعديل عليها لن يؤثر على الأصلي

جرب إضافة copy بالآخر.

فعلا لقد قمت بهذا الإجراء ولازال التحذير يظهر

self.df1 =self.df[['إسم الطالب', 'إسم المادة','الفصل الدراسي' ,'العام الدراسي' , 'نتيجة المادة' ]].copy()

 

  • 0
نشر (معدل)
بتاريخ 10 دقائق مضت قال El Sayed El Tohamy:

ربما يكون بسبب سطر آخر، تأكد من تطبيق نفس الفكرة على كل DataFrame عندك، وتأكد من حفظ الملف.

المشكلة يبدو كانت هنا في كود البحث وعند إضافة .copy() نهاية السطر تم حل مشكلة التحذير

self.searjh = self.df1[self.df1['إسم الطالب'] == str(self.label_Title.cget("text"))].copy()

جزاك الله خيراً أستاذي

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...