قسمت هشتم – استفاده از تابع 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 استفاده کرد)
- دو برابر کردن تمام مقادیر سلولها
اگر بخواهیم هر سلول از یک 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 بیشتر برای اعمال توابع روی سطرها و ستونها کاربرد دارد.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.