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

تكوين عمود جديد داخل DataFrame

Ahmed Ahmed64

السؤال

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

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

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

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

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

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...