وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

Python with Pandas: DataFrame Tutorial با مثال

0 18
زمان لازم برای مطالعه: 8 دقیقه


معرفی

Pandas یک کتابخانه منبع باز پایتون برای تجزیه و تحلیل داده ها است. برای پردازش و پردازش کارآمد و شهودی داده های ساخت یافته طراحی شده است.

دو ساختار داده اصلی در پانداها هستند Series و DataFrame. Series در اصل آرایه های برچسب گذاری شده یک بعدی از هر نوع داده ای هستند، در حالی که DataFrames دو بعدی هستند، با انواع داده های بالقوه ناهمگن، آرایه های برچسب گذاری شده از هر نوع داده. ناهمگن به این معنی است که همه “ردیف ها” نیازی به اندازه یکسان ندارند.

در این مقاله رایج ترین روش های ایجاد a را مرور خواهیم کرد DataFrame و روش های تغییر ساختار آنها.

ما از Jupyter نوت بوک از آنجایی که نمایش تصویری خوبی از آن ارائه می دهد DataFrameس اگرچه، هر IDE نیز این کار را انجام می دهد، فقط با فراخوانی a print() بیانیه روی را DataFrame هدف – شی.

ایجاد DataFrames

هر زمان که یک DataFrame، چه به صورت دستی یکی را ایجاد کنید یا از یک منبع داده مانند یک فایل – داده ها دارد به صورت جدولی، به عنوان دنباله ای از ردیف های حاوی داده، مرتب شوند.

این به این معنی است که ردیف‌ها ترتیب فیلدهای مشابهی دارند، یعنی اگر می‌خواهید یک داشته باشید DataFrame با اطلاعاتی در مورد نام و سن یک شخص، می‌خواهید مطمئن شوید که همه ردیف‌های شما اطلاعات را به یک شکل نگه می‌دارند.

هر گونه مغایرت باعث می شود DataFrame معیوب بودن که منجر به خطا می شود.

ایجاد یک DataFrame خالی

برای ایجاد یک خالی DataFrame به همین سادگی است:

import pandas as pd
dataFrame1 = pd.DataFrame()

ما نگاهی خواهیم داشت به اینکه چگونه می توانید ردیف و ستون را به این خالی اضافه کنید DataFrame در حالی که ساختار آنها را دستکاری می کنند.

ایجاد یک DataFrame از لیست ها

با پیروی از اصل “توالی ردیف ها با ترتیب فیلدهای یکسان”، می توانید a ایجاد کنید DataFrame از لیستی که حاوی چنین دنباله ای است یا از چند لیست zip()با هم به گونه ای جمع می شوند که دنباله ای مانند این را ارائه می دهند:

import pandas as pd

listPepper = ( 
            (50, "Bell pepper", "Not even spicy"), 
            (5000, "Espelette pepper", "Uncomfortable"), 
            (500000, "Chocolate habanero", "Practically ate pepper spray")
            )

dataFrame1 = pd.DataFrame(listPepper)

dataFrame1


این منجر به:

نتایج چارچوب داده

همین اثر را می‌توان با داشتن داده‌ها در فهرست‌های متعدد و zip()– آنها را با هم جمع کن این رویکرد می تواند زمانی مورد استفاده قرار گیرد که داده های ما با لیستی از مقادیر برای یک ستون (فیلد) منفرد (فیلد) ارائه می شود، به جای روش فوق الذکر که در آن یک لیست حاوی داده ها برای هر ردیف خاص به عنوان یک واحد است.

به این معنی که ما تمام داده ها (به ترتیب) برای ستون ها را به صورت جداگانه داریم، که وقتی با هم فشرده شوند، ردیف ایجاد می کنند.

ممکن است متوجه شده باشید که برچسب‌های ستون و ردیف در آن خیلی آموزنده نیستند DataFrame ما ایجاد کرده ایم. شما می توانید اطلاعات اضافی را هنگام ایجاد آن ارسال کنید DataFrameو یک کاری که می‌توانید انجام دهید این است که برچسب‌های سطر/ستون را که می‌خواهید استفاده کنید، بدهید:

import pandas as pd

listScoville = (50, 5000, 500000)
listName = ("Bell pepper", "Espelette pepper", "Chocolate habanero")
listFeeling = ("Not even spicy", "Uncomfortable", "Practically ate pepper spray")

dataFrame1 = pd.DataFrame(zip(listScoville, listName, listFeeling), columns = ('Scoville', 'Name', 'Feeling'))


dataFrame1

که همان خروجی قبلی را به ما می دهد، فقط با نام ستون های معنی دار تر:

تغییر نام ستون ها در یک دیتافریم

