Chuyển đến nội dung chính

Iloc vs Loc trong Pandas: Hướng dẫn kèm ví dụ

.loc chọn dữ liệu theo tên hàng và cột (nhãn), còn .iloc dùng chỉ số số học (vị trí). Học cách dùng cả hai kèm ví dụ.
Đã cập nhật 5 thg 6, 2026  · 8 phút đọc

Một trong những điều gây bối rối khi chúng ta học Pandas là phân biệt giữa .loc.iloc.

Hãy chấm dứt sự nhầm lẫn này và làm rõ khác biệt giữa hai phương thức. Tôi sẽ đưa ra nhiều ví dụ, và hy vọng đến cuối bài, sự khác nhau sẽ trở nên rõ ràng hơn.

.loc và .iloc trong Pandas là gì?

Cả .loc.iloc đều là các thuộc tính quan trọng của DataFrame trong Pandas, được dùng để chọn các tập con dữ liệu cụ thể. Mục đích của chúng là truy cập và cho phép thao tác trên một phần cụ thể của DataFrame thay vì toàn bộ DataFrame. 

Tính năng

.loc

.iloc

Cú pháp

df.loc[row_indexer, column_indexer]

df.iloc[row_indexer, column_indexer]

Phương pháp lập chỉ mục

Lập chỉ mục theo nhãn

Lập chỉ mục theo vị trí

Tham chiếu dựa trên

Nhãn (tên) hàng và cột

Chỉ số số học của hàng và cột (bắt đầu từ 0)

Như chúng ta thấy từ bảng trên, cú pháp trông rất giống nhau. Khác biệt nằm ở cách dùng đối số row_indexercolumn_indexer. Lý do là hai phương thức cung cấp cách tiếp cận khác nhau để lập chỉ mục dữ liệu: .loc lập chỉ mục theo tên nhãn, còn .iloc nhận vị trí số học của hàng và cột làm đối số.

Hãy xem chi tiết từng phương thức, bắt đầu với .loc.

Sử dụng .loc: Chọn theo nhãn

Để minh họa, giả sử có một cơ sở dữ liệu khách hàng được biểu diễn bằng DataFrame tên df, với Customer ID làm chỉ mục hàng:

Customer ID

Name

Country

Region

Age

C123

John Doe

United States

North America

67

C234

Petra Müller

Germany

Europe

51

C345

Ali Khan

Pakistan

Asia

19

C456

Maria Gonzalez

Mexico

North America

26

C567

David Lee

China

Asia

40

bốn cách chính để chọn hàng bằng .loc, bao gồm:

  • Chọn một hàng
  • Chọn nhiều hàng
  • Chọn một lát (slice) hàng
  • Chọn hàng có điều kiện

Chọn một hàng bằng .loc

Để chọn một hàng, dùng nhãn của hàng cần lấy làm row_indexer. Cú pháp tương ứng là: df.loc['row_label']. Hãy dùng cách này để hiển thị toàn bộ thông tin về khách hàng Ali Khan của chúng ta:

df.loc['C345']

C345

 

Name

Ali Khan

Country

Pakistan

Region

Asia

Age

19

Chọn nhiều hàng bằng .loc

Nếu muốn chọn nhiều hàng không nhất thiết liền kề nhau, hãy truyền danh sách các nhãn hàng làm đối số row_indexer. Điều này có nghĩa là cần dùng hai cặp ngoặc vuông: một cho cú pháp .loc thông thường và một cho danh sách nhãn.

Dòng df.loc[['row_label_1', 'row_label_2']] sẽ trả về hai hàng của DataFrame df được chỉ định trong danh sách. Giả sử ta muốn biết thông tin không chỉ của Ali Khan mà còn của David Lee:

df.loc[['C345', 'C567']]

Customer ID

Name

Country

Region

Age

C345

Ali Khan

Pakistan

Asia

19

C567

David Lee

China

Asia

40

Chọn một lát hàng bằng .loc

Ta có thể chọn một dải hàng bằng cách truyền nhãn hàng đầu và cuối, ngăn cách bởi dấu hai chấm: df.loc['row_label_start':'row_label_end']. Ta có thể hiển thị bốn hàng đầu của DataFrame như sau:

df.loc['C123' : 'C456']

Customer ID

Name

Country

Region

Signup Date

C123

John Doe

United States

North America

67

C234

Petra Müller

Germany

Europe

51

C345

Ali Khan

Pakistan

Asia

19

C456

Maria Gonzalez

Mexico

