แนะนำตัว
นุ่นมีความสามารถในการเลือกคู่เพื่อเลือกชุดย่อยของข้อมูลโดยใช้ตำแหน่งดัชนีหรือโดยใช้ป้ายกำกับดัชนี ในบทความนี้ ผมจะแสดงวิธีการ "เลือกชุดย่อยของข้อมูลโดยใช้การแบ่งส่วนศัพท์เฉพาะ"
Google เต็มไปด้วยชุดข้อมูล ค้นหาชุดข้อมูลภาพยนตร์ใน kaggle.com โพสต์นี้ใช้ชุดข้อมูลภาพยนตร์จาก kaggle
ทำอย่างไร
1. นำเข้าชุดข้อมูลภาพยนตร์โดยมีเพียงคอลัมน์ที่จำเป็นสำหรับตัวอย่างนี้
นำเข้าแพนด้าเป็น pdimport numpy เป็น npmovies =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv",index_col="title",usecols=["title", "budget","vote_average","vote_count"])movies.sample(n=5)
หัวเรื่อง | งบประมาณ | vote_average | vote_count |
---|---|---|---|
เสียงน้อย | 0 | 6.6 | 61 |
โตแล้ว 2 | 80000000 | 5.8 | 1155 |
ปีที่ดีที่สุดในชีวิตของเรา | 2100000 | 7.6 | 143 |
งา | 2800000 | 5.1 | 366 |
การทำงานของโครไมต์ | 0 | 5.8 | 29 |
2. ฉันแนะนำให้เรียงลำดับดัชนีเสมอ โดยเฉพาะอย่างยิ่งหากดัชนีประกอบด้วยสตริง คุณจะสังเกตเห็นความแตกต่างหากคุณจัดการกับชุดข้อมูลขนาดใหญ่เมื่อจัดเรียงดัชนีของคุณ
จะเกิดอะไรขึ้นหากฉันไม่เรียงลำดับดัชนี ?
ไม่มีปัญหาโค้ดของคุณจะทำงานตลอดไป ล้อเล่น ถ้าป้ายดัชนีไม่ได้เรียงลำดับ แพนด้าจะต้องสำรวจป้ายกำกับทั้งหมดทีละรายการเพื่อให้ตรงกับข้อความค้นหาของคุณ ลองนึกภาพพจนานุกรม Oxford ที่ไม่มีหน้าดัชนี คุณจะทำอย่างไร? ด้วยการจัดเรียงดัชนี คุณสามารถข้ามไปยังป้ายกำกับที่คุณต้องการแยกได้อย่างรวดเร็ว เช่นเดียวกับ Pandastoo
ให้เราตรวจสอบก่อนว่าดัชนีของเราถูกจัดเรียงหรือไม่
# ตรวจสอบว่าดัชนีถูกจัดเรียงหรือไม่ ?movies.index.is_monotonicFalse
3. เห็นได้ชัดว่าดัชนีไม่ได้เรียงลำดับ เราจะพยายามเลือกภาพยนตร์ที่เริ่มต้นด้วย A% ก็เหมือนการเขียน
เลือก * จากภาพยนตร์ที่มีชื่อเรื่องว่า 'A%'
movies.loc["Aa":"Bb"]<ก่อนหน้า>------------------------------------------------------------- ---------------------------- ValueErrorTraceback (การโทรล่าสุดล่าสุด)~\anaconda3\lib\site-packages\pandas\core\indexes \base.py ใน get_slice_bound(ตัวเอง, labe l, ด้าน, ชนิด)4844try:-> 4845return self._searchsorted_monotonic(label, side) 4846 ยกเว้น ValueError:~\anaconda3\lib\site-packages\pandas\core\indexes\base py ใน _searchsorted_monotonic(se lf, label, side)4805-> 4806raise ValueError("index must be monotonic added or decreasing")4807ValueError:ดัชนีต้องเป็น monotonic ที่เพิ่มขึ้นหรือลดลงในระหว่างการจัดการข้อยกเว้นข้างต้น มีข้อยกเว้นอื่นเกิดขึ้น:KeyErrorTraceback (ล่าสุด โทรครั้งสุดท้าย) ใน ----> 1 ภาพยนตร์.loc["Aa":"Bb"]~\anaconda3\lib\site-packages\pandas\core\indexing.py ใน getitem (ตัวเอง, คีย์)17661767maybe_callable =com Apply_if_callable(key, self.obj)-> 1768return self._getitem_axis(maybe_callable, axis=axis) 17691770def _is_scalar_access(self, key:Tuple):~\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(ตัวเอง คีย์ แกน)1910if isinstance(คีย์ สไลซ์):1911self._validate_key(คีย์ แกน)-> 1912คืนตัวเอง_get_slice_axis(คีย์ แกน=แกน) 1913elif com.is_bool_indexer(คีย์):1914คืนตัวเอง_getbool_axis( คีย์ axis=axis)~\anaconda3\lib\site-packages\pandas\core\indexing.py in _get_slice_axis(ตัวเอง, slice_ob j, axis)17941795labels =obj._get_axis(axis)-> 1796indexer =labels.slice_indexer(1797slice_obj .start, slice_obj.stop, slice_obj.step, kind=self.name 1798)~\anaconda3\lib\site-packages\pandas\core\indexes\base.py ใน slice_indexer(ตัวเอง, เริ่มต้น, สิ้นสุด, ขั้นตอน, ชนิด) 4711slice(1, 3)4712"""-> 4713start_slice, end_slice =self.slice_locs(start, end, step=step, kind=ki nd)47144715# ส่งคืนชิ้น~\anaconda3\lib\site-packages\pandas\ core\indexes\base.py ใน slice_locs (ตัวเอง เริ่ม en d ขั้นตอน ชนิด)4924start_slice =None4925 หากการเริ่มทำงานไม่ใช่ None:-> 4926start_slice =self.get_slice_bound(start, "left", kind) 4927if start_slice คือไม่มี:4928start_slice =0~\anaconda3\lib\site-packages\pandas\core\in dexes\base.py ใน get_slice_bound (ตัวเอง, labe l, ด้านข้าง, ชนิด)4846 ยกเว้น ValueError:4847# ยก KeyError-> 4848 เพิ่ม err48494850if isinstance(slc, np.ndarray):~\anaconda3\lib\site-packages\pandas \core\indexes\base.py ใน get_slice_bound(self, label l, side, kind)4840# เราจำเป็นต้องค้นหา label4841try:-> 4842slc =self.get_loc(label) 4843 ยกเว้น KeyError เป็น err:4844try:~\anaconda3 \lib\site-packages\pandas\core\indexes\base.py ใน get_loc(ตัวเอง, คีย์, วิธี, ความคลาดเคลื่อน)2646return self._engine.get_loc(key)2647except KeyError:-> 2648return self._engine.get_loc(ตัวเอง _maybe_cast_indexer(คีย์))2649indexer =self.get_indexer([คีย์], method=method, tolerance=tolerance) 2650if indexer.nim> 1 หรือ indexer.size> 1:pandas\_libs\index.pyx ใน pandas._libs.index IndexEngine.get_loc() แพนด้า\_libs\index.pyx ใน pandas._libs.index.IndexEngine.get_loc()pandas\_libs\index.pyx ใน pandas._libs.index.IndexEngine._get_loc_duplicates()pandas\_libs\index.pyx ใน pandas._libs.index.IndexEngine._maybe_get_bool_ ตัวสร้างดัชนี () KeyError:'Aa'
4. เรียงลำดับดัชนีจากน้อยไปมาก และลองใช้คำสั่งเดียวกันเพื่อใช้ประโยชน์จากการเรียงลำดับสำหรับการแบ่งส่วนศัพท์เฉพาะ
จริง
5. ตอนนี้ข้อมูลของเราได้รับการตั้งค่าและพร้อมสำหรับการหั่นคำศัพท์ ให้เราเลือกชื่อภาพยนตร์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร A ถึงตัวอักษร B
หัวเรื่อง | งบประมาณ | vote_average | vote_count |
---|---|---|---|
ละทิ้ง | 25000000 | 4.6 | 45 |
ถูกทอดทิ้ง | 0 | 5.8 | 27 |
ลักพาตัว | 35000000 | 5.6 | 961 |
อเบอร์ดีน | 0 | 7.0 | 6 |
เกี่ยวกับเมื่อคืนนี้ | 12500000 | 6.0 | 210 |
... | ... | ... | ... |
การต่อสู้เพื่อโลกของลิง | 1700000 | 5.5 | 215 |
การต่อสู้แห่งปี | 20000000 | 5.9 | 88 |
การต่อสู้:ลอสแองเจลิส | 70000000 | 5.5 | 1448 |
Battlefield Earth | 44000000 | 3.0 | 255 |
เรือประจัญบาน | 209000000 | 5.5 | 2114 |
หัวเรื่อง | งบประมาณ | vote_average | vote_count |
---|---|---|---|
บน Flux | 62000000 | 5.4 | 703 |
xXx:สถานะของสหภาพ | 60000000 | 4.7 | 549 |
xXx | 70000000 | 5.8 | 1424 |
eXistenZ | 15000000 | 6.7 | 475 |
[REC]² | 5600000 | 6.4 | 489 |
งบประมาณ vote_average โหวต_count ชื่อ
เป็นเรื่องง่ายที่จะเห็น DataFrame ว่างเปล่า เนื่องจากข้อมูลถูกจัดเรียงในลำดับที่กลับกัน ให้เรากลับตัวอักษรและเรียกใช้อีกครั้ง
หัวเรื่อง | งบประมาณ | vote_average | vote_count |
---|---|---|---|
บีเกิร์ล | 0 | 5.5 | 7 |
อายุรเวท:ศิลปะแห่งการเป็น | 300,000 | 5.5 | 3 |
ไปกันเถอะ | 17000000 | 6.7 | 189 |
ตื่นขึ้น | 86000000 | 6.3 | 395 |
Avengers:Age of Ultron | 280000000 | 7.3 | 6767 |
... | ... | ... | ... |
เกี่ยวกับเมื่อคืนนี้ | 12500000 | 6.0 | 210 |
อเบอร์ดีน | 0 | 7.0 | 6 |
ลักพาตัว | 35000000 | 5.6 | 961 |
ถูกทอดทิ้ง | 0 | 5.8 | 27 |
ละทิ้ง | 25000000 | 4.6 | 45 |