แนะนำตัว
นุ่นมีความสามารถในการเลือกคู่เพื่อเลือกชุดย่อยของข้อมูลโดยใช้ตำแหน่งดัชนีหรือโดยใช้ป้ายกำกับดัชนี ในโพสต์นี้ ฉันจะแสดงวิธี “เลือกชุดย่อยของข้อมูลโดยใช้ป้ายกำกับดัชนี” โดยใช้ป้ายกำกับดัชนี
โปรดจำไว้ว่า พจนานุกรมและรายการ Python เป็นโครงสร้างข้อมูลในตัวซึ่งเลือกข้อมูลโดยใช้ป้ายกำกับดัชนีหรือตำแหน่งตามดัชนี คีย์ของพจนานุกรมต้องเป็นสตริง จำนวนเต็ม หรือทูเพิล ในขณะที่รายการต้องใช้จำนวนเต็ม (ตำแหน่ง) หรืออ็อบเจกต์สไลซ์สำหรับการเลือก
นุ่นมีแอตทริบิวต์ .loc และ.iloc ที่พร้อมใช้สำหรับการดำเนินการดัชนีด้วยวิธีเฉพาะของตนเอง ). แอตทริบิวต์ With.iloc แพนด้าจะเลือกตามตำแหน่งเท่านั้นและทำงานเหมือนกับรายการ Python แอตทริบิวต์ .loc จะเลือกโดยป้ายกำกับดัชนีเท่านั้น ซึ่งคล้ายกับการทำงานของพจนานุกรม Python
เลือกชุดย่อยของข้อมูลโดยใช้ป้ายกำกับดัชนีด้วย .loc[]
แอตทริบิวต์ loc และ iloc มีอยู่ในทั้ง Series และ DataFrame
1.นำเข้าชุดข้อมูลภาพยนตร์ที่มีชื่อเรื่องเป็นดัชนี
นำเข้าแพนด้าเป็น pdmovies =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv",index_col="title",usecols=["title","budget" ,"vote_average","vote_count"])
ฉันแนะนำให้เรียงลำดับดัชนีเสมอ โดยเฉพาะอย่างยิ่งหากดัชนีประกอบด้วยสตริง คุณจะสังเกตเห็นความแตกต่างหากคุณกำลังจัดการกับชุดข้อมูลขนาดใหญ่เมื่อจัดเรียงดัชนีของคุณ
movies.sort_index(inplace =True)movies.head(3)
งบประมาณ vote_average vote_counttitle___________________________________#Horror 1500000 3.3 52(500) Days of Summer 7500000 7.2 290410 Cloverfield Lane 15000000 6.8 2468
ฉันได้จัดเรียงดัชนีโดยใช้พารามิเตอร์ sort_index และ "inplace =True"
1. สิ่งหนึ่งที่น่าสนใจเกี่ยวกับไวยากรณ์ของวิธี loc คือไม่ใช้วงเล็บ () แทนที่จะใช้วงเล็บเหลี่ยม[] ฉันคิดว่า (อาจผิด) ที่เป็นเพราะพวกเขาต้องการความสม่ำเสมอ เช่น คุณสามารถใช้ [] ในซีรีส์เพื่อแยกส่วน ขณะที่ใช้กับ Dataframe จะดึงคอลัมน์มาให้คุณ
# สารสกัด "Spider-Man 3" (ฉันไม่ใช่แฟนตัวยงของสไปดี้)movies.loc["Spider-Man 3"]
งบประมาณ 2580000000.0vote_average 5.9vote_count 3576.0 ชื่อ:Spider-Man 3 dtype:float64
1. ใช้สไลซ์ดึงค่าต่างๆ ออกมา ฉันจะดึงหนังที่ฉันไม่ได้ดู เนื่องจากนี่คือป้ายกำกับสตริง เราจึงจะได้รับข้อมูลทั้งหมดสำหรับเกณฑ์การค้นหาของเรา รวมถึง "อวาตาร์"
ข้อควรจำ - หากคุณทำงานกับ Python List ค่าสุดท้ายจะถูกยกเว้น แต่เนื่องจากเรากำลังทำงานกับสตริง ค่านี้จะรวมอยู่ด้วย
movies.loc["Alien":"Avatar"]
งบประมาณ vote_average vote_counttitleAlien 11000000 7.9 4470Alien Zone 0 4.0 3Alien:Resurrection 70000000 5.9 1365Aliens 18500000 7.7 3220Aliens in the Attic 45000000 5.3 244... ... ... ...Australia 130000000 6.3 694Auto Focus 7000000 6.1 56Automata 7000000 5.6 670 ในนิวยอร์ก 65000000 5.7 135Avatar 237000000 7.2 11800
167 แถว × 3 คอลัมน์
1. ฉันสามารถรับภาพยนตร์ที่ไม่อยู่ติดกันสองเรื่องขึ้นไปโดยสุ่มได้หรือไม่? ใช่แน่นอน แต่คุณต้องพยายามมากขึ้นในการส่งรายชื่อภาพยนตร์ที่คุณต้องการ
ที่ฉันหมายถึงคือคุณต้องมีวงเล็บเหลี่ยมด้วยในวงเล็บเหลี่ยม
movies.loc[["Avatar","Avengers:Age of Ultron"]]
budget vote_average vote_counttitleAvatar 237000000 7.2 11800Avengers:Age of Ultron 280000000 7.3 6767
6. ฉันสามารถเปลี่ยนลำดับการเลือกได้หรือไม่? แน่นอน คุณสามารถช่วยตัวเองได้โดยการระบุรายการป้ายกำกับที่คุณต้องการตามลำดับ
แม้ว่าการระบุรายการป้ายกำกับที่คุณต้องการแยกจะดูดีมาก แต่คุณรู้ไหมว่าจะเกิดอะไรขึ้นหากคุณสะกดค่าผิด แพนด้าจะติด Values (NaN) ที่หายไปสำหรับป้ายกำกับที่สะกดผิด แต่วันเหล่านั้นหายไปแล้ว การอัปเดตล่าสุดทำให้เกิดข้อยกเว้น
movies.loc[["Avengers:Age of Ultron","Avatar","เมื่อไรที่ภาพยนตร์เรื่องต่อไปของ Avengers?"]]
KeyError:'ไม่รองรับการส่งรายการไลค์ไปยัง .loc หรือ [] ที่มีป้ายกำกับที่หายไป โปรดดู https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex -listlike'
วิธีหนึ่งในการดูแลคือการตรวจสอบค่าในดัชนีโดยตรง
"ภาพยนตร์เรื่องต่อไปของอเวนเจอร์สเมื่อไร"ใน movies.index
ผลลัพธ์
เท็จ
หากคุณต้องการละเว้นข้อผิดพลาดและดำเนินการต่อไป คุณสามารถใช้แนวทางด้านล่าง
movies.query("ชื่อใน ('Avatar',' Avengers Next Movie เมื่อไหร่?')")
งบประมาณ vote_average คะแนนโหวต_counttitleAvatar 237000000 7.2 11800