Đô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 pdHã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 ELPCá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: objectChú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: objectVì 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 SMFBở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.5Hã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() 0Cá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() 1Chú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ư