Trong các tình huống sau, chúng cư xử giống nhau:
- Chọn một cột duy nhất (
df['A']
giống như df.loc[:, 'A']
-> chọn cột A)
- Chọn danh sách cột (
df[['A', 'B', 'C']]
giống như df.loc[:, ['A', 'B', 'C']]
-> chọn cột A, B và C)
- Cắt theo hàng (
df[1:3]
giống như df.iloc[1:3]
-> chọn hàng 1 và 2. Tuy nhiên, lưu ý, nếu bạn cắt các hàng loc
thay vì cắt iloc
, bạn sẽ nhận được hàng 1, 2 và 3 giả sử bạn có RangeIndex . Xem chi tiết tại đây .)
Tuy nhiên, []
không hoạt động trong các trường hợp sau:
- Bạn có thể chọn một hàng với
df.loc[row_label]
- Bạn có thể chọn danh sách các hàng có
df.loc[[row_label1, row_label2]]
- Bạn có thể cắt các cột với
df.loc[:, 'A':'C']
Ba điều này không thể được thực hiện với []
. Quan trọng hơn, nếu lựa chọn của bạn liên quan đến cả hàng và cột, thì việc gán sẽ trở nên khó khăn.
df[1:3]['A'] = 5
Thao tác này chọn hàng 1 và 2, sau đó chọn cột 'A' của đối tượng trả về và gán giá trị 5 cho nó. Vấn đề là, đối tượng trả về có thể là một bản sao nên điều này có thể không thay đổi DataFrame thực. Điều này làm tăng SettingWithCopyWarning . Cách chính xác của nhiệm vụ này là
df.loc[1:3, 'A'] = 5
Với .loc
, bạn được đảm bảo sửa đổi DataFrame ban đầu. Nó cũng cho phép bạn cắt các cột ( df.loc[:, 'C':'F']
), chọn một hàng ( df.loc[5]
) và chọn danh sách các hàng ( df.loc[[1, 2, 5]]
).
Cũng lưu ý rằng hai điều này không được đưa vào API cùng một lúc. .loc
đã được thêm vào sau đó như một trình chỉ mục rõ ràng và mạnh mẽ hơn. Xem câu trả lời của unutbu để biết thêm chi tiết.
Lưu ý: Bắt cột với []
vs .
là một chủ đề hoàn toàn khác. .
chỉ có ở đó cho sự tiện lợi. Nó chỉ cho phép truy cập các cột có tên là mã định danh Python hợp lệ (nghĩa là chúng không thể chứa khoảng trắng, chúng không thể bao gồm các số ...). Nó không thể được sử dụng khi tên xung đột với các phương thức Series / DataFrame. Nó cũng không thể được sử dụng cho các cột không tồn tại (nghĩa là phép gán df.a = 1
sẽ không hoạt động nếu không có cột a
). Khác hơn thế, .
và []
đều giống nhau.
df.col1
? Cả ba điều này về cơ bản là tương đương đối với trường hợp chọn một cột rất đơn giản..loc
sẽ cho phép bạn làm nhiều việc hơn là chọn một cột. Có thể có bản sao của stackoverflow.com/questions/31593201/…