ماژول Pandas یکی از اصلی ترین ماژول های مرتبط با زبان پایتون است که در زمینه های یادگیری ماشین (Machine Learning)، داده کاوی (Data Mining) و علوم داده ها (Data Science) کاربرد دارداز DataFrame ها برای بازگذاری داده ها از منبع های متفاوت ولی به شکل یکپارچه، تغییر دادن داده ها و انتخاب داده ها و دسترسی به آنها استفاده می شود. به طور کلی سه نوع ساختار داده DataFrame و Series و Panel ها در ماژول Pandas وجود دارند.

ماژول Pandas روش های متفاوتی را برای ایجاد کردن نوع Dataframe فراهم کرده است. در مطلب های پیش رو که در مورد بارگذاری داده ها (Loading Data) است، خواهید دید که با فراخوانی و اجرای متدهایی مانند ()read_csv، نوع برگشتی از نوع DataFrame خواهد بود. DataFrame ساختاری شبیه جدول های پایگاه داده های رابطه ای دارد، یعنی شامل ستون ها و سطرها است. ساده ترین روش برای ایجاد آن استفاده از کلاس DataFrame به صورت زیر است. در کدهای زیر ابتدا یک متغیر از نوع DataFrame ایجاد شده و سپس ستون هایی همراه با مقدار به آن افزوده می شوند. سپس می توانید آنرا درون محیط Jupyter Notebook نمایش دهید.

در کدهای بالا ابتدا یک DataFrame اولیه ایجاد می کنیم و سپس از طریق براکت های باز و بسته نام ستون ها و مقدار ستون ها را همان لحظه تعیین می کنیم. به طور مثال در کد بالا سه ستون به نام Name و Age و Driver ایجاد کردیم که نوع ستون ها به ترتیب رشته، عدد صحیح و مقدار بولی (Boolean) است. به طور کلی یک DataFrame بسیار شبیه به جدول های پایگاه داده است و از این رو تمامی مقدارهای یک ستون باید از یک نوع باشند ولی هر کدام از ستون های DataFrame می توانند دارای یک نوع متفاوت باشند.

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

توسط خصوصیتی (Properties) به نام columns می توانید نام تمامی ستون های درون DataFrame را نمایش دهید. بنابراین مطابق کد زیر می توانیم از طریق نام ستون، به تمامی مقدارهای آن ستون دسترسی داشته باشیم. توجه کنید در این مثال ها نام ستون ها به صورت رشته است ولی الزامی در آن نیست و می تواند نام ستون عددی نیز باشد.

مقایسه با کوئری های SQL

زمانی که نام متغیر نوع DataFrame را به تنهایی استفاده می کنیم معادل دستور SELECT * FROM tableName است ولی زمانی که می خواهیم از طریق نام یک ستون تنها مقدارهای (سطرهای) همان ستون را نمایش دهیم، معادل دستور SELECT columnName from tableName است.

متدهای ()head و ()tail برای نمایش n عدد از داده ها

فرض کنید یک DataFrame با مقدار زیادی داده (مثلا ۱۰۰۰ سطر) دارید و می خواهید مثلا ۱۰ سطر ابتدایی و ۱۰ سطر انتهایی را نمایش دهید. برای این کار به ترتیب باید از متد ()head و ()tail استفاده کنید. این دو متد مقدار عدد صحیح را به عنوان ورودی دریافت می کنند. در این مطلب همانطور که در شکل زیر مشخص است، تنها پنج سطر وجود دارد پس می توانیم با دستورهای زیر به ترتیب دو سطر ابتدایی و انتهایی را نمایش دهیم.

مقایسه با کوئری های SQL

زمانی که از متد ()head استفاده می کنیم، می خواهیم نمایش سطرها را به n سطر نخست محدود کنیم که این معادل استفاده از عبارت LIMIT در SQL است. به طور مثال معادل کوئری SELECT * FROM tableName LIMIT 2 است.

حذف داده های تکراری

برای حذف داده های تکراری و نمایش داده ها به صورت منحصر به فرد (Unique) می توانیم از متد ()unique استفاده کنیم. اگر فرض کنیم می خواهیم تمامی مقدارهای ستون Name از DataFrame بالا را نمایش دهیم، در این صورت باید از قطعه کد زیر استفاده کنیم. با توجه به شکل های بالا می بینید که دو سطر وجود دارند که مقدار ستون Age آنها برابر با ۳۱ است، ولی در شکل زیر و به دلیل استفاده از متد ()unique تنها یک مرتبه مقدار ۳۱ در خروجی آمده است.

مقایسه با کوئری های SQL

زمانی که از متد ()unique استفاده می کنیم، می خواهیم داده های تکراری درون سطرهای ستون را تنها یک مرتبه نمایش دهیم که این معادل استفاده از عبارت DISTINCT در SQL است. به طور مثال معادل کوئری SELECT DISTINCT columnName FROM tableName است.

انتخاب سطرها با استفاده از شرط

از عملگرهای تساوی، نابرابری، کوچکتر، کوچکتر مساوی، بزرگتر، بزرگتر مساوی، عملگر & (منظور عملگر AND) یا عملگر I (منظور عملگر OR) می توانیم درون شرط یا چندین شرط را برای محدود کردن سطرهای خروجی استفاده کنیم. قطعه کدها و شکل زیر به ترتیب نمونه مثال ها از نحوه اعمال شرط بر روی DataFrame ها و خروجی آنها را نمایش می دهد.

مقایسه با کوئری های SQL

زمانی که از شرط یا شرط ها استفاده می کنیم، معادل  این است که از عبارت WHERE و عملگرهای SQL استفاده کرده باشیم.

مرتب سازی سطرهای DataFrame

توسط متد ()sort_values و بر اساس مقدارهای یک ستون می توانید سطرهای DataFrame را مرتب سازی کنید. در کدهای زیر ابتدا بر اساس ستون Age و سپس بر اساس ستون Name به شرط اینکه سن بیشتر از ۳۱ سال باشد، سطرها مرتب سازی شده اند.

همچنین مطابق قطعه کد زیر می توانیم از پارامتر asceding برای مرتب سازی صعودی یا نزولی استفاده کنیم به طوری که اگر مقدار پارامتر asceding برابر True باشد، پس مرتب سازی صعودی خواهد بود و در صورتی که مقدار آن False باشد، مرتب سازی نزولی خواهد بود. توجه کنید که حالت پیش فرض مرتب سازی صعودی، یعنی پارامتر asceding برابر True است. در قطعه کد زیر تمامی سطرهای DataFrame به صورت نزولی و بر اساس ستون  Age مرتب می شوند.

مقایسه با کوئری های SQL

زمانی که بخواهیم سطرهای DataFrame را مرتب سازی کنیم، معادل  این است که از عبارت ORDER BY در SQL استفاده کرده باشیم.

بررسی وجود یاد عدم وجود مقدار در DataFrame

در پایتون دو عملگر به نام in و not وجود دارند که از آنها می توان برای بررسی وجود یاد عدم وجود مقدار در میان داده های DataFrame یا هر شی دیگری در پایتون مانند لیست ها، دیکشنری ها، تاپل ها استفاده کرد. برای بررسی وجود از عملگر in و برای بررسی عدم وجود از ترکیب آنها، یعنی not in استفاده می کنیم.

در pandas متدی به نام ()isin وجود دارد که یک لیست از مقدارها را دریافت می کند و بررسی می کند که آیا هر کدام از عنصرها درون ستون مربوطه وجود دارد یا نه؟ اگر وجود داشته باشد، سطرهایی از DataFrame را برگشت می دهد که مقدارهای درون لیست در آنها وجو دارد. این متد شبیه عملگر in در پایتون است.

اما تابعی که شبیه عملگر not in باشد وجود ندارد، بنابراین مطابق قطعه کد و شکل زیر باید از علامت ~ استفاده کنیم تا درخواست معکوس شود. در کد و شکل زیر نمونه ای از کاربرد علامت ~ نشان داده شده است.

مقایسه با کوئری های SQL

زمانی که بخواهیم سطرهای DataFrame را بر اساس وجود یا عدم وجود یک یا لیستی از مقدارها بررسی کنیم، معادل  این است که از عملگرهای IN و NOT IN در SQL استفاده کرده باشیم.

خلاصه و جمع بندی

در این مطلب سعی شد تا مفهوم DataFrame ها و متدهایی که می شود روی آنها و ستون های آنها انجام داد را بیان کنیم. یک DataFrame شبیه به یک جدول پایگاه داده رابطه ای است به این معنی که از چندین ستون تشکیل شده است و تمامی مقدارهای یک ستون از یک نوع (رشته یا عدد صحیح یا عدد اعشاری) هستند ولی نوع هر ستون با ستون دیگر می تواند متفاوت باشد. در مطلب های پیش رو توضیح داده ایم که به هر ستون از DataFrame یک Series گفته می شود.

تفاوتی که DataFrame ها با جدول ها دارند در این است که DataFrame ها فاقد ستون های کلید اصلی و کلید خارجی هستند و همچنین روابط یک به یک، یک به چند و چند به چند نیز میان DataFrame ها به آن شکل جدول ها معنی ندارد ولی خواهیم گفت که چگونه می توانیم دو DataFrame را با یکدیگر ادغام (Join) کنیم.

دانلود سورس برنامه های این مطلب –