با این سه تکنیک مفید، تبدیل داده ها را در پانداها استاد کنید

غواصی در فیلتر کردن، دستکاری و عملکرد

عکس میلاد فکوریان on می Unsplash

به آخرین باری فکر کنید که با یک مجموعه داده با فرمت زیبا کار کرده اید. ستون هایی با نام خوب، حداقل مقادیر از دست رفته و سازماندهی مناسب. این احساس خوبی است - تقریباً آزاد کننده - به داشتن داده هایی که نیازی به تمیز کردن و تبدیل آنها ندارید.

خوب، خوب است تا زمانی که از رویاهای خود بیرون بیایید و از سرگردانی در انباشته ناامیدکننده ردیف های شکسته و برچسب های مزخرف پیش روی خود ادامه دهید.

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

بیایید در مورد سه راه برای انجام این کار صحبت کنیم.

فیلتر کردن - اما به درستی توضیح داده شده است

بیایید در مورد فیلتر کردن صحبت کنیم - اما کمی عمیق تر از آنچه ممکن است به انجام آن عادت داشته باشید. به عنوان یکی از رایج ترین و مفیدترین عملیات تبدیل داده ها، فیلتر کردن به طور موثر یک مهارت ضروری برای هر دانشمند داده است. اگر پانداها را می شناسید، احتمالاً یکی از اولین عملیات هایی است که یاد گرفته اید.

بیایید با استفاده از مثال مورد علاقه من و به طرز عجیبی همه کاره، مرور کنیم: یک DataFrame از نمرات دانش آموزان، به درستی به نام grades:

تصویر توسط نویسنده

ما قصد داریم نمرات زیر 90 را فیلتر کنیم، زیرا در این روز تصمیم گرفته‌ایم مربیانی با آموزش ضعیف باشیم که فقط به دانش‌آموزان برتر رسیدگی می‌کنند (لطفا هرگز واقعاً این کار را انجام ندهید). خط استاندارد کد برای انجام این کار به شرح زیر است:

نمرات[نمرات['Score'] >= 90]
تصویر توسط نویسنده

این ما را با جک و هرمیون باقی می گذارد. سرد. اما اینجا دقیقا چه اتفاقی افتاد؟ چرا آیا خط کد بالا کار می کند؟ بیایید با نگاه کردن به خروجی عبارت داخل براکت های بیرونی بالا کمی عمیق تر غواصی کنیم:

نمرات['Score'] >= 90
تصویر توسط نویسنده

آهان باشه. این منطقی است. به نظر می رسد که این خط کد یک شیء سری Pandas را برمی گرداند که Boolean ( True / False ) مقادیر تعیین شده توسط چه >= 90 برای هر ردیف جداگانه برگردانده می شود. این مرحله میانی کلیدی است. پس از آن، این سری از Booleans است که به براکت های بیرونی منتقل می شود و همه ردیف ها را بر این اساس فیلتر می کند.

به منظور تکمیل، من همچنین اشاره می کنم که همان رفتار را می توان با استفاده از loc کلمه کلیدی:

grades.loc[grades['Score'] >= 90]
تصویر توسط نویسنده

دلایل مختلفی وجود دارد که ممکن است استفاده کنیم loc (یکی از آنها این است که در واقع به ما اجازه می‌دهد تا ردیف‌ها و ستون‌ها را از طریق یک عملیات فیلتر کنیم)، اما جعبه پاندورا از عملیات پانداها را باز می‌کند که بهتر است به مقاله دیگری واگذار شود.

در حال حاضر، هدف مهم یادگیری این است: وقتی در پانداها فیلتر می کنیم، نحو گیج کننده نوعی جادوی عجیب و غریب نیست. ما فقط باید آن را به دو مرحله جزء تقسیم کنیم: 1) گرفتن یک سری Boolean از ردیف هایی که شرایط ما را برآورده می کند، و 2) استفاده از سری برای فیلتر کردن کل DataFrame.

شاید بپرسید چرا این مفید است؟ خوب، به طور کلی، اگر فقط از عملیات استفاده کنید بدون اینکه بفهمید واقعاً چگونه کار می کنند، احتمالاً منجر به باگ های گیج کننده می شود. فیلتر کردن یک عملیات مفید و فوق العاده رایج است و اکنون می دانید که چگونه کار می کند.