North America

26

Có hai điểm cần lưu ý:

  1. Kết quả bao gồm cả hàng được chỉ định trong row_label_end. Điều này khác với .iloc, chúng ta sẽ đề cập sau.
  2. Chỉ dùng một cặp ngoặc vuông, dù muốn lấy nhiều hàng. Không dùng danh sách để chỉ định các hàng, vì dùng hai cặp ngoặc vuông sẽ trả về SyntaxError.

Chọn hàng có điều kiện bằng .loc

Ta cũng có thể trả về các hàng dựa trên biểu thức điều kiện. Có thể lọc tất cả hàng theo việc chúng có thỏa điều kiện nào đó hay không và chỉ hiển thị những hàng thỏa mãn.

Cú pháp tương ứng là df.loc[conditional_expression], trong đó conditional_expression là một mệnh đề về các giá trị được phép trong một cột cụ thể.

Với các cột dữ liệu phi số (như Name hoặc Country), mệnh đề chỉ có thể dùng toán tử bằng hoặc khác, vì không có thứ tự giữa các giá trị. Ví dụ, ta có thể trả về tất cả các hàng của khách hàng không đến từ châu Á:

df.loc[df['Region'] != 'Asia']

Customer ID

Name

Country

Region

Age

C123

John Doe

United States

North America

67

C234

Petra Müller

Germany

Europe

51

C456

Maria Gonzalez

Mexico

North America

26

Chọn một cột bằng .loc

Để chọn cột, cần chỉ định đối số column_indexer, đứng sau đối số row_indexer. Nếu chỉ muốn chỉ định column_indexer, ta cần đánh dấu rằng muốn trả về tất cả hàng và chỉ lọc theo cột. Hãy xem cách làm!

Chọn một cột có thể thực hiện bằng cách chỉ định column_indexer với nhãn của cột tương ứng. Để lấy tất cả các hàng, ta chỉ định row_indexer là một dấu hai chấm. Cú pháp như sau: df.loc[:, 'column_name'].

Hãy hiển thị Name của mỗi khách hàng:

df.loc[:, 'Name']

Customer ID

Name

C123

John Doe

C234

Petra Müller

C345

Ali Khan

C456

Maria Gonzalez

C567

David Lee

Chọn nhiều cột bằng .loc

Tương tự khi chọn nhiều hàng, ta cần truyền một danh sách nhãn cột nếu muốn trả về nhiều cột của DataFrame không nhất thiết liền kề: df.loc[:, [col_label_1, 'col_label_2']].

Giả sử ta muốn bổ sung Age của tất cả khách hàng vào kết quả trước, có thể làm như sau:

df.loc[:, ['Name', 'Age']]

Customer ID

Name

Age

C123

John Doe

67

C234

Petra Müller

51

C345

Ali Khan

19

C456

Maria Gonzalez

26

C567

David Lee

40

Chọn một lát cột bằng .loc

Dùng dấu hai chấm giữa nhãn của hai cột sẽ chọn tất cả các cột trong khoảng theo thứ tự giữa hai cột được chỉ định. Nó bao gồm cả cột cuối, nghĩa là cột tên col_end cũng sẽ được chọn theo cú pháp chuẩn: df.loc[:, 'col_start':'col_end'].

Nếu chúng ta quan tâm đến Name, CountryRegion của khách hàng, dòng code có thể là:

df.loc[:, 'Name':'Region']

Customer ID

Name

Country

Region

C123

John Doe

United States

North America

C234

Petra Müller

Germany

Europe

C345

Ali Khan

Pakistan

Asia

C456

Maria Gonzalez

Mexico

North America

C567

David Lee

China

Asia

Kết hợp chọn hàng và cột bằng .loc

Ta cũng có thể chỉ định cả row_indexercolumn_indexer. Điều này có thể dùng để truy xuất một mẩu thông tin đơn lẻ, tức một ô trong DataFrame. Để làm vậy, chỉ định một hàng và một cột theo cú pháp df.loc['row_label', 'column_name'] .

Trường hợp hữu ích hơn là trả về một sub-DataFrame tập trung đúng vào tập hàng và cột quan tâm. Có thể chỉ định cả hai indexer dưới dạng danh sách bằng ngoặc vuông, hoặc dưới dạng lát bằng dấu hai chấm, và thậm chí kết hợp với biểu thức điều kiện cho việc chọn hàng.

Dưới đây là ví dụ trả về Name, CountryRegion của mỗi khách hàng có Age trên 30:

