Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để chọn tập hợp con dữ liệu trong Kiểu truy vấn SQL trong Pandas?

Giới thiệu

Trong bài đăng này, tôi sẽ chỉ cho bạn cách thực hiện Phân tích dữ liệu với tính năng lọc kiểu SQL với Pandas. Hầu hết dữ liệu của công ty doanh nghiệp được lưu trữ trong cơ sở dữ liệu yêu cầu SQL truy xuất và xử lý dữ liệu đó. Ví dụ, có những công ty như Oracle, IBM, Microsoft có cơ sở dữ liệu của riêng họ với các triển khai SQL của riêng họ.

Các nhà khoa học dữ liệu phải xử lý SQL ở một số giai đoạn trong sự nghiệp của họ vì dữ liệu không phải lúc nào cũng được lưu trữ trong các tệp CSV. Cá nhân tôi thích sử dụng Oracle hơn vì phần lớn dữ liệu của công ty tôi được lưu trữ trong Oracle.

Tình huống - 1 Giả sử chúng tôi được giao nhiệm vụ tìm tất cả phim từ tập dữ liệu phim của chúng tôi với các điều kiện dưới đây.

  • Ngôn ngữ của phim phải là tiếng Anh (en) hoặc tiếng Tây Ban Nha.
  • Mức độ phổ biến của các bộ phim phải từ 500 đến 1000.
  • Trạng thái của phim phải được công bố.
  • Số phiếu bầu phải lớn hơn 5000. Đối với trường hợp trên, câu lệnh SQL sẽ trông giống như bên dưới.
 SELECTFROM WHEREtitle AS movie_title, original_language AS movie_language, sự nổi tiếng trước> 

Bây giờ bạn đã thấy SQL cho yêu cầu, hãy làm điều này từng bước bằng cách sử dụng pandas. Tôi sẽ chỉ cho bạn hai phương pháp.

Phương pháp 1:- Lập chỉ mục Boolean

1. Tải tập dữ liệu phim_data vào DataFrame.

 nhập gấu trúc dưới dạng pd movies =pd.read_csv ("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv") 

Chỉ định một biến cho mỗi điều kiện.

 Languages ​​=["en", "es"] condition_on_languages ​​=phim. ngôn ngữ gốc . isin (ngôn ngữ) condition_on_status =phim. status =="Đã phát hành" condition_on_popularity =phim. phổ biến . giữa (500, 1000) condition_on_votecount =phim. vote_count> 5000 

3. Kết hợp tất cả các điều kiện (mảng boolean) với nhau.

 final_conditions =(condition_on_languages ​​&condition_on_status &condition_on_popularity &condition_on_votecount) cột =["title", "original_language", "status", "phổ biến", "vote_count"] # nhóm tất cả các phim lại với nhau. loc [final_conditions, column] 


trạng thái
title
original_language

phổ biến
vote_count
95 Interstellar
vi
Đã phát hành
724.247784
10867
788Deadpool
vi
Đã phát hành
514.569956
10995


Phương pháp 2:- Phương thức .query ().

Phương thức .query () là một phương thức kiểu mệnh đề SQL để lọc dữ liệu. Các điều kiện có thể được chuyển dưới dạng một chuỗi cho phương thức này, tuy nhiên, tên cột không được chứa bất kỳ khoảng trắng nào.

Nếu bạn có khoảng trắng trong tên cột của mình, hãy thay thế chúng bằng dấu gạch dưới bằng cách sử dụng hàm thay thế python.

Từ kinh nghiệm của mình, tôi đã thấy phương thức query () khi được áp dụng trên DataFrame lớn hơn nhanh hơn phương pháp trước đó.

 nhập gấu trúc dưới dạng pd phim =pd. read_csv ("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv") 

4 Xây dựng chuỗi truy vấn và thực thi phương thức.

Lưu ý rằng phương thức .query không hoạt động với ba chuỗi được trích dẫn kéo dài nhiều dòng.

 final_conditions =("original_language in ['en', 'es']" "và trạng thái =='Đã phát hành'" "và mức độ phổ biến> 500" "và mức độ phổ biến <1000" "và vote_count> 5000") final_result =phim . truy vấn (final_conditions) final_result 


ngân sách id doanh thu thời gian chạy



original_language
original_title
phổ biến
release_date


st
95
165000000
157336
vi
Interstellar
724.247784
5/11/2014
675120017
169.0
Phát hành
788
58000000
293660
vi
Deadpool
514.569956
09/02/2016
783112979
108.0
Phát hành


Còn nhiều hơn nữa, thường là trong quá trình viết mã của tôi, tôi có nhiều giá trị để kiểm tra trong mệnh đề “in” của mình. Vì vậy, cú pháp trên không phải là lý tưởng để làm việc với. Có thể tham chiếu các biến Python bằng ký hiệu at (@).

Bạn cũng có thể lập trình tạo các giá trị dưới dạng Danh sách python và sử dụng chúng với (@).

 movie_languages ​​=['en', 'es'] final_conditions =("original_language trong @movie_languages" "và trạng thái ==" Đã phát hành "" và mức độ phổ biến> 500 "" và mức độ phổ biến <1000 "" và vote_count> 5000 " ) final_result =phim. truy vấn (final_conditions) final_result 


ngân sách id doanh thu thời gian chạy



original_language
original_title
phổ biến
release_date


st
95
165000000
157336
vi
Interstellar
724.247784
5/11/2014
675120017
169.0
Phát hành
788
58000000
293660
vi
Deadpool
514.569956
09/02/2016
783112979
108.0
Phát hành