یکی دیگر از نمایش داده‌هایی که می‌توانید در اینجا استفاده کنید، ارائه داده‌ها به‌عنوان فهرستی از فرهنگ‌های لغت در قالب زیر است:

listPepper = (
    { columnName1 : valueForRow1, columnName2: valueForRow1, ... },
    { columnName1 : valueForRow2, columnName2: valueForRow2, ... },
    ...
)

در مثال ما نمایش به این صورت خواهد بود:

listPepper = (
  {'Scoville' : 50, 'Name' : 'Bell pepper', 'Feeling' : 'Not even spicy'},
  {'Scoville' : 5000, 'Name' : 'Espelette pepper', 'Feeling' : 'Uncomfortable'},
  {'Scoville' : 500000, 'Name' : 'Chocolate habanero', 'Feeling' : 'Practically ate pepper spray'},
)

و ما ایجاد می کنیم DataFrame به همان روش قبلی:

dataFrame1 = pd.DataFrame(listPepper)

ایجاد یک DataFrame از دیکشنری ها

دیکشنری ها روش دیگری برای ارائه داده ها به روش ستونی هستند. به هر ستون لیستی از مقادیری داده می شود که ردیف ها برای آن درج شده اند، به ترتیب:

dictionaryData = {
    'columnName1' : (valueForRow1, valueForRow2, valueForRow3...),
    'columnName2' : (valueForRow1, valueForRow2, valueForRow3...),
    ....
}

بیایید همان داده های قبلی را نشان دهیم، اما با استفاده از قالب فرهنگ لغت:

import pandas as pd
dictionaryData = {
    'Scoville' : (50, 5000, 500000),
    'Name' : ("Bell pepper", "Espelette pepper", "Chocolate habanero"),
    'Feeling' : ("Not even spicy", "Uncomfortable", "Practically ate pepper spray")
}

dataFrame1 = pd.DataFrame(dictionaryData)


dataFrame1

که خروجی مورد انتظار را به ما می دهد:

ایجاد دیتافریم از دیکشنری ها

خواندن یک DataFrame از یک فایل

انواع فایل های زیادی برای خواندن و نوشتن پشتیبانی می شوند DataFrameس هر تابع نوع فایل مربوطه از یک نحو پیروی می کند read_filetype()، مانند read_csv()، read_excel()، read_json()، read_html()، و غیره…

یک نوع فایل بسیار رایج است .csv (کاما-جداسازی-مقادیر). سطرها به صورت خطوط ارائه می شوند و مقادیری که قرار است حاوی آن ها باشند با جداکننده (اغلب کاما) از هم جدا شده اند. می توانید جداکننده دیگری را از طریق تنظیم کنید sep بحث و جدل.

اگر با آن آشنا نیستید .csv نوع فایل، این نمونه ای از آنچه به نظر می رسد است:

Scoville, Name, Feeling
50, Bell pepper, Not even spicy 
5.000, Espelette pepper, Uncomfortable
10.000, Serrano pepper, I regret this
60.000, Bird's eye chili, 4th stage of grief 
500.000, Chocolate habanero, Practically ate pepper spray
2.000.000, Carolina Reaper, Actually ate pepper spray

توجه داشته باشید که اولین خط در فایل نام ستون ها است. البته می‌توانید مشخص کنید که پانداها باید از کدام خط شروع به خواندن داده‌ها کنند، اما به‌طور پیش‌فرض Pandas خط اول را به‌عنوان نام ستون‌ها در نظر می‌گیرد و از خط دوم شروع به بارگیری داده‌ها می‌کند:

import pandas as pd

pepperDataFrame = pd.read_csv('pepper_example.csv')




pepperDataFrame

که خروجی را به ما می دهد:

خواندن یک فایل در یک دیتا فریم

دستکاری DataFrames

این بخش روش های اساسی برای تغییر a را پوشش می دهد DataFrameساختار با این حال، قبل از ورود به آن موضوع، باید بدانید که چگونه به ردیف‌ها یا گروه‌هایی از ردیف‌ها و همچنین ستون‌ها دسترسی داشته باشید.

دسترسی / مکان یابی عناصر

پانداها دو روش مختلف برای انتخاب داده دارند – loc() و iloc().

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



print(pepperDataFrame.loc(5))

print(pepperDataFrame.iloc(1)) 

خروجی:

Scoville               2.000.000
 Name                  Carolina Reaper
 Feeling               Actually ate pepper spray
Name: 5, dtype: object
Scoville               5.000
 Name                  Espelette pepper
 Feeling               Uncomfortable
Name: 1, dtype: object

این همچنین برای گروهی از ردیف‌ها، مانند از، کار می‌کند 0…n:

