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

Ahmed Ahmed64

الأعضاء
  • المساهمات

    222
  • تاريخ الانضمام

  • تاريخ آخر زيارة

أجوبة بواسطة Ahmed Ahmed64

  1. بتاريخ 2 ساعة قال Mustafa Suleiman:

    يعني أنه لا يمكنك استخدام مصفوفة غير منطقية للتعامل مع القيم المفقودة (NA/NaN) أثناء عملية التنقية (masking) ، أي أنك تحاول البحث عن اسم داخل مصفوفة تحتوي على قيم NA أو NaN.

    عليك أولاً إزالة أي قيم NA أو NaN من المصفوفة باستخدام وظيفة dropna()، وسأفترض أن المصفوفة الخاصة بك تسمى data:

    data = data.dropna()

    بمجرد إزالة أي قيم NA أو NaN، يمكنك محاولة البحث عن الاسم مرة أخرى.

    نعم هذا صحيح لقد توقعت هذا الرد 

    في الحقيقة استخدمت هذه الشفرة وقد حلت المشكلة

            for index, row in self.rtb[self.rtb['إسم الطالب'].str.contains(self.query, na=False)].iterrows():
                
                self.tree.insert('', 'end', values=(row['إسم الطالب'],))

    تم الحل بهذه الإضافة  na=False

    أشكرك أخي على الإجابة السريعة والمساعدة 

  2. بتاريخ On 19‏/1‏/2024 at 14:08 قال El Sayed El Tohamy:

    هل تقصد البحث في الأسماء عن أي اسم يحتوي كلمة "أحمد" سواء بأولها أو وسطها أو آخرها؟

    إذا كان كذلك يمكنك استخدام الوظيفة contains

    import re
    import pandas as pd
    
    names = pd.DataFrame({
        'Name': ['Ahmed Yousof', 'Abdullah Mohammed', 'Ashraf Ali', 'Fatema El Zahraa'],
        'Arabic': [90, 80, 70, 95], 
        'Math': [100, 99, 95, 90]
        })
    
    result = names[names['Name'].str.contains('ahmed')]
    print(result)

     

    تمام أشكرك أخي هذا ما قصدته

    ماذا لو البحث عن الاسم الأول فقط كيف الطريقة

  3. السلام عليكم

    عذرا لدي سؤال لم أستطيع إيجاد إجابة واضحة له أرجو الشرح إخوتي

    السؤال

    لدي DataFrame بها مجموعة من الأعمدة

    يوجد عمودين أقوم بجمعهم ببعض لينتج لنا عمود جديد

    أريد أن يكون هناك شرط باسم أحد الأعمدة بحيث لو كان هناك صف في هذا العمود أصغر من 50 أو به قيمة فارغة فلا يقوم بأي عملية في هذا الصف وتكون عمليه الجمع في العمود الجديد = 0

  4. بتاريخ 1 ساعة قال El Sayed El Tohamy:

    قم بتغيير عناوين الأعمدة لتمييزها عن بعضها، ثم قم بعملية إعادة الترتيب، ثم إرجاع أسماء الأعمدة مرة لأخرى لأصلها.

    ولكن منطقيًا، يجب أن يكون لكل عمود اسمًا مميزًا له.

    هل من الممكن ترتيب الأعمدة برقم العمود وليس بإسمه

  5. السلام عليكم

    قمت بإنشاء DataFrame

    ومن ثم قمت بالتعديل على أسماء الأعمدة 

    df = pd.DataFrame(df.values, columns=column_names)

    حاولت إعادة ترتيب الأعمدة برقم العمود

    df.reindex(columns=[ 0,1,2,3,4,5,6,7,8,9,10,11,14,13,12])

    لاكن هناك خطأ

    ValueError: cannot reindex on an axis with duplicate labels

    علماُ أن لدي أعمدة تحتوي على نفس اسم عمود أخر

    فما الحل لإعادة الترتيب

  6. بتاريخ 54 دقائق مضت قال El Sayed El Tohamy:

    إذن ستكون هناك قيم فارغة في العمود الذي نقفر فيه،

    فإذا كان لدينا عشرون صفًا، فسيظهروا جميعًا مع كل الأعمدة، ما عدا العمود الأول يظهر به عشرة صفوف فقط لأننا، فكيف تريد عرضها؟

    أعط مثالًا حتى تكون الصورة واضحة.

    كيف أقوم إجراء عملية على عمودين باستدعاء رقم العمود وليس اسم العمود

    هل هذا الكود صحيح هكذا

    Table1['المجموع الكلي'] = Table1[1] + Table1[2]

     

  7. بتاريخ 1 دقيقة مضت قال El Sayed El Tohamy:

    وماذا عن القيم الفارغة؟

    لأنك ستحصل على عدد غير متساوٍ من الصفوف؟ هل تقصد أن الصفوف التي لا يقرأها يجعلها فارغة؟

    إذا كان كذلك، يمكنك تنفيذه عن طريق:

    قراءة كل الملف، ثم تحديد الصفوف المراد إخفاؤها وجعلها فارغة

    
    df.iloc[1::2, :] = np.nan

     

    عفواً لم يكن هكذا السؤال 

    أقصد أن يقفز سطر 

    كا التالي     df.iloc[3::2, [2,3,5,]]

    هنا  القفز لجميع الأعمدة ولاكن أحتاج أن يكون القفز داخل أحد الأعمدة فقط 

    كيف أقوم التعديل إذا على هذا الكود

    selected_columns = df.iloc[3:, [2, 3, 5]]

  8. بتاريخ 15 دقائق مضت قال Adnane Kadri:

     العد يبدأ من الصفر لكل من الصفوف والأعمدة. لذا، الصف الأول يمثله الرقم 0، والعمود الأول يمثله الرقم 0 وهكذا ..

    أخي لنفترض أن لدي عمود وليكن العمود 3 أحتاج أن أقرأ منه سطر وأتجاهل السطر الذي يله وهكذا حتى أخر العمود كيف يتم ذلك  وباقي الأعمدة يتم قراءة كل الأسطر

    أرجو التعديل هنا على هذا الكود لكي أفهم التعديل أين يتم

    selected_columns = df.iloc[3:, [2, 3, 5]]

    أسف على الإطالة معك في الحقيقة لقد أوضحت لي الكثير 

     

  9. بتاريخ 8 دقائق مضت قال Adnane Kadri:

    يمكنك استخدام قوس مربعي فارغ لتحديد الصفوف الكل (:) واختيار الأعمدة المطلوبة. على سبيل المثال، إذا كنت تريد اختيار العمودين 2 و 3 وتجاهل العمود 4 وتحتاج العمود 5، يمكنك القيام بذلك كما يلي:

    selected_columns = df.iloc[3:, [2, 3, 5]]

    سيشتمل هذا على الصفوف من الصف 3 وما بعدها، والأعمدة 2 و 3 و 5.

    كما أن لدي استفسار أخر وأسف على الإطالة أخي

    هل العد يبدأ من 0 أو 1 بالنسبة للأعمدة والصفوف

     

  10. بتاريخ 7 دقائق مضت قال Adnane Kadri:

     الجزء df.iloc[3:, 2:4] يستخدم لتحديد جزء معين من DataFrame باستخدام تقديم الصفوف والأعمدة المحددة. فـ:

    • 3:: يعني ابتداءً من الصف رقم 3 وحتى نهاية الصفوف. هذا يتجاوز الصفوف الثلاثة الأولى (التي قد تحتوي على عناوين الأعمدة أو معلومات غير ضرورية).
    • 2:4: يعني ابتداءً من العمود رقم 2 وحتى العمود رقم 3.

    وهكذا يتم اختيار العمودين الثاني والثالث.

    لنفترض أني لا أريد عمود معين فهذا لا ينجح    (  2:4: يعني ابتداءً من العمود رقم 2 وحتى العمود رقم 3. )

    أحيانا قد أحتاج عمود 2 و 3 وأتجاهل 4 وأحتاج العمود 5  فكيف أقوم بذلك

    كما أن لدي استفسار أخر هل العد يبدأ من 0 أو 1 بالنسبه للأعمدة والصفوف

  11. بتاريخ 4 دقائق مضت قال Adnane Kadri:

    الكود الذي كتبته لإنشاء DataFrame يبدو صحيحا بشكل عام، ولكن إليك طريقة أفضل لتحديد الأعمدة وإعطائها أسماء:

    # اختيار الأعمدة المحددة من DataFrame الأصلي
    selected_columns = df.iloc[3:, 2:4]
    
    # تحديد أسماء الأعمدة
    column_names = ['الأول', 'الثاني']
    
    # إنشاء DataFrame
    df1 = pd.DataFrame(selected_columns.values, columns=column_names)

    بهذه الطريقة، سيتم تحديد الأعمدة 2 و 3 من DataFrame الأصلي (iloc[3:, 2:4]) وتخزينها في المتحول selected_columns. ثم تحديد أسماء الأعمدة وأخيرًا إنشاء DataFrame جديد باستخدام هذه الأعمدة وأسمائها.

    df.iloc[3:, 2:4]

    أخي هل لك أن توضح لي أكثر 

    لقد ذكرت العمود 2 و العمود الثالث

    إذا كيف تم الكتابه هكذا

    • أعجبني 1
  12. السلام عليكم ورحمة الله وبركاته

    جمعة طيبة للجميع

    في البداية أحب أن أشكر كل من ساهم في تلقيني معلومة في هذا الصرح العلمي والذي عن نفسي استفدت منه كثيراُ

    إخوتي لقد تكونت لدي مجموعة من الأفكار عن كتابة الكود ولاكن في بعض الأحيان أكون عاجز عن استكماله

    الأن أحاول تصميم DataFrame من جدول Excel

    في البداية لكي تكون الصورة واضحة لكم 

    الجدول يتكون من مجموعة كبيرة من الأعمدة ليس لها عنوان .... لنفترض أن الصف الأول حتى الصف الثالث لا يحتوي أي بيانات ،،، أود أن أقوم بإنشاءDataFrame

    في البداية قمت بي بقراءة الملف هكذا

    df = pd.read_excel("ABC.xlsx")

    مثلا أود أن أقرأ العمود 3 قمت بذلك 

    df.iloc[3::, 2]

    أود أيضا أن أقرأ العمود 4 قمت بذلك 

    df.iloc[3::, 3]

    الأن سؤالي كيف أقوم بتكوين DataFrame من هذه الأعمدة مع إعطاء اسم فهرس لكل عمود حتى أتعامل به في المستقبل

    DATA = {'الأول':df.iloc[3::, 2],'الثاني':df.iloc[3::, 3]}
    df1 = pd.DataFrame(DATA)

    هل الكود هكذا به مشكلة إن كان كتابة الكود غير سليم فأرجو شرح كيف أقوم بهذا

    • أعجبني 1
  13. بتاريخ 5 ساعة قال Khaled Osama3:

    يمكنك استيراد مكتبة Pandas باستخدام import pandas as pd. هذه الخطوة تتيح لنا استخدام طرق وأدوات Pandas مثل القراءة وكتابة الDataFrame.

    import pandas as pd

    2. قراءة البيانات من ملف إكسل باستخدام pd.read_excel() وتخزينها في متغير df. 

    # get file xlsx
    df = pd.read_excel("data.xlsx")

    3. معاينة الداتا فريم باستخدام print(df) للتأكد من القراءة.

    # Print the dataframe
    print(df)

    4. إضافة عمود جديد بإعادة تسمية أحد المواد.

    # make الماده = second column header
    df['الماده'] = df.columns[1]

    5. إعادة تسمية أسماء الأعمدة باستخدام df.rename().

    # rename columns
    df = df.rename(columns={df.columns[0]: 'الاسم', df.columns[1]: 'امتحان اول', df.columns[2]: 'امتحان ثاني', df.columns[3]: 'النهائي'})

    6. ترتيب الأعمدة بالترتيب المطلوب باستخدام df[['عمود1'...'عمودn']].

    # sort columns
    df = df[['الاسم', 'الماده', 'امتحان اول', 'امتحان ثاني', 'النهائي']]

     

    رائع أخي شرح واضح

    ولاكن واجهة مشكلة في هذا الجدول كيف أقوم بذلك  

    image.png.797ab257beac5b6466dedc117066d8b4.png

    التحويل لهذا الشكل

    image.png.4e52f820fdaccd132aeba2c7c104de1d.png

    لو لاحظت أحي يوجد مادتين

  14. السلام عليكم

    لنفترض أن لدينا DataFrame تحتوي على عمود Name  هذا العمود به الاسم ثلاثي وأردت أن أقوم بالبحث عن اسم معين داخل هذا العمود  و لنفترض أن الاسم أحمد

    كيف أستحرج جميع الحقول التي تحتوي على اسم أحمد 

    إذا أمكن أيضا أخي أحتاج أن تكون عرض النتيجة داخل أداة  Treeview - Python Tkinter

    • أعجبني 1
  15. بتاريخ On 16‏/1‏/2024 at 17:26 قال El Sayed El Tohamy:

    لمعرفة ما إذا كانت القيمة موجودة أم لا، نقوم بعملية البحث بشكل عادي جدًا، وبعدها نسأل عن dataframe هل هو فارغ

    search1 = names[names['Name'] == 'Ali']
    
    if search1.empty: # يتحقق الشرط في حالة عدم وجود القيمة 
        print("no result")

     

    أخي لنفترض أن لدينا DataFrame تحتوي على عمود Name  هذا العمود به الاسم ثلاثي وأردت أن أقوم بالبحث عن اسم معين لنفترض أن الاسم أحمد

    كيف أستحرج جميع الحقول التي تحتوي على اسم أحمد 

    إذا أمكن أيضا أخي أحتاج أن تكون النتيجة داخل أداة  Treeview - Python Tkinter

  16. بتاريخ 14 دقائق مضت قال Chihab Hedidi:

    تظهر الرسالة "See the caveats in the documentation" عندما تقوم بتعديل قيم في DataFrame بطريقة يمكن أن تؤثر على النسخة الأصلية، يعني هذا أن هناك احتمالا لحدوث تأثير جانبي على البيانات الأصلية.

    قد ظهرت هذه الرسالة إذا كانت هناك قيم غير صحيحة في العمود 'وحدة دراسية' وتم تحويلها إلى NaN، لذا تأكد أن كل سطر في العمود يحتوي على قيم و تكون عبارة عن أرقام.

    تم التأكيد وقد اختفت هذه الرسالة 

    المشكلة الأن أن الجمع غير صحيح

    • أعجبني 1
  17. أشكرك أخي على التوضيح

    فعلا الأن تم تطبيق البرنامج ولاكن المشكلة في عملية الجمع تظهر خاطئة

    كما أن هناك هذه الأسطر لم أفهمها

    See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
      names2['وحدة دراسية'] = pd.to_numeric(names2['وحدة دراسية'], errors='coerce')
    4115460.0

    بتاريخ 18 دقائق مضت قال 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
      names2['وحدة دراسية'] = pd.to_numeric(names2['وحدة دراسية'], errors='coerce')
    4115460.0

    قمت بتحويل إلى DataFrame وقد عالجة المشكلة الأخيرة

    وهذه مخرجات  لاكن نتيجة الجمع لها خطأ

     4115460.0
    رقم القيد         object
    رمز المقرر        object
    الفصل الدراسي     object
    الاعمال            int64
    النهائي          float64
    المجموعة           int64
    وحدة دراسية        int64
    cc               float64
    dtype: object

    • أعجبني 1
  18. بتاريخ 3 دقائق مضت قال Chihab Hedidi:

    تأكد من أن العمود لا يحتوي على أي كلمات، اذا تستطيع أرفق الكود مع الملف لأطلع عليه أكثر.

    names2 =melted_df[['رقم القيد', 'رمز المقرر' , 'الفصل الدراسي' , 'الاعمال' , 'النهائي' , 'المجموعة' ]]
                    names2['وحدة دراسية']=melted_df['المادة'].map(self.Subjects_SH).fillna('Other')
                    names2['cc']=names2['النهائي'] * names2['وحدة دراسية']
                    df3 = pd.DataFrame(names2)
                    Total = df3['cc'].sum()
                    
                    print(Total)

     

    • أعجبني 1
  19. بتاريخ 7 دقائق مضت قال Chihab Hedidi:

    يمكنك ذلك باستخدام مكتبة pandas في Python لتنفيذ هذه العملية، سأكتب لك كود كمثال لتفهم أكثر:

    import pandas as pd
    
    # قم بتعريف DataFrame الخاص بك
    data = {'Column1': [1, 2, 3, 4],
            'Column2': [5, 6, 7, 8],
            'Column3': [9, 10, 11, 12]}
    
    df = pd.DataFrame(data)

    إذا أردت جمع قيم Column1 وتقسيمها على قيم Column2، يمكنك استخدام الكود التالي:

    # جمع قيم Column1
    sum_column1 = df['Column1'].sum()
    
    # جمع قيم Column2
    sum_column2 = df['Column2'].sum()
    
    # تقسيم النتيجة
    result = sum_column1 / sum_column2
    
    print(result)

    هذا سيعطيك النتيجة المطلوبة. يمكنك تعديل الأعمدة والبيانات وفقا لاحتياجات DataFrame الخاص بك.

    أحسنت أخي هذا ما فعلته بالضبط ولاكن يظهر هذا الخطأ

    TypeError: unsupported operand type(s) for +: 'float' and 'str'

    علما أن البيانات كلها أرقام بهذا العمود

  20. بتاريخ 14 ساعة قال El Sayed El Tohamy:

    هذه هي الشيفرات كاملة

    # استيراد المكتبات اللازمة
    import customtkinter
    import tkinter as tk
    
    app = customtkinter.CTk()
    entry = customtkinter.CTkEntry(app)
    
    # ربط عمليتي النسخ واللصق باختصارات لوحة المفاتيح
    entry.bind("<Control-c>", lambda e: entry.event_generate("<<Copy>>"))
    entry.bind("<Control-v>", lambda e: entry.event_generate("<<Paste>>"))
    
    entry.pack()
    app.mainloop()

    ملحوظة:

    افتراضيًا تدعم أداة الإدخال Entry عملية القص، والنسخ، واللصق تلقائيًا باستخدام اختصارات لوحة المفاتيح دون الحاجة لكتابة هذه الشيفرات، لكن في حالة نظام التشغيل لا يدعمها يمكننا استخدام هذه الشيفرات.

    أما إذا كنت تريد إظهار قائمة منبثقة (تظهر بالنقر اليمين) وتظهر بها هذه الأوامر، يمكنك استخدام المثال التالي

    # Import the customtkinter and tkinter modules
    import customtkinter
    import tkinter as tk
    
    window = tk.Tk()
    
    entry = tk.Entry(window)
    entry.pack()
    
    # إنشاء القائمة المنبثقة (بالنقر الأيمن) وإضافة ثلاثة عناصر لها
    popup_menu = tk.Menu(window, tearoff=0)
    popup_menu.add_command(label="Cut", command=lambda: entry.event_generate("<<Cut>>"))
    popup_menu.add_command(label="Copy", command=lambda: entry.event_generate("<<Copy>>"))
    popup_menu.add_command(label="Paste", command=lambda: entry.event_generate("<<Paste>>"))
    
    # هذه الوظيفة لإظهار القائمة المنبثقة مكان النقر باليمين
    def show_popup_menu(event):
      popup_menu.post(event.x_root, event.y_root)
      
    # ربط القائمة المنبثقة بحدث النقر بالزر الأيمن
    entry.bind("<Button-3>", show_popup_menu)
    window.mainloop()

     

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

  21. بتاريخ 1 ساعة قال El Sayed El Tohamy:

    تريد تمكين وظائف النسخ واللصق من وإلى أداة Entry، بمعني إمكانية نسخ المحتوى عندما يضغط المستخدم الاختصار المعروف ctrl-c وكذلك اللصق عن طريق الاختصار ctrl-v

    # ننشيئ الأداة
    entry = customtkinter.CTkEntry(app)
    
    # نربط وظائف النسخ واللصق باختصارات من لوحة المفاتيح
    entry.bind("<Control-c>", lambda e: entry.event_generate("<<Copy>>"))
    entry.bind("<Control-v>", lambda e: entry.event_generate("<<Paste>>"))

     

    هل يعمل هذا الكود مباشرة أم هناك كود تنفيذ

    بهذه الطريقة لم يعمل الكود

    عفواً أخي هل لك أن توضح لي أكثر

×
×
  • أضف...