df.loc[df['Age'] > 30, 'Name':'Region']

Customer ID

Name

Country

Region

C123

John Doe

United States

North America

C234

Petra Müller

Germany

Europe

C567

David Lee

China

Asia

Sử dụng .iloc: Chọn theo vị trí số nguyên

.iloc chọn theo vị trí thay vì nhãn. Cú pháp chuẩn của .iloc là: df.iloc[row_indexer, column_indexer]. Có hai điểm đặc biệt cần lưu ý:

  • Đếm bắt đầu từ 0: Hàng và cột đầu tiên có chỉ số 0, cái thứ hai là 1, v.v.
  • Giới hạn cuối phạm vi là loại trừ: Khi dùng lát (slice), hàng hoặc cột đứng sau dấu hai chấm không được bao gồm trong lựa chọn.

Chọn một hàng bằng .iloc

Có thể chọn một hàng bằng cách dùng số nguyên đại diện cho chỉ số hàng làm row_indexer. Không cần dấu nháy vì ta nhập số nguyên chứ không phải chuỗi nhãn như với .loc. Để trả về hàng đầu tiên của DataFrame tên df, nhập df.iloc[0].

Trong DataFrame ví dụ, chính dòng này trả về thông tin của John Doe:

df.iloc[0]

C123

 

Name

John Doe

Country

United States

Region

North America

Age

67

Chọn nhiều hàng bằng .iloc

Chọn nhiều hàng với .iloc hoạt động giống như trong .loc—ta nhập các chỉ số hàng trong một danh sách với ngoặc vuông. Cú pháp như sau: df.iloc[[0, 3, 4]].

Kết quả tương ứng trong bảng khách hàng như dưới đây:

df.iloc[[0, 3, 4]]

Customer ID

Name

Country

Region

Age

C123

John Doe

United States

North America

67

C456

Maria Gonzalez

Mexico

North America

26

C567

David Lee

China

Asia

40

Chọn một lát hàng bằng .iloc

Để chọn một lát hàng, dùng dấu hai chấm giữa hai số nguyên chỉ số hàng. Lúc này, cần chú ý tính loại trừ của giới hạn cuối đã đề cập ở trên. 

Ta có thể lấy dòng df.iloc[1:4] làm ví dụ. Chỉ số 1 nghĩa là hàng thứ hai, nên lát bắt đầu từ đó. Số nguyên 4 đại diện cho hàng thứ năm – nhưng vì .iloc không bao gồm giới hạn cuối khi chọn lát, kết quả sẽ bao gồm tất cả hàng cho đến hàng ngay trước số này. Do đó, nó trả về hàng thứ hai, ba và bốn. 

Hãy kiểm chứng rằng dòng lệnh hoạt động đúng như vậy:

df.iloc[1:4]

Customer ID

Name

Country

Region

Age

C234

Petra Müller

Germany

Europe

51

C345

Ali Khan

Pakistan

Asia

19

C456

Maria Gonzalez

Mexico

North America

26

Chọn một cột bằng .iloc

Logic chọn cột bằng .iloc theo những gì ta đã học. Hãy xem cách hoạt động cho một cột, nhiều cột và lát cột.

Cũng như với .loc, cần chỉ định row_indexer trước khi đến column_indexer. Để lấy giá trị của cột thứ ba của df cho mọi hàng, nhập df.iloc[:, 2] .

Region là cột thứ ba trong DataFrame, nên nó sẽ được lấy ra theo dòng lệnh đó:

df.iloc[:, 2]

Customer ID

Region

C123

North America

C234

Europe

C345

Asia

C456

North America

C567

Asia

Chọn nhiều cột bằng .iloc

Để chọn nhiều cột không nhất thiết liền kề, ta lại nhập một danh sách các số nguyên làm column_indexer. Dòng df.iloc[:, [0, 3]] trả về cột thứ nhất và thứ tư. 

Trong trường hợp của chúng ta, thông tin hiển thị là Name cũng như Age của mỗi khách hàng:

df.iloc[:, [0, 3]]

Customer ID

Name

Age

C123

John Doe

67

C234

Petra Müller

51

C345

Ali Khan

19

C456

Maria Gonzalez

26

C567

David Lee

40

Chọn một lát cột bằng .iloc

Với việc chọn lát bằng .iloc, logic của column_indexer giống với row_indexer. Cột được biểu diễn bởi số nguyên sau dấu hai chấm không được bao gồm trong kết quả. Để lấy cột thứ hai và thứ ba, dòng lệnh nên như sau: df.iloc[:, 1:3].