print(pepperDataFrame.loc(:1)) 

این خروجی:

python  پانداها لوک

توجه به این نکته ضروری است iloc() همیشه انتظار یک عدد صحیح را دارد. loc() انواع داده های دیگر را نیز پشتیبانی می کند. در اینجا نیز می‌توانیم از یک عدد صحیح استفاده کنیم، اگرچه می‌توانیم از انواع داده‌های دیگر مانند رشته‌ها نیز استفاده کنیم.

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

print(pepperDataFrame.loc(2, 'Name'))

این برمی گرداند:

Chocolate habanero

دسترسی به ستون ها به سادگی نوشتن است dataFrameName.ColumnName یا dataFrameName('ColumnName'). گزینه دوم ترجیح داده می شود زیرا ستون می تواند نامی مشابه با روش Pandas از پیش تعریف شده داشته باشد و استفاده از گزینه اول در این مورد می تواند باعث ایجاد اشکال شود:

print(pepperDataFrame('Name')) 

این خروجی:

0           Bell pepper
1      Espelette pepper
2    Chocolate habanero
Name: Name, dtype: object

با استفاده از آن می توان به ستون ها نیز دسترسی داشت loc() و iloc(). به عنوان مثال، ما به تمام ردیف‌ها، از دسترسی خواهیم داشت 0...n جایی که n تعداد سطرها و واکشی ستون اول است. این خروجی همان خط کد قبلی است:

dataFrame1.iloc(:, 1) 

دستکاری شاخص ها

شاخص ها برچسب های ردیف در الف هستند DataFrame، و زمانی که می خواهیم به ردیف ها دسترسی پیدا کنیم از آنها استفاده می کنیم. از آنجایی که ما شاخص های پیش فرضی را که پانداها به آنها اختصاص داده اند تغییر ندادیم DataFrameپس از ایجاد آنها، تمام ردیف های ما با اعداد صحیح از 0 به بالا برچسب گذاری شده اند.

اولین راه ما می توانیم نمایه سازی خود را تغییر دهیم DataFrame با استفاده از set_index() روش. ما از هر یک از ستون های موجود در خود عبور می کنیم DataFrame به این روش و تبدیل به شاخص جدید می شود. بنابراین می‌توانیم خودمان اندیس ایجاد کنیم یا به سادگی یک ستون را به عنوان شاخص اختصاص دهیم.

توجه داشته باشید که این روش نسخه اصلی را تغییر نمی دهد DataFrame اما در عوض یک جدید را برمی گرداند DataFrame با ایندکس جدید، بنابراین باید مقدار بازگشتی را به the اختصاص دهیم DataFrame متغیر اگر بخواهیم تغییر را حفظ کنیم یا آن را تنظیم کنیم inplace پرچم به True:

import pandas as pd

listPepper = (
  {'Scoville' : 50, 'Name' : 'Bell pepper', 'Feeling' : 'Not even spicy'},
  {'Scoville' : 5000, 'Name' : 'Espelette pepper', 'Feeling' : 'Uncomfortable'},
  {'Scoville' : 500000, 'Name' : 'Chocolate habanero', 'Feeling' : 'Practically ate pepper spray'},
)

dataFrame1 = pd.DataFrame(listPepper)
dataFrame2 = dataFrame1.set_index('Scoville')

dataFrame2

خروجی:

python  شاخص مجموعه پانداها

این به همان اندازه کار می کند:

dataFrame1 = pd.DataFrame(listPepper)
dataFrame1.set_index('Scoville', inplace=True)

dataFrame1

اکنون که یک شاخص غیر پیش‌فرض داریم، می‌توانیم از مجموعه‌ای از مقادیر جدید استفاده کنیم reindex()، پانداها به طور خودکار مقادیر را با آن پر می کنند NaN برای هر شاخصی که نمی توان با یک ردیف موجود مطابقت داد:

new_index = (50, 5000, 'New value not present in the data frame')
dataFrame1.reindex(new_index)

خروجی:

python  پانداها دوباره فهرست

شما می توانید با تنظیم پارامتر اختیاری، مقداری را که Pandas برای پر کردن مقادیر از دست رفته استفاده می کند، کنترل کنید fill_value:

dataFrame1.reindex(new_index, fill_value=0)

خروجی:

python  ارزش پر کردن پانداها

از آنجایی که ما یک شاخص جدید برای خود تنظیم کرده ایم DataFrame، loc() اکنون با آن شاخص کار می کند:

dataFrame1.loc(5000) 

این منجر به:

Name       Espelette pepper
Feeling       Uncomfortable
Name: 5000, dtype: object

دستکاری ردیف ها

