Mohamed Elnemr نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 أعرف أن هناك دوال تستخدم لتطبيق شئ ما على كل البيانات في صورة dataframe لكني لا أعرف الفرق بينهم، متى أستخدم map ومتى applymap ولماذا قد استخدم دالة apply هل من الممكن شرحها مع أمثلة؟ 2 اقتباس
0 Ahmed Sharshar نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 دعنا نوضح الفرق بين كل دالة مع ذكر مثال عليها: DataFrame.apply تعمل على صف أو عمود كامل في المرة الواحدة، مثل المثال التالي: In [1]: df = DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['Ahmed', 'Ali', 'Moustafa', 'Mohammed']) In [2]: df Out[2]: b d e Ahmed -0.029638 1.081563 1.280300 Ali 0.647747 0.831136 -1.549481 Moustafa 0.513416 -0.884417 0.195343 Mohammed -0.485454 -0.477388 -0.309548 In [3]: f = lambda x: x.max() - x.min() In [4]: df.apply(f) Out[4]: b 1.133201 d 1.965980 e 2.829781 dtype: float64 لاحظ أننا قمنا بالعملية الحسابية مرة واحدة للعمود بأكمله. أما الدالة DataFrame.applymap والدالة Series.map فهي تقم بعمل العملية الحسابية مرة لكل عنصر على حدة، ‘أنظر المثالين الأتيين: #تطبيق الدالة applymap In [5]: format = lambda x: '%.2f' % x In [6]: df.applymap(format) Out[6]: b d e Ahmed -0.03 1.08 1.28 Ali 0.65 0.83 -1.55 Moustafa 0.51 -0.88 0.20 Mohammed -0.49 -0.48 -0.31 ونفس المهمة تستطيع تأديتها باستخدام الدالة map: In [122]: df['e'].map(format) Out[122]: Ahmed 1.28 Ali -1.55 Moustafa 0.20 Mohammed -0.31 Name: e, dtype: object اقتباس
0 Ali Haidar Ahmad نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 applymap: تعمل فقط على ال Dataframe حيث نستخدمها عادةً ليتم تطبيق دالة على كل عنصر على حدة elementwise. مثال: # Importing pandas library with an alias pd import pandas as pd # سنشكل داتا فريم كالتالي Hsoub_string = 'HsoubHsoub' Hsoub_list = 3 * [pd.Series(list(Hsoub_string))] Hsoub_df = pd.DataFrame(data = Hsoub_list) print("Original dataframe:\n" + \ Hsoub_df.to_string(index = False, header = False), end = '\n\n') """ Original dataframe: H s o u b H s o u b H s o u b H s o u b H s o u b H s o u b """ # لفرز كل صف applymap استخدام الدالة # اعتماداً على الأحرف #applymap فقط نقوم بتمرير الدالة المطلوب تنفيذها كوسيط للدالة #lambda هنا سنستخدم new_Hsoub_df = Hsoub_df.applymap(str.upper) print("Transformed dataframe:\n" + \ new_Hsoub_df.to_string(index = False, header = False), end = '\n\n') """ Transformed dataframe: H S O U B H S O U B H S O U B H S O U B H S O U B H S O U B """ apply: يمكن تطبيقها على كل من ال series و ال Dataframe حيث يمكننا تطبيق الدالة على كل من العناصر المتسلسلة والعناصر الفردية بناءً على نوع الدالة التي تم تقديمها ويمكن تطبيقها على الأسطر أو الأعمدة. المثال التالي يوضح تطبيقها على Dataframe. import pandas as pd # سنشكل داتا فريم كالتالي Hsoub_string = 'HsoubHsoub' Hsoub_list = 3 * [pd.Series(list(Hsoub_string))] Hsoub_df = pd.DataFrame(data = Hsoub_list) print("Original dataframe:\n" + \ Hsoub_df.to_string(index = False, header = False), end = '\n\n') """ Original dataframe: H s o u b H s o u b H s o u b H s o u b H s o u b H s o u b """ # لفرز كل صف apply استخدام الدالة # اعتماداً على الأحرف #apply فقط نقوم بتمرير الدالة المطلوب تنفيذها كوسيط للدالة #lambda هنا سنستخدم new_Hsoub_df = Hsoub_df.apply(lambda x:x.sort_values(), axis = 1) print("Transformed dataframe:\n" + \ new_Hsoub_df.to_string(index = False, header = False), end = '\n\n') """ Transformed dataframe: H H b b o o s s u u H H b b o o s s u u H H b b o o s s u u """ تطبيقها على series: import pandas as pd # Series إنشاء Hsoub_string = 'HsoubHsoub' Hsoub_series = pd.Series(list(Hsoub_string)) print("Original series\n" + \ Hsoub_series.to_string(index = False, header = False), end = '\n\n') """ Original series H s o u b H s o u b """ # تحويل الأحرف إلى أحرف كبيرة #apply فقط نقوم بتمرير الدالة المطلوب تنفيذها كوسيط للدالة new_Hsoub_series = Hsoub_series.apply(str.upper) print("Transformed series:\n" + \ new_Hsoub_series.to_string(index = False, header = False), end = '\n\n') """ Transformed series: H S O U B H S O U B """ map: تعمل فقط مع ال series حيث يعتمد نوع العملية التي سيتم تطبيقها على الوسيطة التي تم تمريرها كوظيفة أو قاموس أو قائمة. تُستخدم هذه الطريقة بشكل عام لربط القيم من سلسلتين لهما نفس العمود. import pandas as pd # Series إنشاء Hsoub_string = 'HsoubHsoub' Hsoub_series = pd.Series(list(Hsoub_string)) print("Original series\n" + \ Hsoub_series.to_string(index = False, header = False), end = '\n\n') """ Original series H s o u b H s o u b """ # تحويل الأحرف إلى أحرف كبيرة #map فقط نقوم بتمرير الدالة المطلوب تنفيذها كوسيط للدالة new_Hsoub_series = Hsoub_series.map(str.upper) print("Transformed series:\n" + \ new_Hsoub_series.to_string(index = False, header = False), end = '\n\n') """ Transformed series: H S O U B H S O U B """ 1 اقتباس
السؤال
Mohamed Elnemr
أعرف أن هناك دوال تستخدم لتطبيق شئ ما على كل البيانات في صورة dataframe لكني لا أعرف الفرق بينهم، متى أستخدم map ومتى applymap ولماذا قد استخدم دالة apply
هل من الممكن شرحها مع أمثلة؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.