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

الفرق بين map, applymap, apply في pandas

Mohamed Elnemr

السؤال

أعرف أن هناك دوال تستخدم لتطبيق شئ ما على كل البيانات في صورة dataframe لكني لا أعرف الفرق بينهم، متى أستخدم map ومتى applymap ولماذا قد استخدم دالة apply

هل من الممكن شرحها مع أمثلة؟

 

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

Recommended Posts

  • 0

دعنا نوضح الفرق بين كل دالة مع ذكر مثال عليها:

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

     

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...