Bạn có thể lặp DataFrame trong python không?

Đôi khi bạn có thể muốn lặp/lặp lại khung dữ liệu Pandas và thực hiện một số thao tác trên mỗi hàng. Pandas có ít nhất hai tùy chọn để lặp qua các hàng của khung dữ liệu

Hãy cho chúng tôi xem các ví dụ về cách lặp qua khung dữ liệu Pandas. Trước tiên, chúng ta sẽ sử dụng chức năng Pandas iterrows để lặp qua các hàng của khung dữ liệu Pandas. Ngoài iterrows, Pandas còn có một hàm hữu ích itertuples(). Chúng ta cũng sẽ xem các ví dụ về việc sử dụng itertuples() để lặp qua các hàng của khung dữ liệu Pandas. Có những khác biệt tinh tế trong việc sử dụng từng loại và chúng ta cũng sẽ thấy chúng

Hãy để chúng tôi sử dụng một bộ dữ liệu thú vị có sẵn trong vega_datasets trong Python

 
# import vega_dataets
from vega_datasets import data
#import pandas
import pandas as pd

Hãy cho chúng tôi xem các tập dữ liệu có sẵn trong vega_datasets và sử dụng tập dữ liệu Flight_2k

 
# check to see the list of data sets
data.list_datasets()
flights=data.flights_2k()

Nó chứa thông tin chuyến bay khởi hành, đến và khoảng cách cho 2000 chuyến bay

 
flights.head()
	date	delay	destination	distance	origin
0	2001-01-14 21:55:00	0	SMF	480	SAN
1	2001-03-26 20:15:00	-11	SLC	507	PHX
2	2001-03-05 14:55:00	-3	LAX	714	ELP

Cách lặp qua các hàng với Pandas iterrows()

Pandas có hàm iterrows() sẽ giúp bạn lặp qua từng hàng của khung dữ liệu. Pandas’ iterrows() trả về một iterator chứa chỉ mục của mỗi hàng và dữ liệu trong mỗi hàng dưới dạng Sê-ri

Vì iterrows() trả về iterator nên chúng ta có thể sử dụng hàm next để xem nội dung của iterator. Chúng ta có thể thấy rằng iterrows trả về một tuple với chỉ mục hàng và dữ liệu hàng dưới dạng đối tượng Sê-ri

 
>next(flights.iterrows())
(0, date           2001-01-14 21:55:00
 delay                            0
 destination                    SMF
 distance                       480
 origin                         SAN
 Name: 0, dtype: object)

Chúng ta có thể lấy hàng nội dung bằng cách lấy phần tử thứ hai của bộ dữ liệu

 
row = next(flights.iterrows())[1]
row
date           2001-01-14 21:55:00
delay                            0
destination                    SMF
distance                       480
origin                         SAN
Name: 0, dtype: object

Chúng ta có thể lặp qua khung dữ liệu Pandas và truy cập chỉ mục của từng hàng và nội dung của từng hàng một cách dễ dàng. Ở đây, chúng tôi in trình vòng lặp từ iterrows() và thấy rằng chúng tôi nhận được một chỉ mục và Sê-ri cho mỗi hàng

 
for index, row in flights.head(n=2).iterrows():
     print(index, row)
0 date           2001-01-14 21:55:00
delay                            0
destination                    SMF
distance                       480
origin                         SAN
Name: 0, dtype: object
1 date           2001-03-26 20:15:00
delay                          -11
destination                    SLC
distance                       507
origin                         PHX
Name: 1, dtype: object

Vì dữ liệu hàng được trả về dưới dạng Sê-ri nên chúng ta có thể sử dụng tên cột để truy cập giá trị của từng cột trong hàng. Ở đây chúng tôi lặp qua từng hàng và chúng tôi gán chỉ mục hàng và dữ liệu hàng cho các biến có tên là chỉ mục và hàng. Sau đó, chúng tôi truy cập dữ liệu hàng bằng tên cột của khung dữ liệu

 
# iterate over rows with iterrows()
for index, row in flights.head().iterrows():
     # access data using column names
     print(index, row['delay'], row['distance'], row['origin'])
 
0 0 480 SAN
1 -11 507 PHX
2 -3 714 ELP
3 12 342 SJC
4 2 373 SMF

Bởi vì iterrows() trả về một Sê-ri cho mỗi hàng nên nó không giữ nguyên các kiểu dữ liệu trên các hàng. Tuy nhiên, các loại dữ liệu được giữ nguyên trên các cột cho DataFrames. Chúng ta hãy xem một ví dụ đơn giản minh họa điều này

Hãy để chúng tôi tạo một khung dữ liệu đơn giản với một hàng có hai cột, trong đó một cột là int và cột kia là float

 
>df = pd.DataFrame([[3, 5.5]], columns=['int_column', 'float_column'])
>print(df)
   int_column  float_column
0           3           5.5

Hãy sử dụng iterrows() để lấy nội dung của hàng và in kiểu dữ liệu của int_column. Trong khung dữ liệu gốc int_column là một số nguyên. Tuy nhiên khi xem kiểu dữ liệu qua iterrows() thì int_column là đối tượng float

 
# check to see the list of data sets
data.list_datasets()
flights=data.flights_2k()
0

Cách lặp lại các hàng của Pandas Dataframe với itertuples()

Một cách tốt hơn để lặp lại/lặp qua các hàng của khung dữ liệu Pandas là sử dụng hàm itertuples() có sẵn trong Pandas. Như tên itertuples() gợi ý, itertuples lặp qua các hàng của khung dữ liệu và trả về một bộ dữ liệu được đặt tên
Phần tử đầu tiên của bộ dữ liệu là chỉ mục của hàng và các giá trị còn lại của bộ dữ liệu là dữ liệu trong hàng. Không giống như iterrows, dữ liệu hàng không được lưu trữ trong Sê-ri

Hãy để chúng tôi lặp qua nội dung của khung dữ liệu và in từng hàng bằng các lần lặp

 
# check to see the list of data sets
data.list_datasets()
flights=data.flights_2k()
1

Chúng ta có thể thấy rằng các itertuple chỉ trả về nội dung của hàng dưới dạng bộ có tên với các tên cột được liên kết. Do đó, chúng tôi có thể chỉ cần truy cập dữ liệu bằng tên cột và Chỉ mục, như

Cách nhanh nhất để lặp qua DataFrame của gấu trúc là gì?

Có nhiều cách để lặp qua các hàng của DataFrame hoặc Sê-ri trong gấu trúc, mỗi cách đều có ưu và nhược điểm riêng. .
Phương pháp đơn giản nhất để lặp qua các hàng là sử dụng phương thức iterrows(), như vậy
iterrows() trả về chỉ mục hàng cũng như chính hàng đó

Pandas Dataframes có thể lặp lại không?

cột của Pandas DataFrame có thể lặp lại nên chúng tôi có thể sử dụng zip để tạo một bộ cho mỗi hàng giống như itertuples , mà không cần .