5 مثال کاربردی از متدهای loc و iloc در کتابخانه Pandas
Pandas یکی از انعطافپذیرترین و قدرتمندترین کتابخانههای مورد استفاده در حوزه تحلیل و دستکاری دادههاست. این کتابخانه حاوی شمار کثیری تابع و متد است که به شما در بهینهسازی مراحل مختلف فرایند تحلیل کمک میکنند. متدهای loc و iloc دو مورد از مهمترین متدهای موجود در کتابخانه Pandas هستند که از آنها به منظور فیلتر کردن، انتخاب نمودن و دستکاری و اصلاح دادهها استفاده میشود. این متدها ما را قادر میسازند تا به یک یا چندین خانه مشخص از دیتاست دسترسی پیدا کنیم.
|| مسابقه هوش مصنوعی (مهلت ثبتنام تا 16 آذر 1401)
در این مقاله، به 5 مثال کاربردی در خصوص دو متد loc و iloc خواهیم پرداخت که از نقطهنظر من طی فرایند تحلیل دادهها بسیار مفید میباشند.
در این مثال از دیتاست Melbourne housing استفاده خواهم کرد که بر روی وبسایت Kaggle قابل دسترس است. پیش از هر چیز باید با استفاده از تابع read_csv فایل csv حاوی دادهها را بخوانیم.
import numpy as np import pandas as pd df = pd.read_csv("/content/melb_data.csv") print(df.shape) (13580, 21) df.columns Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG','Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car','Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude','Longtitude', 'Regionname', 'Propertycount'],
همانطور که مشاهده میکنید این دیتاست حاوی اطلاعات 13580 خانه در شهر ملبورن است که برای هر یک از آنها 21 ویژگی در نظر گرفته شده است.
مثال اول
یکی از تفاوتهای loc و iloc در نحوه دسترسی پیدا کردن آنها به سطرها و ستونهای دیتاست است:
- متد loc از لیبل یا برچسب سطر و ستون برای دسترسی به آن استفاده میکند.
- متد iloc از اندیس سطر و ستون برای دسترسی به آن استفاده میکند.
حال بیایید از هر دو متد برای مشاهده چند سطر ابتدایی ستون Address در دیتاست استفاده کنیم و این تفاوت را در عمل ببینیم.
df.loc[:5, 'Address'] # df.loc[0:5, 'Address'] 0 85 Turner St 1 25 Bloomburg St 2 5 Charles St 3 40 Federation La 4 55a Park St 5 129 Charles St df.iloc[:5, 1] 0 85 Turner St 1 25 Bloomburg St 2 5 Charles St 3 40 Federation La 4 55a Park St
شما هم احتمالاً متوجه شدهاید که نحوه گزینش سطر در هر دو متد مشابه است. دلیل آن این است که کتابخانه Pandas برچسب سطرها را به طور پیشفرض یک عدد صحیح درنظر میگیرد. بنابراین، چه از برچسب سطر استفاده کنیم و چه از اندیس آن، تفاوتی وجود نخواهد داشت. تنها تفاوت در این است که در متد loc حد بالا نیز ذکر میشود. شایان ذکر است که اندیس ستونها نیز از صفر شروع میشود، بنابراین اندیس ستون Address عدد 1 میباشد.
مثال دوم
برای دسترسی پیدا کردن به چندین سطر و ستون نیازی نیست که حتماً یک بازه تعریف کنیم، بلکه میتوانیم اندیس یا برچسب سطرها و ستونهای مدنظر را در قالب یک لیست به متدها بدهیم.
df.loc[[5,7,9], ['Address', 'Type']] df.iloc[[5,7,9], [1,2]]
در این مثال سطرهای 5، 7 و 9 از ستونهای Address و Type را فراخوانی کردیم.
مثال سوم
میتوانیم با استفاده از متد loc یک ستون جدید در دیتاست ایجاد کنیم. در این مثال میخواهم ستونی به دیتاست اضافه کنم که در آن به خانههایی که قیمتشان بالاتر از یک میلیون یورو است، عدد 1 تعلق گیرد. از آنجا که هر نقطهداده (یا هر سطر) نماد یک خانه است، بنابراین کافی است شرط مربوطه را روی ستون price اعمال کنیم.
df.loc[df.Price > 1000000, 'IsExpensive'] = 1
در این ستون که نام آن را IsExpensive گذاشتهام، سطرهایی که شرط مذکور را داشته باشند، حاوی عدد 1 خواهند بود و مقدار NaN برای سایر سطرها درنظر گرفته خواهد شد.
df.loc[:4, ['Price','IsExpensive']]
مثال چهارم
در متد loc میتوان چندین شرط مختلف وارد کرد. بیایید یک ستون جدید به نام category ایجاد کنیم که از نوع h است و برای خانههایی که قیمتشان بالاتر از 4/1 میلیون یورو است، مقدار Expensive House را قرار میدهد.
df.loc[(df.Price > 1400000) & (df.Type == 'h'), 'Category'] = 'Expensive House' df.loc[:4, ['Price','Category']]
بعداً میتوان به مقادیر NaN را رسیدگی کرد تا مشکلزا نشوند. برای مثال، میتوانید با استفاده از تابع fillna از کتابخانه Pandas خانههای خالی یا مقادیر گمشده را مدیریت کنید. با افزودن شروط دیگر به متد loc نیز میتوانید مقادیر گمشده را با مقدار دلخواه جایگزین نمایید.
مثال پنجم
علاوه بر موارد قبلی، میتوانیم با قرار دادن یک شرط در متد loc مقادیر موجود در یک ستون را بهروزرسانی و اصلاح کنیم. برای مثال، قطعه کد زیر 5% تخفیف روی خانههایی که قیمتشان بالاتر از 4/1 میلیون یورو است، اعمال میکند.
df.loc[df.Price > 1400000, 'Price'] = df.Price * 0.95 df.loc[:4, ['Price','IsExpensive']]
برای انجام این کار از متد iloc نیز میتوان استفاده کرد، اما به جای نام ستون باید اندیس ستون price را به متد بدهیم. از آنجا که استفاده از نام یا برچسب ستون راحتتر از اندیس آن است، متد loc برای حل چنین مسائلی ترجیح داده میشود.
سخن آخر
پاکسازی و دستکاری دادهها یکی از مهمترین وظایف هر دانشمند یا تحلیلگر دادهای است، چرا که دادهها در واقعیت نابسامان هستند و معمولاً فرمت مناسبی ندارند. به همین دلیل نیز استفاده از یک متد منعطف برای دسترسی یافتن به سطرها و ستونهای دیتاست، برای به انجام رساندن پروژهها در این حوزه از اهمیت فراوانی برخوردار است. متدهای loc و iloc همان چیزی هستند که در چنین شرایطی به آنها نیاز داریم.