قسمت هشتم – استفاده از تابع apply و applymap

متد apply در پانداس یک ابزار قدرتمند برای اعمال توابع سفارشی روی داده‌ها است. این متد می‌تواند روی سطرها یا ستون‌های یک DataFrame یا Series اعمال شود و برای انجام عملیات‌های پیچیده و انعطاف‌پذیر بسیار مفید است. در ادامه چند مثال از استفاده‌های مختلف apply در پانداس آورده شده است.

۱.عمال تابع روی هر عنصر یک ستون

در این مثال، فرض کنید می‌خواهیم هر عنصر از ستون را به توان ۲ برسانیم:

import pandas as pd

# DataFrame نمونه
df = pd.DataFrame({'A': [1, 2, 3, 4, 5]})

# استفاده از apply برای توان ۲ رساندن هر مقدار در ستون A
df['A_squared'] = df['A'].apply(lambda x: x ** 2)

print(df)

     ۲.اعمال تابع شرطی روی یک ستون

می‌توانیم با استفاده از apply روی یک ستون شرطی ایجاد کنیم. مثلاً اگر عددی بزرگتر از ۲ بود، ۱ برگردد و در غیر این صورت ۰:

import pandas as pd

# DataFrame نمونه
df = pd.DataFrame({'A': [1, 2, 3, 4, 5]})
df['A_condition'] = df['A'].apply(lambda x: 1 if x > 2 else 0)
print(df)

   A  A_condition
۰  ۱            ۰
۱  ۲            ۰
۲  ۳            ۱
۳  ۴            ۱
۴  ۵            ۱

۳.اعمال تابع روی هر سطر

با تنظیم axis=1 می‌توانیم apply را روی سطرها به‌کار ببریم. در این مثال، فرض کنید دو ستون داریم و می‌خواهیم حاصل‌جمع هر سطر را به‌دست آوریم:

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# استفاده از apply روی هر سطر
df['sum'] = df.apply(lambda row: row['A'] + row['B'], axis=1)

print(df)

   A  B  sum
۰  ۱  ۴    ۵
۱  ۲  ۵    ۷
۲  ۳  ۶    ۹

۴. اعمال تابع دلخواه روی چندین ستون

فرض کنید تابعی داریم که فاصله بین دو مقدار را محاسبه می‌کند و می‌خواهیم آن را روی سطرهای DataFrame اعمال کنیم:

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

def distance(row):
    return abs(row['A'] - row['B'])

# اعمال تابع distance روی سطرها
df['distance'] = df.apply(distance, axis=1)

print(df)

   A  B  distance
۰  ۱  ۴         ۳
۱  ۲  ۵         ۳
۲  ۳  ۶         ۳

۵.استفاده از apply برای عملیات‌های رشته‌ای

فرض کنید یک ستون داریم که شامل رشته‌هاست و می‌خواهیم رشته‌ها را به حروف بزرگ تبدیل کنیم:

import pandas as pd

df = pd.DataFrame({'Names': ['Alice', 'Bob', 'Charlie']})

# استفاده از apply برای تبدیل به حروف بزرگ
df['Uppercase'] = df['Names'].apply(lambda x: x.upper())

print(df)

 
     Names Uppercase
۰    Alice     ALICE
۱      Bob       BOB
۲  Charlie   CHARLIE

۶.استفاده از apply برای پردازش لیست در هر سلول

اگر سلول‌های یک ستون شامل لیست باشند، می‌توانیم از apply برای پردازش هر لیست درون سلول استفاده کنیم. در این مثال، طول هر لیست در هر سلول محاسبه می‌شود:

import pandas as pd

df = pd.DataFrame({'Lists': [[1, 2, 3], [4, 5], [6, 7, 8, 9]]})

# محاسبه طول هر لیست
df['Length'] = df['Lists'].apply(len)

print(df)

          Lists  Length
۰     [۱, ۲, ۳]       ۳
۱        [۴, ۵]       ۲
۲  [۶, ۷, ۸, ۹]       ۴

۷.استفاده از apply برای کار با توابع خارجی پیچیده

فرض کنید تابعی داریم که پردازش پیچیده‌ای روی داده انجام می‌دهد. از apply می‌توان برای اعمال این تابع روی داده‌های DataFrame استفاده کرد:

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3, 4, 5]})
def complex_function(x):
    # عملیات پیچیده
    return x ** 3 + 2 * x + 1

# اعمال تابع روی ستون A
df['Complex_Result'] = df['A'].apply(complex_function)

print(df)

   A  Complex_Result
۰  ۱               ۴
۱  ۲              ۱۳
۲  ۳              ۳۴
۳  ۴              ۷۳
۴  ۵             ۱۳۶

۸.استفاده از applymap برای اعمال تابع روی تمام سلول‌ها

اگر بخواهیم تابعی را به تمام سلول‌های یک DataFrame اعمال کنیم، می‌توانیم از applymap استفاده کنیم. مثلا برای دو برابر کردن همه سلول‌ها:

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# دو برابر کردن تمام مقادیر
df = df.applymap(lambda x: x * 2)

print(df)
  
 A   B
۰  ۲   ۸
۱  ۴  ۱۰
۲  ۶  ۱۲

متد apply و applymap به شما امکان می‌دهند که توابع مختلفی را به داده‌ها اعمال کنید، چه برای سطرها و ستون‌های خاص و چه برای کل سلول‌ها، و برای پردازش و تحلیل داده‌ها بسیار کارآمد هستند.

 

متد applymap در پانداس به شما اجازه می‌دهد تا یک تابع را روی تک‌تک سلول‌های یک DataFrame اعمال کنید. برخلاف apply که روی سطرها یا ستون‌ها به‌صورت جداگانه اعمال می‌شود، applymap برای استفاده از توابعی که روی تک‌تک مقادیر هر سلول اعمال می‌شوند، مناسب است. در ادامه مثال‌های مختلفی از کاربرد applymap آورده شده است. (البته بهتر است از DataFrame.map  به جای applymap  استفاده کرد)

  1. دو برابر کردن تمام مقادیر سلول‌ها

اگر بخواهیم هر سلول از یک DataFrame را دو برابر کنیم، می‌توانیم از applymap استفاده کنیم:

import pandas as pd

# ایجاد یک DataFrame نمونه
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# دو برابر کردن تمام مقادیر
df = df.applymap(lambda x: x * 2)

print(df)

   A   B
۰  ۲   ۸
۱  ۴  ۱۰
۲  ۶  ۱۲

۲. تبدیل اعداد به رشته

اگر بخواهیم همه اعداد را به رشته تبدیل کنیم، می‌توانیم از applymap به این صورت استفاده کنیم:

import pandas as pd

# ایجاد یک DataFrame نمونه
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

df = df.applymap(str)

print(df)


   A  B
۰  ۱  ۴
۱  ۲  ۵
۲  ۳  ۶

۳.اعمال توابع ریاضی مثل محاسبه قدر مطلق

فرض کنید می‌خواهیم مقدار قدر مطلق هر سلول را محاسبه کنیم. این کار برای داده‌های شامل اعداد منفی مفید است:

import pandas as pd

df = pd.DataFrame({'A': [-1, -2, -3], 'B': [4, -5, 6]})

# محاسبه قدر مطلق
df = df.applymap(abs)

print(df)

   A  B
۰  ۱  ۴
۱  ۲  ۵
۲  ۳  ۶

۴. اعمال فرمت‌دهی سفارشی

می‌توانیم از applymap برای اعمال فرمت‌دهی روی سلول‌ها استفاده کنیم. به عنوان مثال، تبدیل اعداد به درصد:

import pandas as pd

df = pd.DataFrame({'A': [0.1, 0.25, 0.33], 'B': [0.5, 0.75, 0.85]})

# تبدیل به فرمت درصد
df = df.applymap(lambda x: f"{x*100:.1f}%")

print(df)

       A      B
۰  ۱۰.۰%  ۵۰.۰%
۱  ۲۵.۰%  ۷۵.۰%
۲  ۳۳.۰%  ۸۵.۰%

۵.اعمال یک تابع شرطی

می‌توانیم از applymap برای اجرای یک تابع شرطی روی تمام سلول‌ها استفاده کنیم. مثلاً اگر مقدار سلول بزرگتر از ۳ باشد، مقدار جدید High و اگر کوچکتر باشد Low قرار دهیم:

import pandas as pd

df = pd.DataFrame({'A': [1, 4, 2], 'B': [5, 3, 6]})

# تخصیص مقدار "High" یا "Low" بر اساس شرط
df = df.applymap(lambda x: "High" if x > 3 else "Low")

print(df)


     A     B
۰   Low  High
۱  High   Low
۲   Low  High

۶.اعمال عملیات پیچیده روی رشته‌ها

فرض کنید ستون‌های DataFrame شامل رشته‌ها هستند و می‌خواهیم اولین حرف هر رشته را به حروف بزرگ تبدیل کنیم:

import pandas as pd

df = pd.DataFrame({'A': ['apple', 'banana', 'cherry'], 'B': ['date', 'fig', 'grape']})

# تبدیل اولین حرف هر کلمه به حروف بزرگ
df = df.applymap(lambda x: x.capitalize())

print(df)

         A      B
۰   Apple   Date
۱  Banana    Fig
۲  Cherry  Grape

۷.جایگزینی مقادیر خاص

می‌توانیم از applymap برای جایگزینی مقادیر خاص در سلول‌ها استفاده کنیم. مثلاً هر کجا که مقدار ۰ است، آن را با NaN جایگزین کنیم:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A': [0, 2, 3], 'B': [4, 0, 6]})

# جایگزینی ۰ با NaN
df = df.applymap(lambda x: np.nan if x == 0 else x)

print(df)

 A    B
۰  NaN  4.0
۱  ۲.۰  NaN
۲  ۳.۰  ۶.۰

متد applymap در پانداس به ما امکان می‌دهد که یک تابع را روی تمام سلول‌های یک DataFrame اعمال کنیم. از این متد می‌توان برای انجام عملیات ساده و یا فرمت‌دهی روی تک‌تک مقادیر سلول‌ها استفاده کرد، در حالی که متد apply بیشتر برای اعمال توابع روی سطرها و ستون‌ها کاربرد دارد.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *