Có hai cách chính mà gấu trúc đưa ra các lựa chọn từ DataFrame.
- Theo nhãn
- Theo vị trí số nguyên
Tài liệu sử dụng vị trí thuật ngữ để chỉ vị trí số nguyên . Tôi không thích thuật ngữ này vì tôi cảm thấy nó khó hiểu. Vị trí số nguyên là mô tả nhiều hơn và chính xác là những gì .iloc
đại diện cho. Từ khóa ở đây là INTEGER - bạn phải sử dụng số nguyên khi chọn theo vị trí số nguyên.
Trước khi hiển thị tóm tắt, tất cả hãy chắc chắn rằng ...
.ix không dùng nữa và không rõ ràng và không bao giờ được sử dụng
Có ba người lập chỉ mục chính cho gấu trúc. Chúng ta có chính toán tử lập chỉ mục (dấu ngoặc []
) .loc
và .iloc
. Hãy tóm tắt chúng:
[]
- Chủ yếu chọn các tập hợp con của các cột, nhưng cũng có thể chọn các hàng. Không thể đồng thời chọn hàng và cột.
.loc
- chỉ chọn các tập hợp con của hàng và cột theo nhãn
.iloc
- chỉ chọn các tập hợp con của các hàng và cột theo vị trí số nguyên
Tôi gần như không bao giờ sử dụng .at
hoặc .iat
vì họ không thêm chức năng bổ sung và chỉ tăng hiệu suất nhỏ. Tôi sẽ không khuyến khích việc sử dụng chúng trừ khi bạn có một ứng dụng rất nhạy cảm với thời gian. Bất kể, chúng tôi có tóm tắt của họ:
.at
chỉ chọn một giá trị vô hướng trong DataFrame theo nhãn
.iat
chỉ chọn một giá trị vô hướng trong DataFrame theo vị trí số nguyên
Ngoài lựa chọn theo nhãn và vị trí số nguyên, lựa chọn boolean còn được gọi là lập chỉ mục boolean tồn tại.
Các ví dụ giải thích .loc
, .iloc
lựa chọn boolean .at
và .iat
được hiển thị bên dưới
Trước tiên chúng tôi sẽ tập trung vào sự khác biệt giữa .loc
và .iloc
. Trước khi chúng ta nói về sự khác biệt, điều quan trọng là phải hiểu rằng DataFrames có nhãn giúp xác định từng cột và từng hàng. Chúng ta hãy xem một DataFrame mẫu:
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])
Tất cả các từ in đậm là nhãn. Các nhãn, age
, color
, food
, height
, score
và state
được sử dụng cho các cột . Các nhãn khác, Jane
, Nick
, Aaron
, Penelope
, Dean
, Christina
, Cornelia
được sử dụng như nhãn cho các hàng. Chung, các nhãn hàng này được gọi là chỉ mục .
Các cách chính để chọn các hàng cụ thể trong DataFrame là với .loc
và .iloc
bộ chỉ mục. Mỗi trong số các bộ chỉ mục này cũng có thể được sử dụng để chọn đồng thời các cột nhưng bây giờ việc tập trung vào các hàng sẽ dễ dàng hơn. Ngoài ra, mỗi người lập chỉ mục sử dụng một bộ dấu ngoặc ngay lập tức theo tên của họ để đưa ra lựa chọn của họ.
.loc chỉ chọn dữ liệu theo nhãn
Trước tiên chúng ta sẽ nói về bộ .loc
chỉ mục chỉ chọn dữ liệu theo nhãn chỉ mục hoặc cột. Trong DataFrame mẫu của chúng tôi, chúng tôi đã cung cấp các tên có ý nghĩa làm giá trị cho chỉ mục. Nhiều DataFrames sẽ không có bất kỳ tên có ý nghĩa nào và thay vào đó, mặc định chỉ là các số nguyên từ 0 đến n-1, trong đó n là độ dài (số hàng) của DataFrame.
Có nhiều đầu vào khác nhau mà bạn có thể sử dụng cho .loc
ba trong số đó là
- Một chuỗi
- Một danh sách các chuỗi
- Ký hiệu lát cắt sử dụng chuỗi làm giá trị bắt đầu và dừng
Chọn một hàng đơn với .loc bằng một chuỗi
Để chọn một hàng dữ liệu, đặt nhãn chỉ mục bên trong dấu ngoặc theo sau .loc
.
df.loc['Penelope']
Điều này trả về hàng dữ liệu dưới dạng Sê-ri
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
Chọn nhiều hàng với .loc với danh sách các chuỗi
df.loc[['Cornelia', 'Jane', 'Dean']]
Điều này trả về một DataFrame với các hàng theo thứ tự được chỉ định trong danh sách:
Chọn nhiều hàng với .loc với ký hiệu lát
Ký hiệu lát được xác định bởi các giá trị bắt đầu, dừng và bước. Khi cắt theo nhãn, gấu trúc bao gồm giá trị dừng trong lợi nhuận. Các lát sau đây từ Aaron đến Dean, bao gồm. Kích thước bước của nó không được xác định rõ ràng nhưng được mặc định là 1.
df.loc['Aaron':'Dean']
Các lát phức tạp có thể được thực hiện theo cách tương tự như danh sách Python.
.iloc chỉ chọn dữ liệu theo vị trí số nguyên
Bây giờ chúng ta hãy chuyển sang .iloc
. Mỗi hàng và cột dữ liệu trong DataFrame có một vị trí số nguyên xác định nó. Đây là ngoài nhãn được hiển thị trực quan ở đầu ra. Vị trí số nguyên chỉ đơn giản là số lượng hàng / cột từ đầu / bên trái bắt đầu từ 0.
Có nhiều đầu vào khác nhau mà bạn có thể sử dụng cho .iloc
ba trong số đó là
- Một số nguyên
- Danh sách các số nguyên
- Ký hiệu lát cắt sử dụng số nguyên làm giá trị bắt đầu và dừng
Chọn một hàng đơn với .iloc có số nguyên
df.iloc[4]
Điều này trả về hàng thứ 5 (vị trí số nguyên 4) dưới dạng Sê-ri
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
Chọn nhiều hàng với .iloc với danh sách các số nguyên
df.iloc[[2, -2]]
Điều này trả về một DataFrame của hàng thứ ba và thứ hai đến hàng cuối cùng:
Chọn nhiều hàng với .iloc với ký hiệu lát
df.iloc[:5:3]
Lựa chọn đồng thời các hàng và cột với .loc và .iloc
Một khả năng tuyệt vời của cả hai .loc/.iloc
là khả năng chọn đồng thời cả hai hàng và cột. Trong các ví dụ trên, tất cả các cột được trả về từ mỗi lựa chọn. Chúng ta có thể chọn các cột có cùng loại đầu vào như chúng ta làm cho các hàng. Chúng ta chỉ cần phân tách lựa chọn hàng và cột bằng dấu phẩy .
Ví dụ: chúng ta có thể chọn các hàng Jane và Dean chỉ với chiều cao, điểm số và trạng thái như thế này:
df.loc[['Jane', 'Dean'], 'height':]
Điều này sử dụng một danh sách các nhãn cho các hàng và ký hiệu lát cho các cột
Chúng ta có thể tự nhiên thực hiện các hoạt động tương tự với .iloc
chỉ sử dụng số nguyên.
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
Lựa chọn đồng thời với nhãn và vị trí số nguyên
.ix
đã được sử dụng để thực hiện các lựa chọn đồng thời với nhãn và vị trí số nguyên rất hữu ích nhưng đôi khi khó hiểu và mơ hồ và rất may nó đã bị phản đối. Trong trường hợp bạn cần thực hiện lựa chọn với hỗn hợp nhãn và vị trí số nguyên, bạn sẽ phải tạo cả nhãn lựa chọn hoặc vị trí số nguyên.
Chẳng hạn, nếu chúng ta muốn chọn các hàng Nick
và Cornelia
cùng với cột 2 và 4, chúng ta có thể sử dụng .loc
bằng cách chuyển đổi các số nguyên thành nhãn với các mục sau:
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
Hoặc cách khác, chuyển đổi nhãn chỉ mục thành số nguyên với get_loc
phương thức chỉ mục.
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
Lựa chọn Boolean
Bộ chỉ mục .loc cũng có thể thực hiện lựa chọn boolean. Chẳng hạn, nếu chúng ta quan tâm đến việc tìm tất cả các hàng có độ tuổi trên 30 và chỉ trả về các cột food
và score
chúng ta có thể làm như sau:
df.loc[df['age'] > 30, ['food', 'score']]
Bạn có thể sao chép này với .iloc
nhưng bạn không thể vượt qua nó một loạt boolean. Bạn phải chuyển đổi Boolean Series thành một mảng numpy như thế này:
df.iloc[(df['age'] > 30).values, [2, 4]]
Chọn tất cả các hàng
Có thể sử dụng .loc/.iloc
cho chỉ chọn cột. Bạn có thể chọn tất cả các hàng bằng cách sử dụng dấu hai chấm như thế này:
df.loc[:, 'color':'score':2]
Toán tử lập chỉ mục []
, có thể cắt cũng có thể chọn các hàng và cột nhưng không đồng thời.
Hầu hết mọi người đều quen thuộc với mục đích chính của toán tử lập chỉ mục DataFrame, đó là chọn các cột. Một chuỗi chọn một cột làm Sê-ri và một danh sách các chuỗi chọn nhiều cột làm DataFrame.
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
Sử dụng một danh sách chọn nhiều cột
df[['food', 'score']]
Điều mọi người ít quen thuộc là, khi ký hiệu lát được sử dụng, thì lựa chọn xảy ra theo nhãn hàng hoặc theo vị trí số nguyên. Điều này rất khó hiểu và một cái gì đó mà tôi gần như không bao giờ sử dụng nhưng nó hoạt động.
df['Penelope':'Christina'] # slice rows by label
df[2:6:2] # slice rows by integer location
Các nhân chứng .loc/.iloc
cho việc chọn hàng rất được ưa thích. Toán tử lập chỉ mục không thể chọn các hàng và cột đồng thời.
df[3:5, 'color']
TypeError: unhashable type: 'slice'
Lựa chọn bởi .at
và.iat
Lựa chọn .at
gần giống với .loc
nhưng nó chỉ chọn một 'ô' duy nhất trong Khung dữ liệu của bạn. Chúng ta thường gọi ô này là giá trị vô hướng. Để sử dụng .at
, hãy chuyển nó cả nhãn hàng và cột được phân tách bằng dấu phẩy.
df.at['Christina', 'color']
'black'
Lựa chọn .iat
gần giống với .iloc
nhưng nó chỉ chọn một giá trị vô hướng duy nhất. Bạn phải truyền cho nó một số nguyên cho cả vị trí hàng và cột
df.iat[2, 5]
'FL'