Hướng dẫn dùng .iloc python
Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!! Show Truy cập và sử dụng Data trong DataFrameỞ phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào.
Trong ví dụ đầu tiên, bạn truy cập vào tên column như cách bạn truy cập một phần tử từ dictionary, bằng cách sử dụng label của nó làm khóa. Nếu column label là một mã định danh Python hợp lệ, thì bạn cũng có thể sử dụng ký hiệu dấu chấm để truy cập column. Trong ví dụ thứ hai, bạn sử dụng .loc[] để lấy row theo nhãn của nó. Lấy dữ liệu với AccessorsNgoài trình truy cập .loc[], bạn có thể sử dụng để lấy các rows hoặc columns theo nhãn của chúng với .iloc[], truy xuất một row hoặc column theo chỉ mục số nguyên của nó. Trong hầu hết các trường hợp, bạn có thể sử dụng một trong hai cách sau:
df.loc [6] trả về row có label 6. Tương tự, df.iloc[0] trả về row có index dựa trên index 0, là row đầu tiên. Như bạn có thể thấy, cả hai câu lệnh đều trả về cùng một row với một đối tượng Series. Pandas có tổng cộng bốn accessors:
Trong số này, .loc[] và .iloc[] đặc biệt mạnh mẽ. Chúng hỗ trợ cắt và lập chỉ mục kiểu NumPy. Bạn có thể sử dụng chúng để truy cập một cột:
df.loc[:, 'city'] trả về column city. Cấu trúc lát cắt ( : ) ở vị trí row label có nghĩa là tất cả các row phải được bao gồm. df.iloc[:, 1] trả về cùng một column vì chỉ mục 1 dựa trên 0 tham chiếu đến cột thứ hai, city. Cũng giống như bạn có thể làm với NumPy, bạn có thể cung cấp các lát cùng với danh sách hoặc mảng thay vì chỉ mục để có nhiều row hoặc column.
Trong ví dụ này, bạn sử dụng:
Cả hai câu lệnh đều trả về một Pandas DataFrame với giao điểm của bốn row và hai column mong muốn. Điều này dẫn đến sự khác biệt rất quan trọng giữa .loc[] và .iloc[]. Như bạn có thể thấy từ ví dụ trước, khi bạn chuyển row label 7:10 với .loc[], bạn nhận được các row label từ 7 đến 10. Tuy nhiên, khi bạn chuyển row index 1:4 với .iloc[], bạn chỉ lấy các row có index từ 1 đến 4. Lý do bạn chỉ nhận được các index từ 1 đến 4 là với .iloc[], stop index của một slice là độc quyền, có nghĩa là nó bị loại trừ khỏi các giá trị trả về. Điều này phù hợp với chuỗi Python và mảng NumPy. Tuy nhiên, với .loc[], cả index bắt đầu và stop index đều inclusive, có nghĩa là chúng được bao gồm với các giá trị trả về. Bạn có thể bỏ qua các row và column với .iloc[] giống như cách bạn có thể làm với các slicing tuples, lists và mảng NumPy:
Trong ví dụ này, bạn chỉ định các row index mong muốn với slice 1: 4: 2. Điều này có nghĩa là bạn bắt đầu với row có index 1 (row thứ hai), dừng lại trước row có index 6 (row thứ năm) và bỏ qua mọi row thứ hai. Thay vì sử dụng slicing construct, bạn cũng có thể sử dụng class slice() tích hợp sẵn trong Python(), cũng như numpy.s_[] hoặc pd.IndexSlice[]:
Bạn có thể thấy một trong những cách tiếp cận này thuận tiện hơn những cách khác tùy thuộc vào tình huống của bạn. Có thể sử dụng .loc[] và .iloc[] để nhận các giá trị dữ liệu cụ thể. Tuy nhiên, khi bạn chỉ cần một giá trị duy nhất, Pandas khuyên bạn nên sử dụng các trình truy cập chuyên biệt .at[] và .iat[]:
Ở đây, bạn đã sử dụng .at[] để lấy tên của một ứng cử viên bằng cách sử dụng các row và column label tương ứng của nó. Bạn cũng đã sử dụng .iat[] để truy xuất cùng một tên bằng cách sử dụng các row và column index của nó. Thiết lập dữ liệu với AccessorsBạn có thể sử dụng accessors để sửa đổi các phần của Pandas DataFrame bằng cách chuyển một chuỗi Python, mảng NumPy hoặc một giá trị:
Câu lệnh df.loc[:8, 'py-score'] = [40, 50, 60] sửa đổi ba mục đầu tiên (row 6 đến 8) trong cột py-score bằng cách sử dụng các giá trị từ danh sách được cung cấp của bạn. Sử dụng df.loc[9:, 'py-score'] = 0 đặt các giá trị còn lại trong column này thành 0. Ví dụ sau cho thấy rằng bạn có thể sử dụng các negative index với .iloc[] để truy cập hoặc sửa đổi dữ liệu:
Trong ví dụ này, bạn đã truy cập và sửa đổi column cuối cùng ('py-score'), tương ứng với số nguyên column index -1. Hành vi này phù hợp với chuỗi Python và mảng NumPy. Mình xin kết thúc Phần 3 ở đây nhé, hẹn gặp lại các bạn ở phần 4. |