Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จะเลือกชุดย่อยของข้อมูลในรูปแบบแบบสอบถาม SQL ใน Pandas ได้อย่างไร


แนะนำตัว

ในโพสต์นี้ ฉันจะแสดงวิธีดำเนินการวิเคราะห์ข้อมูลด้วยการกรองสไตล์ SQL ด้วย Pandas ข้อมูลของบริษัทส่วนใหญ่จัดเก็บไว้ในฐานข้อมูลที่ต้องใช้ SQL เพื่อเรียกค้นและจัดการข้อมูลดังกล่าว ตัวอย่างเช่น มีบริษัทต่างๆ เช่น Oracle, IBM, Microsoft ที่มีฐานข้อมูลของตนเองพร้อมการใช้ SQL ของตัวเอง

นักวิทยาศาสตร์ข้อมูลต้องจัดการกับ SQL ในบางช่วงของอาชีพ เนื่องจากข้อมูลไม่ได้ถูกจัดเก็บในไฟล์ CSV เสมอไป ฉันชอบใช้ Oracle เป็นการส่วนตัว เนื่องจากข้อมูลของบริษัทของฉันส่วนใหญ่จัดเก็บไว้ใน Oracle

สถานการณ์ – 1 สมมติว่าเราได้รับมอบหมายให้ค้นหาภาพยนตร์ทั้งหมดจากชุดข้อมูลภาพยนตร์ตามเงื่อนไขด้านล่าง

  • ภาษาของภาพยนตร์ควรเป็นภาษาอังกฤษ (en) หรือสเปน (es)
  • ความนิยมของภาพยนตร์ต้องอยู่ระหว่าง 500 ถึง 1,000
  • ต้องเปิดสถานะภาพยนตร์
  • จำนวนโหวตต้องมากกว่า 5000 สำหรับสถานการณ์ข้างต้น คำสั่ง SQL จะมีลักษณะดังนี้
SELECTFROM WHEREtitle AS movie_title,original_language AS movie_language,popularityAS movie_popularity,statusAS movie_status,vote_count AS movie_vote_count movies_dataoriginal_languageIN ('en', 'es')AND status=('Released')และความนิยมระหว่าง 500 ถึง 1000AND คะแนนโหวต> 5000; 

เมื่อคุณได้เห็น SQL สำหรับข้อกำหนดแล้ว มาทำทีละขั้นตอนโดยใช้แพนด้ากัน ฉันจะแสดงให้คุณเห็นสองวิธี

วิธีที่ 1:- การจัดทำดัชนีบูลีน

1. โหลดชุดข้อมูล movies_data ไปที่ DataFrame

นำเข้าแพนด้าเป็นภาพยนตร์ pd =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")

กำหนดตัวแปรสำหรับแต่ละเงื่อนไข

languages ​​=[ "en" , "es" ] condition_on_languages ​​=ภาพยนตร์ ต้นฉบับ_ภาษา isin ( ภาษา )condition_on_status =ภาพยนตร์ status =="ปล่อยแล้ว"condition_on_popularity =ภาพยนตร์ ความนิยม ระหว่าง ( 500 , 1000 )condition_on_votecount =ภาพยนตร์ คะแนนโหวต> 5000

3. รวมเงื่อนไขทั้งหมด (บูลีนอาร์เรย์) เข้าด้วยกัน

final_conditions =( condition_on_languages ​​&condition_on_status &condition_on_popularity &condition_on_votecount )columns =[ "title" , "original_language" , "status" , "popularity" , "vote_count" ]# รวมหนังทั้งหมดเข้าด้วยกัน loc [ final_conditions , คอลัมน์ ]


หัวเรื่อง
ต้นฉบับ_ภาษา
สถานะ
ความนิยม
vote_count
95 ดวงดาว
th
วางจำหน่ายแล้ว
724.247784
10867
788เดดพูล
th
วางจำหน่ายแล้ว
514.569956
10995


วิธีที่ 2:- .query() วิธี

เมธอด .query() คือ SQL ที่รูปแบบประโยคกรองข้อมูล เงื่อนไขสามารถส่งผ่านเป็นสตริงในเมธอดนี้ได้ อย่างไรก็ตาม ชื่อคอลัมน์ต้องไม่มีช่องว่าง

หากคุณมีช่องว่างในชื่อคอลัมน์ของคุณ ให้แทนที่ด้วยเครื่องหมายขีดล่างโดยใช้ฟังก์ชันแทนที่หลาม

จากประสบการณ์ของฉัน ฉันได้เห็นเมธอด query() เมื่อนำไปใช้กับ DataFrame ที่ใหญ่กว่านั้นเร็วกว่าวิธีก่อนหน้า

นำเข้าแพนด้าเป็นภาพยนตร์ pd =pd read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )

4.สร้างสตริงการสืบค้นและรันเมธอด

โปรดทราบว่าวิธีการ .query ใช้ไม่ได้กับสตริงที่มีเครื่องหมายอัญประกาศสามตัวที่ครอบคลุมหลายบรรทัด

final_conditions =("original_language ใน ['en','es']""and status =='ปล่อย' ""และความนิยม> 500 ""และความนิยม <1000""และคะแนนโหวต> 5000") final_result =ภาพยนตร์ . แบบสอบถาม ( final_conditions )final_result



งบประมาณ
id
ต้นฉบับ_ภาษา
original_title
ความนิยม
release_date
รายได้
รันไทม์
st
95
165000000
157336
th
ดวงดาว
724.247784
5/11/2014
675120017
169.0
ปล่อย
788
58000000
293660
th
เดดพูล
514.569956
9/02/2016
783112979
108.0
ปล่อย


ในการเขียนโค้ดของฉัน มีหลายค่าที่ต้องตรวจสอบในอนุประโยค "ใน" ของฉันมากกว่า ดังนั้นไวยากรณ์ข้างต้นจึงไม่เหมาะที่จะใช้งาน เป็นไปได้ที่จะอ้างอิงตัวแปร Python โดยใช้สัญลักษณ์ at (@)

คุณยังสามารถสร้างค่าโดยทางโปรแกรมเป็นรายการหลามและใช้กับ (@) ได้

movie_languages ​​=[ 'en' , 'es' ]final_conditions =("original_language ใน @movie_languages ​​""and status =='Released' ""and popular> 500 ""and popular <1000""and vote_count> 5000" )final_result =ภาพยนตร์ แบบสอบถาม ( final_conditions )final_result



งบประมาณ
id
ต้นฉบับ_ภาษา
original_title
ความนิยม
release_date
รายได้
รันไทม์
st
95
165000000
157336
th
ดวงดาว
724.247784
5/11/2014
675120017
169.0
ปล่อย
788
58000000
293660
th
เดดพูล
514.569956
9/02/2016
783112979
108.0
ปล่อย