از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش تکرار روی ردیفها در یک دیتا فریم پاندا
سرفصلهای مطلب
معرفی
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