Dòng dưới đây trả về toàn bộ thông tin địa lý chúng ta có về khách hàng:

df.iloc[:, 1:3]

Customer ID

Country

Region

C123

United States

North America

C234

Germany

Europe

C345

Pakistan

Asia

C456

Mexico

North America

C567

China

Asia

Kết hợp chọn hàng và cột bằng .iloc

Ta có thể tổng hợp những gì đã học về .iloc để kết hợp chọn hàng và cột. Tương tự, có thể trả về một ô đơn lẻ hoặc một sub-DataFrame. Để trả về ô tại giao điểm của hàng 3 và cột 4, nhập df.iloc[2, 3].

Cũng như với .loc, ta có thể chỉ định cả hai indexer dưới dạng danh sách bằng ngoặc vuông, hoặc dưới dạng lát bằng dấu hai chấm. Nếu muốn chọn hàng bằng biểu thức điều kiện, về mặt kỹ thuật điều đó cũng có thể với .iloc, nhưng không được khuyến nghị. Dùng tên nhãn và .loc thường trực quan hơn nhiều và ít lỗi hơn.

Ví dụ cuối cùng này hiển thị Country, RegionAge cho hàng thứ nhất, thứ hai và thứ năm trong DataFrame:

df.iloc[[0,1,4], 1:4]

Customer ID

Country

Region

Age

C123

United States

North America

67

C234

Germany

Europe

51

C567

China

Asia

40

.iloc vs .loc: Khi nào dùng cái nào

Nói chung, có một quy tắc ngón tay cái đơn giản mà lựa chọn phương thức phụ thuộc vào hiểu biết của bạn về DataFrame:

  • Dùng .loc khi bạn biết nhãn (tên) của hàng/cột.
  • Dùng .iloc khi bạn biết vị trí số nguyên của hàng/cột.

Một số tình huống theo bản chất sẽ thiên về .loc hoặc .iloc. Ví dụ, lặp qua các hàng hoặc cột sẽ dễ và trực quan hơn khi dùng số nguyên thay vì nhãn. Như đã đề cập, lọc hàng dựa trên điều kiện trên giá trị cột sẽ ít lỗi hơn khi dùng tên nhãn cột.

Tình huống ưu tiên .loc

Tình huống ưu tiên .iloc

DataFrame của bạn có tên chỉ mục/cột có ý nghĩa.

Bạn đang lặp theo vị trí của hàng/cột.

Bạn cần lọc dựa trên điều kiện ở giá trị cột.

Tên chỉ mục/cột không liên quan đến tác vụ của bạn.

KeyError, NameError và IndexError với .loc và .iloc

Hãy xem các vấn đề có thể gặp. Một lỗi thường gặp khi dùng .locKeyError. Lỗi này xảy ra khi ta cố truy cập một nhãn hàng hoặc cột không tồn tại trong DataFrame. Để tránh, hãy luôn đảm bảo các nhãn bạn dùng là chính xác, khớp với nhãn hiện có trong DataFrame và kiểm tra lại lỗi chính tả.

Ngoài ra, cần luôn dùng dấu nháy cho các nhãn khi dùng .loc. Quên dấu nháy sẽ trả về NameError.

Một IndexError có thể xảy ra khi dùng .iloc nếu ta chỉ định vị trí số nguyên nằm ngoài phạm vi hợp lệ của chỉ mục DataFrame. Điều này xảy ra khi chỉ số bạn cố truy cập không tồn tại, có thể do vượt quá số hàng hoặc cột, hoặc do là giá trị âm. Để ngăn lỗi này, hãy kiểm tra kích thước DataFrame và dùng các giá trị chỉ số trong phạm vi hợp lệ.

Kết luận

Hy vọng bài viết này hữu ích và giờ đây bạn đã phân biệt rõ .loc.iloc. Để tìm hiểu thêm, đây là vài bước tiếp theo phù hợp:


Tom Farnschläder's photo
Author
Tom Farnschläder
LinkedIn

Tom là một nhà khoa học dữ liệu và giảng viên kỹ thuật. Anh viết và quản lý các bài hướng dẫn và bài blog về khoa học dữ liệu của DataCamp. Trước đây, Tom làm việc trong lĩnh vực khoa học dữ liệu tại Deutsche Telekom.

Chủ đề

Học Pandas với những khóa học này!

Courses

Viết mã hiệu quả với pandas

4 giờ
21.7K
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow