از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Python with Pandas: DataFrame Tutorial با مثال
سرفصلهای مطلب
معرفی
Pandas یک کتابخانه منبع باز پایتون برای تجزیه و تحلیل داده ها است. برای پردازش و پردازش کارآمد و شهودی داده های ساخت یافته طراحی شده است.
دو ساختار داده اصلی در پانداها هستند Series
و DataFrame
. Series
در اصل آرایه های برچسب گذاری شده یک بعدی از هر نوع داده ای هستند، در حالی که DataFrame
s دو بعدی هستند، با انواع داده های بالقوه ناهمگن، آرایه های برچسب گذاری شده از هر نوع داده. ناهمگن به این معنی است که همه “ردیف ها” نیازی به اندازه یکسان ندارند.
در این مقاله رایج ترین روش های ایجاد 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))
این خروجی:
توجه به این نکته ضروری است 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
خروجی:
این به همان اندازه کار می کند:
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)
خروجی:
شما می توانید با تنظیم پارامتر اختیاری، مقداری را که Pandas برای پر کردن مقادیر از دست رفته استفاده می کند، کنترل کنید fill_value
:
dataFrame1.reindex(new_index, fill_value=0)
خروجی:
از آنجایی که ما یک شاخص جدید برای خود تنظیم کرده ایم 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
خروجی:
و اگر می خواهید یک ردیف را حذف کنید، ایندکس آن را به drop()
تابع. یک پارامتر اختیاری می گیرد، axis
. این axis
می پذیرد 0
/index
یا 1
/columns
. بسته به روی این drop()
تابع یا ردیفی که فراخوانی شده است را حذف می کند یا ستونی را که فراخوانی می شود.
عدم تعیین مقدار برای axis
پارامتر به طور پیش فرض ردیف مربوطه را حذف می کند axis
است 0
به صورت پیش فرض:
dataFrame1.drop(1, inplace=True)
خروجی:
همچنین می توانید ردیف هایی را که از قبل در جدول وجود دارد تغییر نام دهید. این rename()
تابع فرهنگ لغت تغییراتی را که می خواهید انجام دهید می پذیرد:
dataFrame1.rename({0:"First", 1:"Second"}, inplace=True)
خروجی:
توجه داشته باشید که 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
که خروجی را به ما می دهد:
حالا میتونیم زنگ بزنیم drop_duplicates()
:
dataFrame1.drop_duplicates(inplace=True)
dataFrame1
و ردیف های تکراری حذف خواهند شد:
دستکاری ستون ها
ستون های جدید را می توان به روشی مشابه با افزودن ردیف ها اضافه کرد:
dataFrame1('Color') = ('Green', 'Bright Red', 'Brown')
dataFrame1
خروجی:
همچنین مانند سطرها، ستون ها را می توان با فراخوانی حذف کرد drop()
تابع، تنها تفاوت این است که شما باید پارامتر اختیاری را تنظیم کنید axis
به 1
به طوری که پانداها بدانند که می خواهید یک ستون و نه یک ردیف را حذف کنید:
dataFrame1.drop('Feeling', axis=1, inplace=True)
خروجی:
وقتی نوبت به تغییر نام ستون ها می رسد، rename()
تابع باید به طور خاص گفته شود که منظور ما تغییر ستون ها با تنظیم پارامتر اختیاری است columns
به ارزش “فرهنگ لغت تغییر” ما:
dataFrame1.rename(columns={"Feeling":"Measure of Pain"}, inplace=True)
خروجی:
دوباره، مانند حذف/تغییر نام ردیف ها، می توانید پارامتر اختیاری را تنظیم کنید inplace
به True
اگر اصل می خواهید DataFrame
به جای اینکه تابعی جدید را برگرداند، اصلاح شد DataFrame
.
نتیجه
در این مقاله به بررسی چه پانداهایی پرداختیم DataFrame
s هستند، زیرا آنها یک کلاس کلیدی از چارچوب Pandas هستند که برای ذخیره داده ها استفاده می شود.
ما یاد گرفتیم که چگونه a DataFrame
به صورت دستی، با استفاده از فهرست و فرهنگ لغت، پس از آن داده ها را از یک فایل می خوانیم.
سپس، دادهها را دستکاری کردهایم DataFrame
– استفاده کردن loc()
و iloc()
، دادهها را پیدا کردهایم، ردیفها و ستونهای جدید ایجاد کردهایم، نامهای موجود را تغییر دادهایم و سپس آنها را حذف کردهایم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-16 15:53:03