بیایید حرکت کنیم

زیبایی توابع لامبدا

گاهی اوقات، داده های شما نیاز به تغییراتی دارند که به سادگی در عملکرد پانداها تعبیه نشده اند. همانطور که ممکن است سعی کنید، هیچ مقداری از تمیز کردن Stack Overflow یا کاوش مجدانه اسناد پانداها راه حلی برای مشکل شما نشان نمی دهد.

توابع لامبدا را وارد کنید - یک ویژگی زبان مفید که به زیبایی با پانداها ادغام می شود.

به عنوان یک بررسی سریع، در اینجا نحوه عملکرد لامبدا آمده است:

>>> add_function = لامبدا x، y: x + y
>>> add_function (2، 3)
5

توابع لامبدا تفاوتی با توابع معمولی ندارند، به جز این واقعیت که نحو مختصرتری دارند:

  • نام تابع در سمت چپ علامت مساوی
  • La lambda کلمه کلیدی در سمت راست علامت مساوی (به طور مشابه به def کلمه کلیدی در یک تعریف سنتی تابع پایتون، این به پایتون اجازه می دهد بداند که ما در حال تعریف یک تابع هستیم).
  • پارامتر(های) بعد از lambda کلمه کلیدی، در سمت چپ کولون.
  • مقدار را به سمت راست کولون برگردانید.

اکنون بیایید توابع لامبدا را در یک موقعیت واقعی اعمال کنیم.

مجموعه داده‌ها اغلب ویژگی‌های قالب‌بندی خاص خود را دارند که مخصوص تغییرات در ورود و جمع‌آوری داده‌ها است. در نتیجه، داده‌هایی که با آنها کار می‌کنید ممکن است مشکلات خاصی داشته باشند که باید به آنها رسیدگی کنید. به عنوان مثال، مجموعه داده های ساده زیر را در نظر بگیرید که نام افراد و درآمد آنها را ذخیره می کند. بیایید آن را صدا کنیم monies.

تصویر توسط نویسنده

اکنون، به عنوان اعلیحضرت داده های این شرکت، اطلاعات بسیار محرمانه ای به ما داده شده است: به همه افراد این شرکت 10 درصد افزایش حقوق به اضافه 1000 دلار اضافی تعلق می گیرد. این احتمالاً برای یک محاسبه برای یافتن یک روش خاص بسیار خاص است، اما به اندازه کافی ساده با یک تابع لامبدا است:

به روز رسانی_درآمد = عدد لامبدا: عدد + (تعداد * 10) + 1000

سپس، تنها کاری که باید انجام دهیم این است که از این تابع با پانداها استفاده کنیم apply تابع، که به ما اجازه می دهد یک تابع را برای هر عنصر از سری انتخاب شده اعمال کنیم:

پول ['درآمد جدید'] = پول ['درآمد'].apply(update_income)
پول
تصویر توسط نویسنده

و ما تمام شدیم! یک DataFrame جدید درخشان که دقیقاً از اطلاعات مورد نیاز ما تشکیل شده است، همه در دو خط کد. برای خلاصه‌تر کردن آن، حتی می‌توانستیم تابع لامبدا را در داخل تعریف کنیم apply مستقیم - نکته جالبی که ارزش در نظر گرفتن دارد.

نکته را در اینجا ساده می گویم.

لامبداها بسیار مفید هستند، بنابراین، شما باید از آنها استفاده کنید. لذت ببرید!

توابع دستکاری رشته های سری

در بخش قبل، در مورد تطبیق پذیری توابع لامبدا و همه چیزهای جالبی که می توانند به شما در انجام داده هایتان کمک کنند، صحبت کردیم. این عالی است، اما شما باید مراقب باشید که فریب نخورید. بسیار متداول است که آنقدر در یک روش آشنا برای انجام کارها غافل شوید که میانبرهای ساده تری را که پایتون به برنامه نویسان ارائه کرده است را از دست بدهید. البته این در مورد بیشتر از لامبداها صدق می کند، اما فعلاً به آن ادامه می دهیم.

به عنوان مثال، فرض کنید که ما DataFrame زیر را داریم names که نام و نام خانوادگی افراد را ذخیره می کند:

تصویر توسط نویسنده

اکنون، به دلیل محدودیت‌های فضایی در پایگاه داده ما، تصمیم می‌گیریم که به‌جای ذخیره کل نام خانوادگی یک شخص، کارآمدتر است که به سادگی آخرین حرف اول را ذخیره کنیم. بنابراین، ما باید آن را تغییر دهیم 'Last Name' بر این اساس ستون با لامبدا، تلاش ما برای انجام این کار ممکن است چیزی شبیه به زیر باشد:

names['Last Name'] = names['Last Name'].apply(lambda s: s[:1])
نام
تصویر توسط نویسنده

این به وضوح کار می کند، اما کمی بی نظم است، و بنابراین آنطور که می تواند پایتونیک باشد. خوشبختانه، با زیبایی توابع دستکاری رشته در پانداها، یک راه زیباتر دیگر وجود دارد (به منظور خط بعدی کد، فقط پیش بروید و فرض کنید که قبلاً تغییری در آن انجام نداده‌ایم. 'Last Name' ستون با کد بالا):

names['Last Name'] = names['Last Name'].str[:1]
نام
تصویر توسط نویسنده

تا-دا! را .str ویژگی یک سری Pandas به ما اجازه می دهد تا هر رشته در این سری را با یک عملیات رشته مشخص شده به هم متصل کنیم، درست مثل اینکه با هر رشته به صورت جداگانه کار می کنیم.

اما صبر کنید، بهتر می شود. از آنجا که .str به طور موثر به ما امکان می دهد از طریق سری به عملکرد معمولی یک رشته دسترسی داشته باشیم، همچنین می توانیم طیف وسیعی از توابع رشته را برای کمک به پردازش سریع داده هایمان اعمال کنیم! به عنوان مثال، فرض کنید تصمیم داریم هر دو ستون را به حروف کوچک تبدیل کنیم. کد زیر کار را انجام می دهد:

names['First Name'] = names['First Name'].str.lower()
names['Last Name'] = names['Last Name'].str.lower()
نام
تصویر توسط نویسنده

خیلی ساده تر از این است که برای تعریف توابع لامبدا خود و فراخوانی توابع رشته در داخل آن دردسر کنید. نه اینکه من عاشق لامبدا نیستم - اما هر چیزی جای خود را دارد و سادگی همیشه باید در پایتون اولویت داشته باشد.

من فقط چند نمونه را در اینجا پوشش داده ام، اما مجموعه بزرگی از توابع رشته ای در اختیار شماست [1].

آزادانه از آنها استفاده کنید. اونا عالین

افکار نهایی و جمع بندی

در اینجا یک برگه تقلب تبدیل داده برای شما آورده شده است:

  1. مثل اینکه منظور شماست فیلتر کنید. یاد بگیرید که واقعاً چه چیزی در حال وقوع است تا بدانید دارید چه کار می کنید.
  2. لامبداهای خود را دوست داشته باشید. آنها می توانند به شما در دستکاری داده ها به روش های شگفت انگیز کمک کنند.
  3. پانداها مثل شما رشته ها را دوست دارند. بسیاری از عملکردهای داخلی وجود دارد - شما همچنین می توانید از آن استفاده کنید.

در اینجا یک توصیه نهایی وجود دارد: هیچ روش صحیحی برای فیلتر کردن مجموعه داده وجود ندارد. این به داده های موجود و همچنین مشکل منحصر به فردی که به دنبال حل آن هستید بستگی دارد. با این حال، در حالی که هیچ روش مشخصی وجود ندارد که بتوانید هر بار دنبال کنید، مجموعه مفیدی از ابزارها وجود دارد که ارزش داشتن در اختیار شما را دارد. در این مقاله به سه مورد از آنها پرداختم.

من شما را تشویق می کنم که بیرون بروید و چیزهای بیشتری پیدا کنید.

منابع

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

تغییر ماهیت داده در پانداها با این سه تکنیک مفید بازنشر شده از منبع https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf 5620 از طریق https://towardsdatascience.com/feed

<!–

->

تمبر زمان:

بیشتر از مشاوران بلاک چین