از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
قدرت نمایه سازی: افزایش راندمان جدال داده ها با پانداها
سرفصلهای مطلب
معرفی
Pandas پرمصرفترین کتابخانه پایتون برای دستکاری دادهها است و به ما امکان میدهد به طور موثر به دادهها دسترسی داشته باشیم و آنها را دستکاری کنیم.
با درک و استفاده مؤثر از تکنیکهای نمایهسازی در پانداها، میتوانیم سرعت و کارایی وظایف مربوط به بحث دادههای خود را به میزان قابل توجهی بهبود بخشیم.
در این مقاله، تکنیکهای مختلف نمایهسازی در پانداها را بررسی میکنیم و خواهیم دید که چگونه میتوان از آنها برای کشمکش سریعتر داده استفاده کرد.
معرفی نمایه سازی در پانداها
کتابخانه Pandas دو شی اصلی را ارائه می دهد: Series و DataFrames.
سری پانداها یک آرایه با برچسب تک بعدی است که قادر به نگهداری هر نوع داده ای است.
Pandas DataFrame یک جدول شبیه به صفحه گسترده است که می تواند هر نوع داده ای را ذخیره کند و با سطرها و ستون ها ساخته شده است.
برای دقیق تر، Pandas DataFrame همچنین می تواند به عنوان مجموعه سفارش داده شده از سری Pandas دیده شود.
بنابراین، هر دو سری و DataFrame دارای یک شاخص هستند که راهی برای شناسایی و دسترسی منحصر به فرد هر عنصر فراهم می کند.
در این مقاله، برخی از تکنیکهای نمایهسازی در پانداها را برای بهبود کارهای دستکاری دادههای روزانه شما نشان خواهیم داد.
تکنیک های کدگذاری نمایه سازی در پانداها
اکنون، بیایید برخی از تکنیک های نمایه سازی را با استفاده از کد واقعی پایتون بررسی کنیم.
نمایه سازی مبتنی بر عدد صحیح
ما با روش مبتنی بر عدد صحیح شروع می کنیم که به ما امکان می دهد سطرها و ستون ها را در یک قاب داده انتخاب کنیم.
اما ابتدا بیایید بفهمیم که چگونه می توانیم یک قاب داده در پانداها ایجاد کنیم:
import pandas as pd
data = {
'A': (1, 2, 3, 4, 5),
'B': (6, 7, 8, 9, 10),
'C': (11, 12, 13, 14, 15)
}
df = pd.DataFrame(data)
print(df)
این تولید خواهد کرد:
A B C
0 1 6 11
1 2 7 12
2 3 8 13
3 4 9 14
4 5 10 15
همانطور که می بینیم، داده های یک قاب داده پانداها به همان روشی ایجاد می شوند که یک فرهنگ لغت در پایتون ایجاد می کنیم. در واقع نام ستون ها کلید و اعداد موجود در لیست ها مقادیر هستند. نام و مقادیر ستون ها دقیقاً مانند کلیدها و مقادیر در فرهنگ لغت ها با یک دونقطه از هم جدا می شوند. در نهایت، آنها در داخل براکت های مجعد قرار می گیرند.
متدولوژی مبتنی بر عدد صحیح از این روش استفاده می کند iloc()
برای نمایه سازی یک قاب داده به عنوان مثال، اگر بخواهیم دو ردیف را ایندکس کنیم، می توانیم موارد زیر را تایپ کنیم:
sliced_rows = df.iloc(1:3)
print(sliced_rows)
و دریافت می کنیم:
A B C
1 2 7 12
2 3 8 13
توجه داشته باشید: به یاد داشته باشید که در پایتون شروع به شمارش از 0 می کنیم، iloc(1:3)
ردیف دوم و سوم را انتخاب می کند.
اکنون، iloc()
همچنین می توانید ستون هایی مانند این را انتخاب کنید:
sliced_cols = df.iloc(:, 0:2)
print(sliced_cols)
و دریافت می کنیم:
A B
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
بنابراین، در این مورد، دو نقطه در داخل براکت های مربع به این معنی است که ما می خواهیم تمام مقادیر در سطرها را بگیریم. سپس بعد از کاما مشخص می کنیم که کدام ستون ها را می خواهیم دریافت کنیم (به یاد داشته باشید که از 0 شروع به شمارش می کنیم).
راه دیگر برای برش فهرست ها با اعداد صحیح استفاده از عبارت است loc()
روش. به عنوان مثال، مانند این:
sliced_rows = df.loc(1:3)
print(sliced_rows)
و دریافت می کنیم:
A B C
1 2 7 12
2 3 8 13
3 4 9 14
توجه داشته باشید: نگاهی عمیق به هر دو loc()
و iloc()
روش ها، ما می توانیم آن را در .loc()
، برچسب های شروع و پایان هر دو شامل هستند، در حالی که iloc()
شامل شاخص شروع و مستثنی از شاخص پایان است.
همچنین، ما می خواهیم اضافه کنیم که loc()
روش این امکان را به ما می دهد که یک Pandas DataFrame را با ایندکس های تغییر نام داده شده برش دهیم. بیایید ببینیم منظورمان از یک مثال چیست:
import pandas as pd
data = {
'A': (1, 2, 3, 4, 5),
'B': (6, 7, 8, 9, 10),
'C': (11, 12, 13, 14, 15)
}
df = pd.DataFrame(data, index=('Row_1', 'Row_2', 'Row_3', 'Row_4', 'Row_5'))
sliced_rows = df.loc('Row_2':'Row_4')
print(sliced_rows)
و دریافت می کنیم:
A B C
Row_2 2 7 12
Row_3 3 8 13
Row_4 4 9 14
بنابراین، همانطور که می بینیم، اکنون ایندکس ها دیگر اعداد صحیح نیستند: آنها رشته ها و the هستند loc()
روش را می توان برای برش قاب داده همانطور که انجام دادیم استفاده کرد.
نمایه سازی بولی
نمایه سازی بولی شامل انتخاب سطرها یا ستون ها بر اساس است روی شرطی که به صورت بولی بیان می شود. قاب داده (یا سری) فیلتر میشود تا فقط ردیفها یا ستونهایی را شامل شود که شرایط داده شده را برآورده میکنند.
به عنوان مثال، فرض کنید یک قاب داده با تمام مقادیر عددی داریم. میخواهیم قاب داده را با ایندکس کردن یک ستون فیلتر کنیم تا فقط مقادیر بزرگتر از دو را به ما نشان دهد. ما می توانیم این کار را به این صورت انجام دهیم:
import pandas as pd
data = {
'A': (1, 2, 3, 4, 5),
'B': (6, 7, 8, 9, 10),
'C': (11, 12, 13, 14, 15)
}
df = pd.DataFrame(data)
condition = df('A') > 2
filtered_rows = df(condition)
print(filtered_rows)
و دریافت می کنیم:
A B C
2 3 8 13
3 4 9 14
4 5 10 15
بنابراین، با condition = df('A') > 2
، ما یک سری Pandas ایجاد کرده ایم که مقادیر بیشتر از دو را در ستون دریافت می کند A
. سپس، با filtered_rows = df(condition)
، ما یک دیتافریم فیلتر شده ایجاد کرده ایم که فقط ردیف هایی را نشان می دهد که با شرایطی که ما اعمال کردیم مطابقت دارند روی ستون A
.
البته، میتوانیم یک دیتافریم را ایندکس کنیم تا با شرایط مختلف، حتی برای ستونهای مختلف، مطابقت داشته باشد. به عنوان مثال، بگویید می خواهیم یک شرط اضافه کنیم روی ستون A
و روی ستون B
. ما می توانیم این کار را به این صورت انجام دهیم:
condition = (df('A') > 2) & (df('B') < 10)
filtered_rows = df(condition)
print(filtered_rows)
و دریافت می کنیم:
A B C
2 3 8 13
3 4 9 14
بنابراین، برای اضافه کردن چند شرط، از عملگر استفاده می کنیم &
.
همچنین، حتی میتوانیم کل قاب داده را برش دهیم. به عنوان مثال، بگویید که ما فقط می خواهیم ستون هایی را ببینیم که مقادیر بزرگتر از هشت دارند. ما می توانیم این کار را به این صورت انجام دهیم:
condition = (df > 8).all()
filtered_cols = df.loc(:, condition)
print(filtered_cols)
و دریافت می کنیم:
C
0 11
1 12
2 13
3 14
4 15
و بنابراین، فقط ستون C
با شرایط تحمیلی مطابقت دارد.
بنابراین، با روش all()
، ما در حال تحمیل یک شرط هستیم روی کل قاب داده
تنظیم نمایه های جدید و بازنشانی به شاخص های قدیمی
شرایطی وجود دارد که در آن ممکن است ستونی از یک قاب داده پاندا را بگیریم و از آن به عنوان شاخصی برای کل قاب داده استفاده کنیم. به عنوان مثال، در مواردی که این نوع دستکاری ممکن است منجر به برش سریعتر شاخص ها شود.
به عنوان مثال، در نظر بگیرید که ما یک چارچوب داده داریم که داده های مربوط به کشورها، شهرها و جمعیت مربوطه آنها را ذخیره می کند. ممکن است بخواهیم ستون شهر را به عنوان شاخص قاب داده تنظیم کنیم. ما می توانیم این کار را به این صورت انجام دهیم:
import pandas as pd
data = {
'City': ('New York', 'Los Angeles', 'Chicago', 'Houston'),
'Country': ('USA', 'USA', 'USA', 'USA'),
'Population': (8623000, 4000000, 2716000, 2302000)
}
df = pd.DataFrame(data)
df.set_index(('City'), inplace=True)
print(df)
و داریم:
Country Population
City
New York USA 8623000
Los Angeles USA 4000000
Chicago USA 2716000
Houston USA 2302000
توجه داشته باشید که ما قبلاً از روش مشابهی استفاده کردیم، به طور خاص در انتهای پاراگراف “شاخص سازی مبتنی بر عدد صحیح”. از این روش برای تغییر نام ایندکس ها استفاده شد: ما در ابتدا اعدادی داشتیم و آنها را به عنوان رشته تغییر نام دادیم.
در این مورد آخر، یک ستون به شاخص قاب داده تبدیل شده است. این بدان معنی است که ما می توانیم آن را با استفاده از فیلتر کنیم loc()
همانطور که قبلا انجام دادیم:
sliced_rows = df.loc('New York':'Chicago')
print(sliced_rows)
و نتیجه این است:
Country Population
City
New York USA 8623000
Los Angeles USA 4000000
Chicago USA 2716000
توجه داشته باشید: هنگامی که ستونی را همانطور که انجام دادیم ایندکس می کنیم، نام ستون “پایین” می افتد، به این معنی که همانطور که می بینیم، دیگر در سطح نام سایر ستون ها نیست. در این موارد، ستون نمایهشده («شهر»، در این مورد) دیگر مانند ستونهای پاندا قابل دسترسی نیست، تا زمانی که آن را بهعنوان یک ستون بازیابی کنیم.
بنابراین، اگر بخواهیم روش نمایه سازی کلاسیک را بازیابی کنیم، ستون(های) نمایه شده را به عنوان ستون(ها) بازیابی کنیم، می توانیم موارد زیر را تایپ کنیم:
df_reset = df.reset_index()
print(df_reset)
و دریافت می کنیم:
City Country Population
0 New York USA 8623000
1 Los Angeles USA 4000000
2 Chicago USA 2716000
3 Houston USA 2302000
بنابراین، در این مورد، ما یک DataFrame جدید به نام ایجاد کردهایم df_reset
با روش reset_index()
، که همانطور که می بینیم ایندکس ها را بازیابی کرده است.
مرتب سازی شاخص ها
Pandas همچنین به ما این امکان را می دهد که با استفاده از sort_index()
روشی مثل این:
import pandas as pd
data = {
'B': (6, 7, 8, 9, 10),
'A': (1, 2, 3, 4, 5),
'C': (11, 12, 13, 14, 15)
}
df = pd.DataFrame(data)
df_sorted = df.sort_index(ascending=False)
print(df_sorted)
و این نتیجه می شود:
B A C
4 10 5 15
3 9 4 14
2 8 3 13
1 7 2 12
0 6 1 11
این متدولوژی می تواند حتی زمانی که نام ایندکس ها را تغییر می دهیم یا زمانی که یک ستون را ایندکس می کنیم مورد استفاده قرار گیرد. به عنوان مثال، فرض کنید می خواهیم نام ایندکس ها را تغییر دهیم و آنها را به ترتیب نزولی مرتب کنیم:
import pandas as pd
data = {
'B': (6, 7, 8, 9, 10),
'A': (1, 2, 3, 4, 5),
'C': (11, 12, 13, 14, 15)
}
df = pd.DataFrame(data, index=("row 1", "row 2", "row 3", "row 4", "row 5"))
df_sorted = df.sort_index(ascending=False)
print(df_sorted)
و داریم:
B A C
row 5 10 5 15
row 4 9 4 14
row 3 8 3 13
row 2 7 2 12
row 1 6 1 11
بنابراین، برای رسیدن به این نتیجه، از sort_index()
و عبور کنید ascending=False
پارامتر به آن
نتیجه گیری
در این مقاله، روشهای مختلفی برای فهرستبندی فریمهای داده پانداها نشان دادهایم.
برخی از متدولوژیها نتایجی مشابه سایر روشها دارند، بنابراین انتخاب باید با در نظر گرفتن نتیجه دقیقی که میخواهیم هنگام دستکاری دادههایمان به دست آوریم، انجام شود.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-30 12:49:03