اگر با استفاده از آن راحت باشید، افزودن و حذف ردیف ها ساده می شود loc(). اگر ردیفی را تنظیم کنید که وجود ندارد، ایجاد می شود:

dataFrame1.loc(50) = (10000, 'Serrano pepper', 'I regret this')
dataFrame1

خروجی:

python  خروجی لوک پاندا

و اگر می خواهید یک ردیف را حذف کنید، ایندکس آن را به drop() تابع. یک پارامتر اختیاری می گیرد، axis. این axis می پذیرد 0/index یا 1/columns. بسته به روی این drop() تابع یا ردیفی که فراخوانی شده است را حذف می کند یا ستونی را که فراخوانی می شود.

عدم تعیین مقدار برای axis پارامتر به طور پیش فرض ردیف مربوطه را حذف می کند axis است 0 به صورت پیش فرض:

dataFrame1.drop(1, inplace=True) 

خروجی:

python  عملکرد سقوط پانداها

همچنین می توانید ردیف هایی را که از قبل در جدول وجود دارد تغییر نام دهید. این rename() تابع فرهنگ لغت تغییراتی را که می خواهید انجام دهید می پذیرد:

dataFrame1.rename({0:"First", 1:"Second"}, inplace=True)

خروجی:

python  تغییر نام پانداها

توجه داشته باشید که drop() و rename() همچنین پارامتر اختیاری را بپذیرید – inplace. تنظیم این به True (False به طور پیش فرض) به پانداها می گوید که نسخه اصلی را تغییر دهند DataFrame به جای برگرداندن یک مورد جدید اگر تنظیم نشده باقی بماند، باید حاصل را بسته بندی کنید DataFrame به یک جدید برای تداوم تغییرات.

روش مفید دیگری که باید از آن آگاه باشید این است drop_duplicates() تابعی که تمام ردیف های تکراری را از DataFrame. بیایید این را با اضافه کردن دو ردیف تکراری نشان دهیم:

dataFrame1.loc(3) = (60.000, "Bird's eye chili", "4th stage of grief")
dataFrame1.loc(4) = (60.000, "Bird's eye chili", "4th stage of grief")

dataFrame1

که خروجی را به ما می دهد:

python  پانداها تکراری اضافه می کنند

حالا میتونیم زنگ بزنیم drop_duplicates():

dataFrame1.drop_duplicates(inplace=True)

dataFrame1

و ردیف های تکراری حذف خواهند شد:
python  پانداها تکراری را حذف می کنند

دستکاری ستون ها

ستون های جدید را می توان به روشی مشابه با افزودن ردیف ها اضافه کرد:

dataFrame1('Color') = ('Green', 'Bright Red', 'Brown')
dataFrame1

خروجی:

python  پانداها ستون ها را دستکاری می کنند

همچنین مانند سطرها، ستون ها را می توان با فراخوانی حذف کرد drop() تابع، تنها تفاوت این است که شما باید پارامتر اختیاری را تنظیم کنید axis به 1 به طوری که پانداها بدانند که می خواهید یک ستون و نه یک ردیف را حذف کنید:

dataFrame1.drop('Feeling', axis=1, inplace=True)

خروجی:

python  پانداها در جای خود می افتند

وقتی نوبت به تغییر نام ستون ها می رسد، rename() تابع باید به طور خاص گفته شود که منظور ما تغییر ستون ها با تنظیم پارامتر اختیاری است columns به ارزش “فرهنگ لغت تغییر” ما:

dataFrame1.rename(columns={"Feeling":"Measure of Pain"}, inplace=True)

خروجی:

python  پانداها تغییر نام ستون

دوباره، مانند حذف/تغییر نام ردیف ها، می توانید پارامتر اختیاری را تنظیم کنید inplace به True اگر اصل می خواهید DataFrame به جای اینکه تابعی جدید را برگرداند، اصلاح شد DataFrame.

نتیجه

در این مقاله به بررسی چه پانداهایی پرداختیم DataFrames هستند، زیرا آنها یک کلاس کلیدی از چارچوب Pandas هستند که برای ذخیره داده ها استفاده می شود.

ما یاد گرفتیم که چگونه a DataFrame به صورت دستی، با استفاده از فهرست و فرهنگ لغت، پس از آن داده ها را از یک فایل می خوانیم.

سپس، داده‌ها را دستکاری کرده‌ایم DataFrame – استفاده کردن loc() و iloc()، داده‌ها را پیدا کرده‌ایم، ردیف‌ها و ستون‌های جدید ایجاد کرده‌ایم، نام‌های موجود را تغییر داده‌ایم و سپس آنها را حذف کرده‌ایم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-16 15:53:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید