Hướng dẫn sẽ giải thích cú pháp và cũng chỉ cho bạn các ví dụ từng bước về cách sử dụng phương pháp truy vấn Pandas
Nếu bạn cần một cái gì đó cụ thể [như trợ giúp về cú pháp, ví dụ, v.v.], bạn có thể nhấp vào một trong các liên kết sau và nó sẽ đưa bạn đến phần thích hợp
nội dung
Nhưng nếu bạn chưa quen với Pandas hoặc chưa quen với thao tác dữ liệu trong Python, tôi khuyên bạn nên đọc toàn bộ hướng dẫn. Mọi thứ sẽ có ý nghĩa hơn theo cách đó
Vâng …. Chúng ta hãy đi đến đó
Đánh giá nhanh về Pandas
Rất nhanh, hãy xem lại Pandas là gì
Pandas là một gói cho ngôn ngữ lập trình Python
Cụ thể, Pandas là bộ công cụ để thực hiện thao tác dữ liệu trong Python. Nó là một bộ công cụ quan trọng để thực hiện khoa học dữ liệu trong Python
Pandas hoạt động với DataFrames
Để cụ thể hơn một chút, Pandas là bộ công cụ để tạo và làm việc với cấu trúc dữ liệu được gọi là DataFrame
DataFrame là một cấu trúc mà chúng tôi sử dụng để lưu trữ dữ liệu
DataFrames có cấu trúc hàng và cột, như thế này
Nếu bạn đã làm việc với Microsoft Excel, bạn sẽ quen thuộc với cấu trúc này. Khung dữ liệu Pandas rất giống với bảng tính Excel, trong đó Khung dữ liệu có hàng, cột và ô
Có một số cách để tạo DataFrame, bao gồm nhập dữ liệu từ tệp bên ngoài [chẳng hạn như tệp CSV]; . Hàm DataFrame[]
Để biết thêm thông tin về DataFrames, hãy xem hướng dẫn của chúng tôi về Pandas DataFrames
Các phương thức Pandas thực hiện các thao tác trên DataFrames
Khi bạn có dữ liệu của mình bên trong khung dữ liệu, thông thường bạn sẽ cần thực hiện thao tác dữ liệu
Nếu dữ liệu của bạn hơi “bẩn”, bạn có thể cần sử dụng một số công cụ để dọn dẹp dữ liệu. sửa đổi các giá trị bị thiếu, thay đổi tên chuỗi, đổi tên biến, thêm biến, v.v.
Ngoài ra, khi dữ liệu của bạn ở trong cấu trúc DataFrame và dữ liệu “sạch”, bạn vẫn cần sử dụng một số kỹ thuật “thao tác dữ liệu” để phân tích dữ liệu của mình. Ở đây, tôi đang nói về những thứ như tập hợp con, nhóm và tổng hợp
Pandas có các công cụ để thực hiện tất cả các tác vụ này. Nó là một bộ công cụ toàn diện để làm việc với dữ liệu và thực hiện thao tác dữ liệu trên DataFrames
Giới thiệu nhanh về truy vấn Pandas
Trong số nhiều công cụ để thực hiện thao tác dữ liệu trên DataFrames là phương thức truy vấn Pandas
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008 là gì và nó làm gì?
Truy vấn là một công cụ để truy vấn các khung dữ liệu và truy xuất các tập hợp con
Ở cấp độ rất cao, phương thức truy vấn Pandas là một công cụ để tạo các tập hợp con từ Khung dữ liệu Pandas
Dù tốt hay xấu, thực tế có một số cách để tạo tập hợp con với Pandas
Các phương thức loc và iloc cho phép bạn truy xuất các tập hợp con dựa trên nhãn hàng và cột hoặc theo chỉ số nguyên của hàng và cột
Và Pandas có ký hiệu ngoặc cho phép bạn sử dụng các điều kiện logic để truy xuất các hàng dữ liệu cụ thể
Nhưng cả hai công cụ đó có thể hơi rườm rà về mặt cú pháp. Hơn nữa, chúng khó sử dụng cùng với các phương pháp thao tác dữ liệu khác một cách trơn tru, hữu cơ
Theo nhiều cách, phương pháp Pandas
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450009 giải quyết những vấn đề đó
Truy vấn cho phép bạn "truy vấn" một DataFrame và truy xuất các tập hợp con dựa trên các điều kiện logic
Hơn nữa, cú pháp được sắp xếp hợp lý hơn một chút so với ký hiệu dấu ngoặc Pandas
Ngoài ra, phương thức truy vấn Pandas có thể được sử dụng với các phương thức Pandas khác theo cách hợp lý giúp thao tác dữ liệu trơn tru và đơn giản. Tôi sẽ chỉ cho bạn một ví dụ nhỏ về điều đó sau trong phần hướng dẫn
Nhưng trước khi đến đó, trước tiên chúng ta hãy xem cú pháp của truy vấn Pandas
Cú pháp của phương thức truy vấn Pandas
Cú pháp của truy vấn Pandas chủ yếu là đơn giản
Tuy nhiên, để sử dụng phương pháp này, bạn sẽ cần phải có Pandas DataFrame
Điều đó có nghĩa là bạn sẽ cần nhập Pandas và sử dụng Pandas để tạo DataFrame
Để biết thêm thông tin về cách tạo DataFrames, bạn có thể đọc hướng dẫn giới thiệu của chúng tôi về Pandas DataFrames
Cú pháp truy vấn gấu trúc
Vâng
Giả sử bạn có một DataFrame, bạn cần gọi
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008 bằng “cú pháp dấu chấm”
Về cơ bản, hãy nhập tên của DataFrame mà bạn muốn tập hợp con, sau đó nhập “dấu chấm”, sau đó nhập tên của phương thức….
sales_data.query['sales > 60000']1
Như thế này
Trong phần giải thích cú pháp ở trên, tôi giả sử rằng bạn có một DataFrame tên là
sales_data.query['sales > 60000']2
Sau đó, bên trong phương thức truy vấn, có một vài tham số và đối số cho hàm
Hãy đi qua những
Các tham số của truy vấn pandas
Bên trong hàm, thực sự chỉ có hai đối số hoặc tham số mà bạn cần biết về
sales_data.query['sales > 60000']
3sales_data.query['sales > 60000']
4
Hãy nói về từng người trong số họ
sales_data.query['sales > 60000']3 [bắt buộc]
Ở đây,
sales_data.query['sales > 60000']3 là một số loại biểu thức logic mô tả những hàng nào sẽ trả về trong kết quả đầu ra
Nếu biểu thức đúng với một hàng cụ thể, hàng đó sẽ được đưa vào đầu ra. Nếu biểu thức sai đối với một hàng cụ thể, hàng đó sẽ bị loại khỏi đầu ra. Tôi sẽ chỉ cho bạn một số ví dụ về các biểu thức này
Một lưu ý. bản thân biểu thức phải được trình bày dưới dạng chuỗi Python. Điều đó có nghĩa là biểu thức phải được đặt bên trong dấu ngoặc kép … hoặc trích dẫn kép hoặc trích dẫn đơn
Hãy nhớ rằng bạn cũng có thể cần sử dụng các chuỗi bên trong chính biểu thức đó. Ví dụ: nếu bạn cần tham chiếu một danh mục có tên là “Chó” bên trong biểu thức logic của mình và bạn đặt danh mục đó bên trong dấu ngoặc kép, thì bạn sẽ cần đặt biểu thức tổng thể bên trong dấu ngoặc đơn. Nếu bạn chưa quen với điều này, vui lòng xem lại cách chuỗi hoạt động trong Python và xem lại cách tham chiếu chuỗi trong chuỗi
sales_data.query['sales > 60000']4
Tham số
sales_data.query['sales > 60000']4 cho phép bạn chỉ định xem bạn có muốn sửa đổi trực tiếp DataFrame mà bạn đang làm việc hay không
Hãy nhớ từ phần cú pháp, khi chúng ta sử dụng phương thức
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008, chúng ta cần nhập tên của DataFrame mà chúng ta muốn đặt con. DataFrame đó sẽ đóng vai trò là đầu vào của phương thức truy vấn
Tuy nhiên, theo mặc định, phương thức truy vấn sẽ tạo ra một DataFrame mới làm đầu ra và sẽ giữ nguyên DataFrame ban đầu
Đó là bởi vì theo mặc định, tham số
sales_data.query['sales > 60000']4 được đặt thành
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500031. Điều đó có nghĩa là truy vấn đó sẽ không sửa đổi DataFrame gốc “tại chỗ”. Thay vào đó, nó tạo ra một DataFrame mới. Đó thực sự là ý nghĩa của tham số
sales_data.query['sales > 60000']4
Nhưng chúng ta có thể thay đổi hành vi đó bằng cách đặt
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500033
Nếu chúng tôi ghi đè mặc định và đặt
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500033, truy vấn sẽ sửa đổi DataFrame ban đầu “tại chỗ”
Nhưng hãy cẩn thận… nếu bạn làm điều này, bạn sẽ ghi đè lên Khung dữ liệu ban đầu của mình. Đảm bảo rằng mã của bạn đang hoạt động theo cách bạn muốn
ví dụ. cách sử dụng. query[] để tập hợp con một khung dữ liệu Pandas
Ok, bây giờ bạn đã học cách hoạt động của cú pháp, hãy xem một số ví dụ
ví dụ
Chạy mã này trước
Trước khi chúng tôi thực sự làm việc với các ví dụ, chúng tôi cần chạy một số mã sơ bộ
Chúng tôi sẽ nhập Pandas và tạo một khung dữ liệu
nhập gấu trúcĐầu tiên, hãy nhập Pandas
Điều này khá đơn giản, nhưng nếu bạn là người mới bắt đầu, bạn có thể không quen với nó
Để gọi bất kỳ chức năng nào từ Pandas [hoặc bất kỳ gói nào khác], trước tiên chúng ta cần nhập gói. Chúng tôi nhập một gói có câu lệnh
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500035
Hơn nữa, chúng ta có thể nhập một gói có tên gốc [i. e. ,
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500036]. Nhưng chúng tôi cũng có tùy chọn nhập gói có “biệt hiệu. ” Đó là một cách làm rất phổ biến, và đó là những gì chúng ta sẽ làm ở đây
Chúng tôi sẽ nhập Pandas với biệt danh "
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500037"
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450000Tạo khung dữ liệu
Chúng tôi cũng cần một khung dữ liệu để làm việc với
Ở đây, chúng tôi sẽ sử dụng cách tạo DataFrame với một số dữ liệu bán hàng giả
Để làm điều này, chúng tôi chỉ sử dụng pd. Chức năng DataFrame từ Pandas
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450001
Và nếu chúng ta in nó ra, chúng ta có thể thấy tập dữ liệu
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 45000
Lưu ý rằng DataFrame có bốn biến.
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500038,
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500039,
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500050 và
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500051
Chúng tôi sẽ sử dụng các biến này [và chỉ mục hàng] để tập hợp dữ liệu của chúng tôi với
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008
VÍ DỤ 1. Tập hợp con một khung dữ liệu gấu trúc dựa trên một biến số
Hãy bắt đầu với một ví dụ rất đơn giản
Ở đây, chúng tôi sẽ tập hợp con dữ liệu trên một biến số.
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500050
Chúng tôi sẽ truy xuất các hàng trong DataFrame trong đó
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500050 lớn hơn 60000
Để làm điều này, chúng tôi chỉ cần cung cấp một biểu thức logic bên trong dấu ngoặc đơn.
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500055
Hãy chạy mã để bạn có thể xem đầu ra
sales_data.query['sales > 60000']
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450003
Lưu ý rằng khi chúng tôi chạy mã, nó sẽ trả về 5 hàng. DataFrame ban đầu có 11 hàng, nhưng đầu ra có 5
Ngoài ra, tất cả các hàng dữ liệu trong đầu ra đều đáp ứng các tiêu chí được xác định trong biểu thức logic
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500055. Tất cả các hồ sơ có doanh số lớn hơn 60000
Điều này thực sự đơn giản. Phương thức truy vấn đã sử dụng biểu thức
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500055 như một loại tiêu chí lọc. Nếu tiêu chí đúng cho một hàng cụ thể, thì hàng đó được đưa vào đầu ra. Nếu tiêu chí là sai cho một hàng cụ thể, nó sẽ bị loại trừ
Bây giờ hãy lưu ý rằng trong ví dụ đơn giản này, chúng tôi đã sử dụng dấu lớn hơn để lọc biến doanh số bán hàng. Đây là một việc cần làm, nhưng chúng ta cũng có thể kiểm tra tính tương đương [
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500058], kiểm tra giá trị lớn hơn hoặc bằng, ít hơn, v.v. Hầu như mọi toán tử so sánh sẽ hoạt động
Và như bạn sẽ thấy trong các ví dụ sắp tới, chúng ta có thể kết hợp các biểu thức bằng cách sử dụng các toán tử logic để tạo các biểu thức phức tạp hơn
VÍ DỤ 2. Chọn các hàng dựa trên một biến phân loại
Tiếp theo, chúng tôi sẽ chọn một nhóm các hàng bằng cách lọc trên một biến phân loại
Chúng tôi sẽ truy xuất tất cả các hàng trong đó
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500039 bằng với
sales_data.query['sales > 60000']70
Để làm điều này, chúng ta sẽ gọi phương thức
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008 bằng cách sử dụng “ký hiệu dấu chấm. ” Chúng tôi chỉ cần nhập tên của Khung dữ liệu của mình,
sales_data.query['sales > 60000']72, sau đó nhập tên của phương thức,
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008
Bên trong dấu ngoặc đơn của phương thức truy vấn, chúng ta có một biểu thức logic.
sales_data.query['sales > 60000']74
Hãy chạy mã và xem đầu ra
Đây là mã
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450005
Và đây là đầu ra, là một khung dữ liệu mới
sales_data.query['sales > 60000']7
Lưu ý rằng DataFrame đầu ra chứa tất cả các bản ghi cho khu vực Đông
Một vài lưu ý về điều này
Đầu tiên, biểu thức logic về mặt cú pháp chỉ là biểu thức logic Python. Ở đây, chúng tôi đang sử dụng toán tử tương đương từ Python, dấu bằng kép [
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500058]
Thứ hai, toàn bộ biểu thức logic được chứa bên trong dấu nháy đơn. Đó là, chúng tôi cung cấp biểu thức logic để. truy vấn [] ở dạng chuỗi. Truy vấn mong đợi một chuỗi
Thứ ba, chúng tôi đang tham khảo
sales_data.query['sales > 60000']76, đây là một trong những giá trị duy nhất của biến
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500039. Lưu ý rằng giá trị này thực sự được chứa bên trong dấu ngoặc kép. Điều này là do chúng tôi coi các giá trị chuỗi của DataFrame là các chuỗi và do đó, nó cần phải nằm trong dấu ngoặc kép. Nhưng vì biểu thức tổng thể đã nằm trong dấu ngoặc đơn nên chúng ta cần sử dụng dấu ngoặc kép cho giá trị
sales_data.query['sales > 60000']76. Nếu bạn không hiểu điều này, bạn cần xem lại quy tắc sử dụng dấu ngoặc kép bên trong dấu ngoặc kép với Python
VÍ DỤ 3. Tập hợp một DataFrame theo chỉ mục
Ở đây, chúng tôi sẽ tham chiếu chỉ mục của DataFrame và tập hợp con các hàng dựa trên chỉ mục đó
Trước tiên, hãy in ra DataFrame
sales_data.query['sales > 60000']8
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 45000
Lưu ý rằng khi chúng tôi in ra DataFrame, mỗi hàng có một số nguyên được liên kết với nó ở phía bên trái, bắt đầu từ 0
Nhóm số này là chỉ số. Theo mặc định, khi chúng tôi tạo DataFrame, mỗi hàng sẽ được cung cấp một giá trị chỉ mục số như thế này [mặc dù, có nhiều cách để thay đổi chỉ mục thành thứ khác]
Chúng ta có thể tham chiếu các giá trị chỉ mục này bên trong truy vấn
Để làm điều này, chỉ cần sử dụng từ 'chỉ mục'
Đây là một ví dụ. Ở đây, chúng tôi sẽ trả về các hàng có chỉ số nhỏ hơn 3. Điều này sẽ trả về hiệu quả ba hàng đầu tiên
sales_data.query['sales > 60000']0
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500010
Lưu ý rằng trong kết quả này, các giá trị chỉ số [ở phía bên trái của bản in] đều nhỏ hơn 3
Bạn cũng có thể sử dụng các phép toán bên trong các biểu thức của mình và đây có thể là một kỹ thuật hữu ích để tập hợp dữ liệu của bạn theo những cách thú vị
Ví dụ: chúng tôi có thể sử dụng toán tử modulo [
sales_data.query['sales > 60000']79] trên
sales_data.query['sales > 60000']80 để truy xuất các hàng "lẻ" trong Khung dữ liệu của chúng tôi
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500011
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500012
Sử dụng
sales_data.query['sales > 60000']80 bên trong các biểu thức của bạn cho truy vấn là một cách tốt để đặt con có điều kiện vào chỉ mục
VÍ DỤ 4. Tập hợp một khung dữ liệu gấu trúc bằng cách so sánh hai cột
Bây giờ, hãy làm cho mọi thứ phức tạp hơn một chút
Ở đây, chúng ta sẽ so sánh hai biến –
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500050 và
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500051 – và trả về các hàng có doanh thu nhỏ hơn chi phí
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500013
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500014
Việc này thật thẳng thắn. Biểu thức logic của chúng ta,
sales_data.query['sales > 60000']84, hướng dẫn phương thức truy vấn trả về các hàng có doanh thu nhỏ hơn chi phí. Và đó là những gì trong đầu ra
Hãy nhớ rằng chúng ta có thể sử dụng nhiều hơn hai biến trong các biểu thức của mình hoặc làm cho các biểu thức trở nên phức tạp hơn bằng các toán tử logic
Tôi sẽ cho bạn thấy một ví dụ về điều đó trong ví dụ tiếp theo
VÍ DỤ 5. Tập hợp con một khung dữ liệu gấu trúc với nhiều điều kiện
Ở đây, chúng ta sẽ tập hợp con DataFrame dựa trên một biểu thức logic phức tạp. Biểu thức bao gồm hai biểu thức nhỏ hơn đang được kết hợp với toán tử
sales_data.query['sales > 60000']85
Chúng tôi sẽ trả về các hàng có doanh số lớn hơn 50000 VÀ khu vực là 'Đông' hoặc 'Tây'
Đây là mã
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500015
Và đây là đầu ra
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500016
Lưu ý những hàng nào thực sự ở đầu ra. Tất cả các hàng đều có một khu vực là 'Đông' hoặc 'Tây'. Ngoài ra, tất cả các hàng có doanh số lớn hơn 50000
Chúng tôi đã làm điều này bằng cách tạo một biểu thức logic phức hợp bằng cách sử dụng toán tử
sales_data.query['sales > 60000']85
Biểu thức tổng thể bên trong truy vấn là
sales_data.query['sales > 60000']87
Chú ý rằng có hai phần. Phần đầu tiên là
sales_data.query['sales > 60000']88. Phần thứ hai là
sales_data.query['sales > 60000']89. Bản thân cả hai phần này đều là các biểu thức nhỏ sẽ tập hợp con DataFrame của chúng tôi. Nhưng ở đây, chúng ta đang kết hợp chúng với toán tử logic '______485'. Điều này yêu cầu truy vấn trả về các hàng có cả hai phần là
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450001
Nếu muốn, bạn cũng có thể sử dụng toán tử logic '
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450002' và toán tử logic '
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450003' bên trong các biểu thức của mình. Về cơ bản, bạn sử dụng các toán tử logic Python để tạo các biểu thức phức tạp hơn và tập hợp con dữ liệu của mình theo những cách phức tạp hơn
VÍ DỤ 6. tham chiếu các biến cục bộ bên trong truy vấn
Bây giờ, hãy làm điều gì đó hơi khác một chút
Cho đến nay, chúng tôi đã tham chiếu đến các biến thực sự bên trong DataFrame. Chúng tôi đã tham khảo tên của các cột, như
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500050 và
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500051
Bây giờ, chúng ta sẽ tham chiếu một biến bên ngoài khung dữ liệu
Ở đây, chúng tôi sẽ tính giá trị trung bình của biến doanh số bán hàng và lưu trữ nó dưới dạng một biến riêng biệt bên ngoài Khung dữ liệu của chúng tôi
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500017
Và chúng ta hãy nhìn vào giá trị
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500018
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500019
Biến này,
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450006, chỉ giữ giá trị trung bình của biến doanh số bán hàng của chúng tôi
Tiếp theo, chúng ta sẽ tham khảo biến đó
Để làm điều này, chúng ta sẽ sử dụng ký tự '
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450007' trước biến
Hãy nhìn vào mã
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450000
Và đây là đầu ra
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450003
Lưu ý rằng đối với tất cả các hàng, doanh số lớn hơn 58454. 545 [giá trị trung bình của doanh thu]
VÍ DỤ 7. Sửa đổi DataFrame tại chỗ
Cuối cùng, hãy làm một ví dụ nữa
Ở đây, chúng tôi sẽ sửa đổi DataFrame "tại chỗ"
Điều đó có nghĩa là chúng tôi sẽ trực tiếp sửa đổi DataFrame mà chúng tôi đang vận hành, thay vì tạo một DataFrame mới
Bây giờ hãy ghi nhớ. sửa đổi DataFrame tại chỗ có thể gặp rủi ro, vì chúng tôi sẽ ghi đè lên dữ liệu của mình
Trong trường hợp đó, tôi thực sự sẽ tạo một DataFrame trùng lặp đầu tiên được gọi là
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008. Bằng cách này, khi chúng tôi sửa đổi dữ liệu, chúng tôi sẽ ghi đè lên bản sao và giữ nguyên bản gốc của chúng tôi
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450002
Bây giờ, hãy sửa đổi
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008
Ở đây, chúng tôi sẽ chọn các hàng có
sales_data.query['sales > 60000']00, nhưng chúng tôi sẽ trực tiếp sửa đổi Khung dữ liệu bằng cách đặt
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 4500033
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450003
Và hãy in ra đầu ra
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450004
NGOÀI
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450005
Lưu ý rằng các hàng trong
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008 đáp ứng tiêu chí của chúng tôi là chỉ mục phải nhỏ hơn 5. Ngoài ra, lưu ý rằng truy vấn đã sửa đổi DataFrame trực tiếp [thay vì tạo DataFrame mới]
Câu hỏi thường gặp về truy vấn Pandas
Dưới đây là một số câu hỏi thường gặp về phương pháp truy vấn Pandas
Các câu hỏi thường gặp
Lợi thế của việc sử dụng name region sales expenses
0 William East 50000 42000
1 Emma North 52000 43000
2 Sofia East 90000 50000
3 Markus South 34000 44000
4 Edward West 42000 38000
5 Thomas West 72000 39000
6 Ethan South 49000 42000
7 Olivia West 55000 60000
8 Arun West 67000 39000
9 Anika East 65000 44000
10 Paulo South 67000 45000
8 trên dấu ngoặc là gì
Trong Python, có nhiều cách để chọn hàng từ khung dữ liệu Pandas
Cho đến nay, phổ biến nhất là tập hợp con bằng cách sử dụng "ký hiệu ngoặc". Đây là một ví dụ [lưu ý rằng chúng tôi đang sử dụng DataFrame
sales_data.query['sales > 60000']72 được tạo ở trên]
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450006
Điều này về cơ bản tương đương với mã này bằng cách sử dụng truy vấn
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450007
Lưu ý mã sạch hơn bao nhiêu khi chúng ta sử dụng truy vấn. Nó dễ đọc hơn. Mã trông giống "tiếng Anh" hơn và ít giống cú pháp máy tính lộn xộn hơn
Trong phiên bản "ngoặc", chúng ta cần gõ liên tục tên của DataFrame. Chỉ để tham chiếu một biến, chúng ta cần nhập tên của DataFrame [i. e. ,
sales_data.query['sales > 60000']06]
Tuy nhiên, trong phiên bản truy vấn, chúng tôi chỉ cần nhập tên của cột
Hơn nữa, khi chúng ta sử dụng phương thức truy vấn Pandas, chúng ta có thể sử dụng phương thức này trong một "chuỗi" phương thức Pandas, tương tự như cách bạn sử dụng đường ống trong dplyr của R
Cuối cùng, sử dụng phương thức truy vấn sẽ dễ viết hơn, dễ đọc hơn và mạnh mẽ hơn vì bạn có thể sử dụng nó cùng với các phương thức khác
Truy vấn trong Pandas so với mã SQL như thế nào
Nếu bạn có nền tảng về SQL, bạn có thể đang cố gắng tìm cách viết lại các truy vấn SQL của mình bằng Pandas
Nếu đúng như vậy, bạn cần biết cách dịch cú pháp SQL sang Pandas
Vì vậy, nếu bạn đang cố dịch SQL sang Pandas, làm thế nào để
name region sales expenses 0 William East 50000 42000 1 Emma North 52000 43000 2 Sofia East 90000 50000 3 Markus South 34000 44000 4 Edward West 42000 38000 5 Thomas West 72000 39000 6 Ethan South 49000 42000 7 Olivia West 55000 60000 8 Arun West 67000 39000 9 Anika East 65000 44000 10 Paulo South 67000 450008 phù hợp?
Phương thức truy vấn giống như một câu lệnh
sales_data.query['sales > 60000']08 trong SQL
Bạn có thể sử dụng truy vấn để chỉ định các điều kiện mà hàng của bạn phải đáp ứng để được trả lại
Để lại câu hỏi khác của bạn trong các ý kiến dưới đâyBạn có thêm câu hỏi về phương pháp truy vấn Pandas?
Để lại câu hỏi của bạn trong phần bình luận bên dưới
Tham gia khóa học của chúng tôi để tìm hiểu thêm về Pandas
Nếu bạn nghiêm túc về việc học Pandas, bạn nên đăng ký khóa học Pandas cao cấp của chúng tôi có tên là Pandas Mastery
Pandas Mastery sẽ dạy cho bạn mọi thứ bạn cần biết về Pandas, bao gồm
- Cách tập hợp dữ liệu Python của bạn
- Tổng hợp dữ liệu với Pandas
- Cách định hình lại dữ liệu của bạn
- và hơn thế nữa
Hơn nữa, nó sẽ giúp bạn hoàn toàn làm chủ cú pháp trong vòng vài tuần. Bạn sẽ khám phá cách trở nên "thông thạo" trong việc viết mã Pandas để thao tác dữ liệu của bạn