Ahmed Ahmed64 نشر 20 ديسمبر 2023 أرسل تقرير نشر 20 ديسمبر 2023 السلام عليكم إخوتي مساعدة في كتابة كود يقوم بالوظيفة التالية لدي ملف إكسل يحتوي على مجموعة من الأعمدة والصفوف أحتاج أن أستخرج العمود الثالث والرابع و الخامس على سبيل المثال وأكون من ذلك DataFrame باستخدام مكتبة pandas بعد تكوين DataFrame أريد أن أقوم بعملية قراءه صف صف من هذه DataFrame للأعمدة المتكونة منها وأن أستخرج القيمة الأكبر والتخزين في عمود جديد نوضح لكم أكثر أقرأ الصف الأول وأقارن بين الثلاثة الأعمدة التي تكونت منها وأستخرج أكبر قيمة ومن ثم تخزينها على عمود جديد أقرأ الصف الثاني وأقارن بين الثلاثة الأعمدة التي تكونت منها وأستخرج أكبر قيمة ومن ثم تخزينها على عمود جديد الذي تم تكوينه سابقا 1 اقتباس
0 Khaled Osama3 نشر 20 ديسمبر 2023 أرسل تقرير نشر 20 ديسمبر 2023 حسنًا، هذا الكود قد يحقق المهمة المطلوبة: import pandas as pd # قراءة الملف الإكسل df = pd.read_excel('file.xlsx', usecols=[2,3,4]) # تكوين عمود جديد لتخزين أكبر القيم في كل صف df['max'] = df.max(axis=1) # حفظ النتيجة df.to_excel('output.xlsx', index=False) # index=False لعدم حفظ الأرقام الخاصة بالصفوف 1 اقتباس
0 Ahmed Ahmed64 نشر 20 ديسمبر 2023 الكاتب أرسل تقرير نشر 20 ديسمبر 2023 أرجو مثال أخر باستخدام DataFrame مع iloc 1 اقتباس
0 Khaled Osama3 نشر 20 ديسمبر 2023 أرسل تقرير نشر 20 ديسمبر 2023 نعم بالطبع سأكتب لك الكود الجديد ولكن الاختلاف في الكود صغير اليك مثال اخر: import pandas as pd # قراءة الملف الإكسل df = pd.read_excel('file.xlsx') // تم تعديله # تكوين عمود جديد لتخزين أكبر القيم في كل صف df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1) // تم تعديله # حفظ النتيجة df.to_excel('output.xlsx', index=False) # index=False لعدم حفظ الأرقام الخاصة بالصفوف `iloc` هي وسيلة للوصول إلى البيانات في DataFrame باستخدام تعيين الفهرس (integer-location based indexing). يتيح لك `iloc` تحديد الصفوف والأعمدة بناءً على مواقعها بالفهرس، بدلاً من استخدام الأسماء. تستخدم `iloc` بهذه الطريقه: data.iloc[row_index, column_index] بالمثال السابق، `df.iloc[:, 2:5]` يعني استخراج كل الصفوف والأعمدة من الثالثة (العمود 2) إلى الخامسة (العمود 4). 1 اقتباس
0 Ahmed Ahmed64 نشر 20 ديسمبر 2023 الكاتب أرسل تقرير نشر 20 ديسمبر 2023 بتاريخ 18 دقائق مضت قال Khaled Osama3: نعم بالطبع سأكتب لك الكود الجديد ولكن الاختلاف في الكود صغير اليك مثال اخر: import pandas as pd # قراءة الملف الإكسل df = pd.read_excel('file.xlsx') // تم تعديله # تكوين عمود جديد لتخزين أكبر القيم في كل صف df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1) // تم تعديله # حفظ النتيجة df.to_excel('output.xlsx', index=False) # index=False لعدم حفظ الأرقام الخاصة بالصفوف `iloc` هي وسيلة للوصول إلى البيانات في DataFrame باستخدام تعيين الفهرس (integer-location based indexing). يتيح لك `iloc` تحديد الصفوف والأعمدة بناءً على مواقعها بالفهرس، بدلاً من استخدام الأسماء. تستخدم `iloc` بهذه الطريقه: data.iloc[row_index, column_index] بالمثال السابق، `df.iloc[:, 2:5]` يعني استخراج كل الصفوف والأعمدة من الثالثة (العمود 2) إلى الخامسة (العمود 4). جيد جدا هذا المثال هنا الأن كيف يمكن أن أستخرج القيمة الأكبر كما فعلت بالمثال الأول اقتباس
0 Khaled Osama3 نشر 20 ديسمبر 2023 أرسل تقرير نشر 20 ديسمبر 2023 بتاريخ 4 دقائق مضت قال Ahmed Ahmed64: جيد جدا هذا المثال هنا الأن كيف يمكن أن أستخرج القيمة الأكبر كما فعلت بالمثال الأول عن طريق استخدام فانكشن max و تخزين القيمه الاكبر في عمود اسمه "أكبر_قيمة" df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1) // تم تعديله ولقد استخدمنا axis = 1 لكي ينظر لمحور X الافقي, يعني العثور على القيمة القصوى (الأكبر) في كل صف . 1 اقتباس
0 Ahmed Ahmed64 نشر 20 ديسمبر 2023 الكاتب أرسل تقرير نشر 20 ديسمبر 2023 بتاريخ 18 دقائق مضت قال Khaled Osama3: عن طريق استخدام فانكشن max و تخزين القيمه الاكبر في عمود اسمه "أكبر_قيمة" df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1) // تم تعديله ولقد استخدمنا axis = 1 لكي ينظر لمحور X الافقي, يعني العثور على القيمة القصوى (الأكبر) في كل صف . أخي هل يمكن أن أستخرج بين القيمة الأكبر بوجود خلية فارغة أي مثلا عمود به قيمة 20 مثلا والعمود الأخر قيمة فارغة بحيث تكون النتيجة 20 1 اقتباس
0 Khaled Osama3 نشر 20 ديسمبر 2023 أرسل تقرير نشر 20 ديسمبر 2023 بتاريخ 27 دقائق مضت قال Ahmed Ahmed64: أخي هل يمكن أن أستخرج بين القيمة الأكبر بوجود خلية فارغة أي مثلا عمود به قيمة 20 مثلا والعمود الأخر قيمة فارغة بحيث تكون النتيجة 20 بالطبع هذا الكود بالاعلي يفعل هذا عندما يجد قيمه فارغه سياخذ القيمه الاعلي ويمكنك اضافه هذا السطر لملئ كل القيم الفارغه بقيمه = 0 df.fillna(0, inplace=True) 1 اقتباس
0 Ahmed Ahmed64 نشر 20 ديسمبر 2023 الكاتب أرسل تقرير نشر 20 ديسمبر 2023 بتاريخ 24 دقائق مضت قال Khaled Osama3: بالطبع هذا الكود بالاعلي يفعل هذا عندما يجد قيمه فارغه سياخذ القيمه الاعلي ويمكنك اضافه هذا السطر لملئ كل القيم الفارغه بقيمه = 0 df.fillna(0, inplace=True) رائع أخي لو سمحت لدي سؤال أخر بنفس النمط السابق أحتاج أن أستخدم دالة if حيث مثلا عند استخدام max بين عمودين ووجدت القيمة أكبر من 50 مثلا أريد أن يتجاهل القيمة الكبرى ويطبع مكانها 50 1 اقتباس
0 Khaled Osama3 نشر 21 ديسمبر 2023 أرسل تقرير نشر 21 ديسمبر 2023 بتاريخ 4 ساعة قال Ahmed Ahmed64: رائع أخي لو سمحت لدي سؤال أخر بنفس النمط السابق أحتاج أن أستخدم دالة if حيث مثلا عند استخدام max بين عمودين ووجدت القيمة أكبر من 50 مثلا أريد أن يتجاهل القيمة الكبرى ويطبع مكانها 50 حسنا اخي يمكنك استخدام داله apply في مكتبه pandas بمساعده داله lambda وتعديل سطر الكود لهذا df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1).apply(lambda x: 50 if x > 50 else x) نحن هنا اضفنا شرط لو كانت القيمه الكبري اكبر من 50 ستظل 50, لكن لو اصغر سياخذ القيمه الكبري حل اخر يمكنك استخدام for loop سيتكرر هذا الكود لكل صف في الداتا يقوم أولاً بحساب القيمه الكبري مثل الكود السابق وتخزينها في عمود "أكبر_قيمة". ثم يتكرر فوق هذا العمود ويستبدل أي قيمة أكبر من 50 بـ 50. يمكنك اضافه هذا الكود بعد مباشره تكوين عمود 'أكبر_قيمة' for i in range(len(df['أكبر_قيمة'])): if df['أكبر_قيمة'].iloc[i] > 50: df['أكبر_قيمة'].iloc[i] = 50 1 اقتباس
0 Ahmed Ahmed64 نشر 21 ديسمبر 2023 الكاتب أرسل تقرير نشر 21 ديسمبر 2023 هذا المطلوب تماما أخي لاكن ظهرت لي مشكلة عند التنفيذ أرجو شرحها لي Table['2أكبر_قيمة'] = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) ^^^^^^ TypeError: '>' not supported between instances of 'NoneType' and 'int' اقتباس
0 Ahmed Ahmed64 نشر 21 ديسمبر 2023 الكاتب أرسل تقرير نشر 21 ديسمبر 2023 هل يمكن التعديل للكود الثالي Table['3أكبر_قيمة'] = Table.iloc[:, [14,15]].max(axis=1).apply(lambda x: Table.iloc[:, [15]],axis=1 if x < 50 or x > 0 else Table.iloc[:, [14]],axis=1) حيث أريد أن أطبق شرط إذا كان العمود 15 القيمة به أصغر من 50 وأكبر من 0 أجعل النتيجة تأخذ قيمة العمود 14 اقتباس
0 Khaled Osama3 نشر 21 ديسمبر 2023 أرسل تقرير نشر 21 ديسمبر 2023 بتاريخ 1 ساعة قال Ahmed Ahmed64: لاكن ظهرت لي مشكلة عند التنفيذ أرجو شرحها لي Table['2أكبر_قيمة'] = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) ^^^^^^ TypeError: '>' not supported between instances of 'NoneType' and 'int' المشكلة هنا تحدث بسبب وجود قيم None في الأعمدة المراد مقارنتها. عندما تحاول مقارنة None مع رقم عن طريق > فإنه لن يسمح بذلك لأن None ليست قيمة رقمية. هناك عدة طرق لحل هذه المشكلة: 1- استبدال قيم None بقيمة أخرى مثل 0 قبل عملية المقارنة: Table.fillna(0, inplace=True) 2- تجاهل الصفوف التي تحتوي على None: Table = Table[Table[col1].notna() & Table[col2].notna()] بتاريخ منذ ساعة مضت قال Ahmed Ahmed64: هل يمكن التعديل للكود الثالي Table['3أكبر_قيمة'] = Table.iloc[:, [14,15]].max(axis=1).apply(lambda x: Table.iloc[:, [15]],axis=1 if x < 50 or x > 0 else Table.iloc[:, [14]],axis=1) حيث أريد أن أطبق شرط إذا كان العمود 15 القيمة به أصغر من 50 وأكبر من 0 أجعل النتيجة تأخذ قيمة العمود 14 نعم يمكن تعديل الكود لتطبيق الشرط المطلوب: # ايجاد اكبر قيمة بين العمودين 14 و 15 max_col = Table.iloc[:, [14,15]].max(axis=1) # تطبيق الشرط Table['3أكبر_قيمة'] = max_col.apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x ) نقوم بإيجاد أكبر قيمة بين العمودين رقم 14 و 15 في DataFrame المسمى `Table`. ثم نقوم بإضافة عمود إلى DataFrame يسمى '3أكبر_قيمة'. ثم نطبق دالة (function) على كل قيمة في `max_col`. الدالة هنا هي `lambda x: Table.iloc[:, 14] if 0 < x < 50 else x`. إذا كانت القيمة `x` بين 0 و50، فإن القيمة المطلوبة تكون `Table.iloc[:, 14]` (قيمة في العمود 14). إذا لم تكن تلبي هذا الشرط، يتم استخدام القيمة الأصلية `x`. 1 اقتباس
0 Ahmed Ahmed64 نشر 21 ديسمبر 2023 الكاتب أرسل تقرير نشر 21 ديسمبر 2023 (معدل) بتاريخ 4 ساعة قال Khaled Osama3: المشكلة هنا تحدث بسبب وجود قيم None في الأعمدة المراد مقارنتها. عندما تحاول مقارنة None مع رقم عن طريق > فإنه لن يسمح بذلك لأن None ليست قيمة رقمية. هناك عدة طرق لحل هذه المشكلة: 1- استبدال قيم None بقيمة أخرى مثل 0 قبل عملية المقارنة: Table.fillna(0, inplace=True) 2- تجاهل الصفوف التي تحتوي على None: Table = Table[Table[col1].notna() & Table[col2].notna()] نعم يمكن تعديل الكود لتطبيق الشرط المطلوب: # ايجاد اكبر قيمة بين العمودين 14 و 15 max_col = Table.iloc[:, [14,15]].max(axis=1) # تطبيق الشرط Table['3أكبر_قيمة'] = max_col.apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x ) نقوم بإيجاد أكبر قيمة بين العمودين رقم 14 و 15 في DataFrame المسمى `Table`. ثم نقوم بإضافة عمود إلى DataFrame يسمى '3أكبر_قيمة'. ثم نطبق دالة (function) على كل قيمة في `max_col`. الدالة هنا هي `lambda x: Table.iloc[:, 14] if 0 < x < 50 else x`. إذا كانت القيمة `x` بين 0 و50، فإن القيمة المطلوبة تكون `Table.iloc[:, 14]` (قيمة في العمود 14). إذا لم تكن تلبي هذا الشرط، يتم استخدام القيمة الأصلية `x`. معذرة أخي أين الخطأ عندي في هذا الكود لو سمحت حاولت ولاكن لم أستطع فهم الخطأ Table['3أكبر_قيمة'] = Table.iloc[:, 15](axis=1).apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x) أشرح لك الفكرة التي أحاول الوصول إليها الأن بشكل مختصر أريد أن أنظر في العمود 15 إذا كانت القيمة = 0 ينسخ قيمة العمود 14 ويضعها في العمود الجديد وإذا كانت القيمة أكبر من 0 وأصغر من 50 ينسخ قيمة العمود 15 وهي التي يضعها في العمود الجديد هذا ما حولت أن أفعله وجزاك الله خيراً أخي خالد تم التعديل في 21 ديسمبر 2023 بواسطة Ahmed Ahmed64 اقتباس
0 Khaled Osama3 نشر 22 ديسمبر 2023 أرسل تقرير نشر 22 ديسمبر 2023 بتاريخ 11 ساعة قال Ahmed Ahmed64: معذرة أخي أين الخطأ عندي في هذا الكود لو سمحت حاولت ولاكن لم أستطع فهم الخطأ Table['3أكبر_قيمة'] = Table.iloc[:, 15](axis=1).apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x) أشرح لك الفكرة التي أحاول الوصول إليها الأن بشكل مختصر أريد أن أنظر في العمود 15 إذا كانت القيمة = 0 ينسخ قيمة العمود 14 ويضعها في العمود الجديد وإذا كانت القيمة أكبر من 0 وأصغر من 50 ينسخ قيمة العمود 15 وهي التي يضعها في العمود الجديد هذا ما حولت أن أفعله وجزاك الله خيراً أخي خالد هناك خطأ في الكود عند استخدام apply و lambda: - يجب استخدام apply مع دالة معرفة مسبقا وليس بصيغة lambda. - في صيغة lambda يجب استخدام متغير واحد فقط x وليس إشارة للمصفوفة مباشرة. الكود الصحيح: def func(x): if 0 < x < 50: return Table.iloc[:, 14] else: return x Table['3أكبر_قيمة'] = Table.iloc[:, 15].apply(func) أو بدون استخدام lambda/func: Table['3أكبر_قيمة'] = Table.iloc[:, 15].apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x) في الكود الأصلي كان هناك خطأ في استخدام apply مع lambda وإشارة مباشرة إلى المصفوفة داخلها. حسنا اخي هذا هو الكود بعد اضافه المطلوب Table.fillna(0, inplace=True) Table['3أكبر_قيمة'] = Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] < 50 else None, axis=1) 1 اقتباس
0 Ahmed Ahmed64 نشر 22 ديسمبر 2023 الكاتب أرسل تقرير نشر 22 ديسمبر 2023 (معدل) شكرا أستاذ خالد على المساعدة بارك الله فيك وجزاك الله خيراً جمعة مباركة أخي خالد أسف على الإطالة في الأسئلة سؤال أخر سمحت نحن في الأمثلة السابقة نقوم بطباعة عمود جديد ويضاف إلى الجدول هكذا Table['3أكبر_قيمة'] = لنفترض أني لا أريد الطباعة في الجدول أي لا تظهر للمستخدم وفي نفس الوقت أحتاج أن تكون من ضمن الجدول لتنفيذ العمليات عليها كيف ممكن أقوم بذلك لتحسين هذا الكود df = pd.read_excel("aaa.xlsx",header=None) selected_column_1 = df.iloc[8::2, [0,1,2,3,4,5,6]] selected_column_1.reset_index(drop=True, inplace=True) selected_column_2 = df.iloc[9::2, [2,3,4,5,6]] selected_column_2.reset_index(drop=True, inplace=True) A = pd.DataFrame(selected_column_1) B = pd.DataFrame(selected_column_2) Table=pd.concat([A,B],axis=1) repeated_values1 = [] repeated_values2 = [] for i in range(len(Table)): repeated_values1.append(df.iloc[6,3]) repeated_values2.append(df.iloc[3,4]) Table['الإسم'] = repeated_values1 Table['الرقم'] = repeated_values2 Table.fillna(0, inplace=True) Table['1أكبر_قيمة'] =Table.iloc[:, [5,6]].max(axis=1) Table['2أكبر_قيمة'] =Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) Table['3أكبر_قيمة'] = Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] <= 50 else None, axis=1) في الكود السابق أريد التعديل عليه حيث أن العمود Table['1أكبر_قيمة'] = و العمود Table['2أكبر_قيمة'] = لا أريد طباعتهم وفي نفس الوقت أحتاجهم في التطبيق عليهم في الكود Table['3أكبر_قيمة'] = Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] <= 50 else None, axis=1) هل من طريقة لحفظهم في متغير مثلا ---------------------------------------------------------------------------------------------------------- هذه محاولة مني ولاكن يوجد العديد من الإخطاء أرجو منك أخي المراجعة والتصحيح إذ أمكن repeated_values1 = [] repeated_values2 = [] repeated_values3 = [] repeated_values4 = [] for i in range(len(Table)): repeated_values1.append(df.iloc[6,3]) repeated_values2.append(df.iloc[3,4]) Table['إسم المادة'] = repeated_values1 Table['العام الدراسي'] = repeated_values2 Table.fillna(0, inplace=True) repeated_values3.append(Table.iloc[:, [5,6]].max(axis=1)) repeated_values4.append(Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)) Table['3أكبر_قيمة'] = Table.apply(lambda row: row.repeated_values3 if row.repeated_values4 == 0 else row.repeated_values4 if 0 < row.repeated_values4 <= 50 else None, axis=1) تم التعديل في 22 ديسمبر 2023 بواسطة Ahmed Ahmed64 اقتباس
0 Khaled Osama3 نشر 22 ديسمبر 2023 أرسل تقرير نشر 22 ديسمبر 2023 جزاك الله خيرا. طريقة حفظ الأعمدة دون طباعتها في الجدول، يمكنك حفظ قيم الأعمدة في متغيرات منفصلة بدلاً من إضافتها للجدول مباشرة. مثال: # حساب العمود الأول col1_values = Table.iloc[:, [5,6]].max(axis=1) # حساب العمود الثاني col2_values = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) # استخدام القيم في العملية التالية Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[i] if col2_values[i]==0 else col2_values[i] if 0 < col2_values[i] <= 50 else None, axis=1) فهذا يحافظ على القيم دون إضافتها للجدول. اما هذا الكود محتاج بعض التعديلات: 1. لا تضف القيم مباشرة للمتغيرات repeated، بل احفظها في متغيرات مستقلة 2. استخدم المؤشر i للوصول لقيم المتغيرات داخل الدوال 3. حساب قيم الأعمدة خارج الدوال وليس داخلها repeated_values1 = [] repeated_values2 = [] col1_values = [] col2_values = [] for i in range(len(Table)): repeated_values1.append(df.iloc[6,3]) repeated_values2.append(df.iloc[3,4]) Table['إسم المادة'] = repeated_values1 Table['العام الدراسي'] = repeated_values2 Table.fillna(0, inplace=True) col1_values = Table.iloc[:, [5,6]].max(axis=1) col2_values = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[i] if col2_values[i]==0 else col2_values[i] if 0 < col2_values[i] <= 50 else None, axis=1) 1 اقتباس
0 Ahmed Ahmed64 نشر 22 ديسمبر 2023 الكاتب أرسل تقرير نشر 22 ديسمبر 2023 أشكرك أخي يبدو أن هناك مشكلة بالكود في الحقيقة الكود تم تنفيذه ولاكن قيم العمود الخاصة Table['3أكبر_قيمة'] تأتي كلها بقيمة 0 اقتباس
0 Ahmed Ahmed64 نشر 2 يناير الكاتب أرسل تقرير نشر 2 يناير بتاريخ On 22/12/2023 at 19:10 قال Khaled Osama3: جزاك الله خيرا. طريقة حفظ الأعمدة دون طباعتها في الجدول، يمكنك حفظ قيم الأعمدة في متغيرات منفصلة بدلاً من إضافتها للجدول مباشرة. مثال: # حساب العمود الأول col1_values = Table.iloc[:, [5,6]].max(axis=1) # حساب العمود الثاني col2_values = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) # استخدام القيم في العملية التالية Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[i] if col2_values[i]==0 else col2_values[i] if 0 < col2_values[i] <= 50 else None, axis=1) فهذا يحافظ على القيم دون إضافتها للجدول. اما هذا الكود محتاج بعض التعديلات: 1. لا تضف القيم مباشرة للمتغيرات repeated، بل احفظها في متغيرات مستقلة 2. استخدم المؤشر i للوصول لقيم المتغيرات داخل الدوال 3. حساب قيم الأعمدة خارج الدوال وليس داخلها repeated_values1 = [] repeated_values2 = [] col1_values = [] col2_values = [] for i in range(len(Table)): repeated_values1.append(df.iloc[6,3]) repeated_values2.append(df.iloc[3,4]) Table['إسم المادة'] = repeated_values1 Table['العام الدراسي'] = repeated_values2 Table.fillna(0, inplace=True) col1_values = Table.iloc[:, [5,6]].max(axis=1) col2_values = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[i] if col2_values[i]==0 else col2_values[i] if 0 < col2_values[i] <= 50 else None, axis=1) السطر الأخير به مشكله أرجو التصحيج اقتباس
0 Khaled Osama3 نشر 3 يناير أرسل تقرير نشر 3 يناير بتاريخ On 22/12/2023 at 19:42 قال Ahmed Ahmed64: أشكرك أخي يبدو أن هناك مشكلة بالكود في الحقيقة الكود تم تنفيذه ولاكن قيم العمود الخاصة Table['3أكبر_قيمة'] تأتي كلها بقيمة 0 من الممكن الخطأ في الكود في استخدام المتغير `i` في التعبير lambda. يمكنك تجربه تعديل جزء الكود ليبدو كما يلي: Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[row.name] if col2_values[row.name]==0 else col2_values[row.name] if 0 < col2_values[row.name] <= 50 else None, axis=1) تم استبدال `i` بـ `row.name` لضمان استخدام الفهرس الصحيح للصفوف. يرجى تجربة هذا التعديل والتحقق مما إذا كان يحل المشكلة. 1 اقتباس
السؤال
Ahmed Ahmed64
السلام عليكم إخوتي
مساعدة في كتابة كود يقوم بالوظيفة التالية
لدي ملف إكسل يحتوي على مجموعة من الأعمدة والصفوف
أحتاج أن أستخرج العمود الثالث والرابع و الخامس على سبيل المثال وأكون من ذلك DataFrame باستخدام مكتبة pandas
بعد تكوين DataFrame
أريد أن أقوم بعملية قراءه صف صف من هذه DataFrame للأعمدة المتكونة منها وأن أستخرج القيمة الأكبر والتخزين في عمود جديد
نوضح لكم أكثر
أقرأ الصف الأول وأقارن بين الثلاثة الأعمدة التي تكونت منها وأستخرج أكبر قيمة ومن ثم تخزينها على عمود جديد
أقرأ الصف الثاني وأقارن بين الثلاثة الأعمدة التي تكونت منها وأستخرج أكبر قيمة ومن ثم تخزينها على عمود جديد الذي تم تكوينه سابقا
19 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.