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

سرور مجازی NVMe

روش تکرار روی ردیف‌ها در یک دیتا فریم پاندا

0 20
زمان لازم برای مطالعه: 5 دقیقه


معرفی

Pandas یک چارچوب دستکاری داده بسیار محبوب برای پایتون است. در بسیاری از موارد، ممکن است بخواهید روی داده ها تکرار کنید – یا به print آن را خارج کنید یا برخی از عملیات را انجام دهید روی آی تی.

در این آموزش، روش تکرار روی ردیف‌ها در پانداها را بررسی می‌کنیم DataFrame.

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

  • items()
  • iterrows()
  • itertuples()

تکرار DataFrame با موارد()

بیایید راه اندازی کنیم DataFrame با برخی از داده های افراد خیالی:

import pandas as pd

df = pd.DataFrame({
    'first_name': ('John', 'Jane', 'Marry', 'Victoria', 'Gabriel', 'Layla'),
    'last_name': ('Smith', 'Doe', 'Jackson', 'Smith', 'Brown', 'Martinez'),
    'age': (34, 29, 37, 52, 26, 32)},
    index=('id001', 'id002', 'id003', 'id004', 'id005', 'id006'))

توجه داشته باشید که ما از ID به عنوان خود استفاده می کنیم DataFrameشاخص بیایید نگاهی به چگونگی DataFrame به نظر می رسد:

print(df.to_string())
      first_name last_name  age
id001       John     Smith   34
id002       Jane       Doe   29
id003      Marry   Jackson   37
id004   Victoria     Smith   52
id005    Gabriel     Brown   26
id006      Layla  Martinez   32

در حال حاضر، به تکرار در این مورد DataFrame، ما از items() تابع:

df.items()

این یک ژنراتور را برمی گرداند:

<generator object DataFrame.items at 0x7f3c064c1900>

ما می توانیم از این برای تولید جفت استفاده کنیم col_name و data. این جفت ها شامل نام ستون و هر ردیف داده برای آن ستون خواهند بود. بیایید نام ستون‌ها و داده‌های آنها را مرور کنیم:

for col_name, data in df.items():
    print("col_name:",col_name, "\ndata:",data)

این نتیجه در:

col_name: first_name
data: 
id001        John
id002        Jane
id003       Marry
id004    Victoria
id005     Gabriel
id006       Layla
Name: first_name, dtype: object
col_name: last_name
data: 
id001       Smith
id002         Doe
id003     Jackson
id004       Smith
id005       Brown
id006    Martinez
Name: last_name, dtype: object
col_name: age
data: 
id001    34
id002    29
id003    37
id004    52
id005    26
id006    32
Name: age, dtype: int64

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

ما همچنین میتوانیم print یک ردیف خاص با عبور شماره شاخص به data همانطور که با لیست های پایتون انجام می دهیم:

for col_name, data in df.items():
    print("col_name:",col_name, "\ndata:",data(1))

توجه داشته باشید که فهرست فهرست دارای شاخص صفر است، بنابراین data(1) به ردیف دوم اشاره می کند. این خروجی را خواهید دید:

col_name: first_name 
data: Jane
col_name: last_name 
data: Doe
col_name: age 
data: 29

ما همچنین می توانیم عبور کنیم مقدار شاخص به data.

for col_name, data in df.items():
    print("col_name:",col_name, "\ndata:",data('id002'))

خروجی مانند قبل خواهد بود:

col_name: first_name
data: Jane
col_name: last_name
data: Doe
col_name: age
data: 29

تکرار DataFrame با iterrows()

در حالی که df.items() بر روی سطرها به صورت ستونی تکرار می شود و می توانیم از یک چرخه برای هر ستون استفاده کنیم iterrows() برای به دست آوردن کل داده های ردیف یک شاخص.

بیایید سعی کنیم ردیف‌ها را تکرار کنیم iterrows():

for i, row in df.iterrows():
    print(f"Index: {i}")
    print(f"{row}\n")

در حلقه for، i نشان دهنده ستون شاخص است (DataFrame ما دارای شاخص هایی از id001 به id006) و row شامل داده های آن شاخص در تمام ستون ها است. خروجی ما به این صورت خواهد بود:

Index: id001
first_name     John
last_name     Smith
age              34
Name: id001, dtype: object

Index: id002
first_name    Jane
last_name      Doe
age             29
Name: id002, dtype: object

Index: id003
first_name      Marry
last_name     Jackson
age                37
Name: id003, dtype: object

...

به همین ترتیب، می‌توانیم روی ردیف‌های یک ستون خاص تکرار کنیم. به سادگی عبور از عدد شاخص یا نام ستون به row. به عنوان مثال، ما می توانیم انتخابی print ستون اول سطر به این صورت است:

for i, row in df.iterrows():
    print(f"Index: {i}")
    print(f"{row('0')}")

یا:

for i, row in df.iterrows():
    print(f"Index: {i}")
    print(f"{row('first_name')}")

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

Index: id001
John
Index: id002
Jane
Index: id003
Marry
Index: id004
Victoria
Index: id005
Gabriel
Index: id006
Layla

تکرار DataFrame با itertuples()

را itertuples() تابع همچنین یک ژنراتور را برمی گرداند که مقادیر ردیف را به صورت چند تایی تولید می کند. بیایید این را امتحان کنیم:

for row in df.itertuples():
    print(row)

این را در پوسته پایتون خود خواهید دید:

Pandas(Index='id001', first_name='John', last_name='Smith', age=34)
Pandas(Index='id002', first_name='Jane', last_name='Doe', age=29)
Pandas(Index='id003', first_name='Marry', last_name='Jackson', age=37)
Pandas(Index='id004', first_name='Victoria', last_name='Smith', age=52)
Pandas(Index='id005', first_name='Gabriel', last_name='Brown', age=26)
Pandas(Index='id006', first_name='Layla', last_name='Martinez', age=32)

را itertuples() متد دو آرگومان دارد: index و name.

می‌توانیم انتخاب کنیم که ستون فهرست با تنظیم نشان داده نشود index پارامتر به False:

for row in df.itertuples(index=False):
    print(row)

تاپل های ما دیگر ایندکس نمایش داده نمی شوند:

Pandas(first_name='John', last_name='Smith', age=34)
Pandas(first_name='Jane', last_name='Doe', age=29)
Pandas(first_name='Marry', last_name='Jackson', age=37)
Pandas(first_name='Victoria', last_name='Smith', age=52)
Pandas(first_name='Gabriel', last_name='Brown', age=26)
Pandas(first_name='Layla', last_name='Martinez', age=32)

همانطور که قبلاً متوجه شده اید، این ژنراتور بازده می دهد به نام دوتایی با نام پیش فرض Pandas. ما می توانیم این را با عبور تغییر دهیم People استدلال به name پارامتر. شما می توانید هر نامی را که دوست دارید انتخاب کنید، اما همیشه بهتر است نام های مرتبط با داده های خود را انتخاب کنید:

for row in df.itertuples(index=False, name='People'):
    print(row)

حال خروجی ما این خواهد بود:

People(first_name='John', last_name='Smith', age=34)
People(first_name='Jane', last_name='Doe', age=29)
People(first_name='Marry', last_name='Jackson', age=37)
People(first_name='Victoria', last_name='Smith', age=52)
People(first_name='Gabriel', last_name='Brown', age=26)
People(first_name='Layla', last_name='Martinez', age=32)

عملکرد تکرار با پانداها

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

برای مجموعه داده های کوچک می توانید از to_string() روشی برای نمایش تمام داده ها برای مجموعه داده های بزرگتر که دارای ستون ها و ردیف های زیادی هستند، می توانید استفاده کنید head(n) یا tail(n) روش های به print از اول n ردیف های DataFrame شما (مقدار پیش فرض برای n 5 است).

مقایسه سرعت

برای اندازه گیری سرعت هر روش خاص، آنها را در توابعی قرار دادیم که آنها را 1000 بار اجرا کرده و میانگین زمان اجرا را برمی گرداند.

برای آزمایش این روش ها، از هر دو روش استفاده خواهیم کرد print() و list.append() توابع برای ارائه داده های مقایسه بهتر و پوشش موارد استفاده رایج. برای تعیین یک برنده منصفانه، ما روی DataFrame تکرار می کنیم و فقط از 1 مقدار برای آن استفاده می کنیم print یا در هر حلقه اضافه شود.

در اینجا مقادیر بازگشتی برای هر روش به نظر می رسد:

به عنوان مثال، در حالی که items() ستون به ستون می چرخد:

('first_name', 
id001        John
id002        Jane
id003       Marry
id004    Victoria
id005     Gabriel
id006       Layla
Name: first_name, dtype: object)

iterrows() تمام داده های ستون را برای یک ردیف خاص ارائه می دهد:

('id001', 
first_name     John
last_name     Smith
age              34
Name: id001, dtype: object)

و در نهایت، یک ردیف برای itertuples() به این شکل خواهد بود:

Pandas(Index='id001', first_name='John', last_name='Smith', age=34)

در اینجا میانگین نتایج در ثانیه آمده است:

روش سرعت (ها) تابع تست
موارد() 1.349279541666571 print()
iterrows() 3.4104003086661883 print()
itertuples() 0.41232967500279 print()
روش سرعت (ها) تابع تست
موارد() 0.006637570998767235 ضمیمه ()
iterrows() 0.5749766406661365 ضمیمه ()
itertuples() 0.3058610513350383 ضمیمه ()

چاپ مقادیر به زمان و منابع بیشتری نسبت به پیوست کردن به طور کلی نیاز دارد و مثال‌های ما نیز از این قاعده مستثنی نیستند. در حالی که itertuples() زمانی که با آن ترکیب شود عملکرد بهتری دارد print()، items() این روش زمانی که برای آن استفاده می شود به طرز چشمگیری بهتر از سایرین عمل می کند append() و iterrows() برای هر مقایسه آخرین مورد باقی می ماند.

لطفاً توجه داشته باشید که این نتایج آزمایش بسیار بستگی دارد روی عوامل دیگری مانند سیستم عامل، محیط، منابع محاسباتی، و غیره. اندازه داده های شما نیز تاثیرگذار خواهد بود روی نتایج شما

نتیجه

ما یاد گرفتیم که چگونه روی DataFrame با سه روش مختلف Pandas تکرار کنیم – items()، iterrows()، itertuples(). بسته به روی داده ها و تنظیمات برگزیده شما می توانید از یکی از آنها در پروژه های خود استفاده کنید.

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



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

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

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

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