همانند مفهومی که در پایگاه داده های رابطه ای در ارتباط با الحاق (Join) کردن دو یا چند جدول وجود دارد، در ماژول pandas می توانیم از متدی به نام ()merge برای الحاق Dataframe ها با یکدیگر استفاده کنیم. چهار نوع الحاق inner و outer و left و right وجود دارد. در این مطلب می خواهیم این جنبه از DataFrame های Pandas را آموزش دهیم.

نمایش یکپارچه داده در پایتون توسط DataFrame

گام نخستایجاد DataFrame ها

برای معرفی متد ()merge نیاز داریم تا دو DataFrame ایجاد کنیم. برای این منظور و مطابق کد زیر ابتدا دو دیکشنری به نام های iranTemperatures و iranHumidities ایجاد کرده ایم که به ترتیب وضعیت دما و رطوبت هوا را به ازای شهرهای گوناگون نگه می دارند.

سپس باید توسط کلاس DataFrame از روی این دو دیکشنری دو DataFrame مجزا ایجاد کنیم که پس از این می خواهیم آنها را با یکدیگر ادغام (Merge) کنیم. توجه کنید که این دو دیشکنری دارای ستون مشترکی به نام cities و ستون های متفاوتی به نام temperatures و humidities هستند. همچنین در ستون مشترک cities در دو DataFrame مقدارهای متفاوت نیز وجود دارد.

انجام Inner Join توسط متد ()merge

توسط متد ()merge از ماژول pandas و مطابق قطعه کد زیر می توانیم دو DataFrame را با یکدیگر ادغام کنیم. توجه کنید که این دو DataFrame دارای ستون مشترک cities هستند که هر کدام از آنها مقدار مشابه و هم مقدار متفاوت وجود دارد.

در کد بالا و در متد ()merge دو آرگومان نخست نام دو DataFrame هستند و آرگومان سوم، یعنی on نام ستون مشترک را تعیین می کند که در کد بالا نام ستون مشترک City است. اما دستور بالا منجر به خطای شکل زیر می شود، زیرا ستونی به نام City در DataFrame ها وجود ندارد.

انجام Outer Join توسط متد ()merge

Outer Join خروجی InnerJoin را گسترش می دهد به طوری که خروجی هم شامل تمامی سطرهایی می شود که شرط Join را برآورده کرده باشند و هم شامل سطرهایی می شود که حتی شرط Join را برآورده نکرده باشند.

در کد بالا از آرگومان دیگری به نام how برای تعیین نوع عملیات ادغام استفاده شده است. در اینجا می خواهیم عملیان Outer Join انجام دهیم، پس مقدار آرگومان how برابر با outer است اما اگر آرگومان how تعیین نشود، حالت پیش فرض برابر how=inner و به معنی Inner Join است.

در شکل بالا می بینید که تمامی شهرها در زیر ستون City آمده است ولی در برخی از سطرها زیر ستون های temperatures و humidities مقدار NaN (مخفف Not a Numbrt) آورده شده است به این معنی که در DataFrame مربوطه مقداری برای این ستون به ازای شهر مربوطه وجود ندارد. به طور مثال برای شهرهای تهران و اراک مقدار رطوبت هوا وجود ندارد

انجام Left Join و Right Join توسط متد ()merge

در Left Join تمام سطرهای DataFrame سمت چپ در خروجی می آیند حتی اگر هیچ تطابقی با DataFrame سمت راست نداشته باشند. در قطعه کد زیر مقدار آرگومان how=left است.

شکل زیر خروجی Left Join را نشان می دهد.اگر دقت کنید می بینید که هیچ سطری  شامل نام شهرهای DataFrame سمت راست وجود ندارد. نخست اینکه، چون در DataFrame سمت چپ برای شهر تهران و اراک به هیچ عنوان مقدار رطوبت ثبت نشده، پس مقدار فیلد humidities آنها برابر با NaN است ولی چون نام شهرهای سنندج و چابهار در هر دو DataFrame مشترک است، پس مقدار فیلد humidities آنها از جدول سمت راست قرار داده شده است.

در واقع دو سطر اول که مقدار فیلد humidities آنها NaN است، همان سطرهایی هستند که هیچ تطابقی با DataFrame سمت راست نداشته اند. قطعه کد و شکل زیر نیز که در آن آرگومان how=right است، چگونگی انجام Right Join را نشان می دهد ولی تفسیر آن عکس Left Join است.

دانلود سورس برنامه های این مطلب Pandas merge method