แนะนำตัว
นุ่นมีความสามารถในการเลือกคู่เพื่อเลือกชุดย่อยของข้อมูลโดยใช้ตำแหน่งดัชนีหรือโดยใช้ป้ายกำกับดัชนี ในบทความนี้ ผมจะแสดงวิธีการ "เลือกชุดย่อยของข้อมูลโดยใช้การแบ่งส่วนศัพท์เฉพาะ"
Google เต็มไปด้วยชุดข้อมูล ค้นหาชุดข้อมูลภาพยนตร์ใน kaggle.com โพสต์นี้ใช้ชุดข้อมูลภาพยนตร์จาก kaggle
ทำอย่างไร
-
นำเข้าชุดข้อมูลภาพยนตร์โดยมีเพียงคอลัมน์ที่จำเป็นสำหรับตัวอย่างนี้
import pandas as pd
import numpy as np
movies = 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 |
-
ฉันแนะนำให้เรียงลำดับดัชนีเสมอ โดยเฉพาะอย่างยิ่งหากดัชนีประกอบด้วยสตริง คุณจะสังเกตเห็นความแตกต่างหากคุณจัดการกับชุดข้อมูลขนาดใหญ่เมื่อจัดเรียงดัชนีของคุณ
จะเป็นอย่างไรหากฉันไม่จัดเรียงดัชนี
ไม่มีปัญหาโค้ดของคุณจะทำงานตลอดไป ล้อเล่น ถ้าป้ายดัชนีไม่ได้เรียงลำดับ แพนด้าจะต้องสำรวจป้ายกำกับทั้งหมดทีละรายการเพื่อให้ตรงกับข้อความค้นหาของคุณ ลองนึกภาพพจนานุกรม Oxford ที่ไม่มีหน้าดัชนี คุณจะทำอย่างไร? ด้วยการจัดเรียงดัชนี คุณสามารถข้ามไปยังป้ายกำกับที่คุณต้องการแยกได้อย่างรวดเร็ว เช่นเดียวกับ Pandastoo
ให้เราตรวจสอบก่อนว่าดัชนีของเราถูกจัดเรียงหรือไม่
# check if the index is sorted or not ? movies.index.is_monotonic
เท็จ
-
เห็นได้ชัดว่าดัชนีไม่ได้เรียงลำดับ เราจะพยายามเลือกภาพยนตร์ที่เริ่มต้นด้วย A% ก็เหมือนการเขียน
เลือก * จากภาพยนตร์ที่ชื่อ like'A%'
movies.loc["Aa":"Bb"]
select * from movies where title like 'A%'
---------------------------------------------------------------------------
ValueErrorTraceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, labe l, side, kind)
4844try:
-> 4845return self._searchsorted_monotonic(label, side) 4846except ValueError:
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in _searchsorted_monotonic(se lf, label, side)
4805
-> 4806raise ValueError("index must be monotonic increasing or decreasing")
4807
ValueError: index must be monotonic increasing or decreasing
During handling of the above exception, another exception occurred:
KeyErrorTraceback (most recent call last)
in
----> 1 movies.loc["Aa": "Bb"]
~\anaconda3\lib\site-packages\pandas\core\indexing.py in getitem (self, key)
1766
1767maybe_callable = com.apply_if_callable(key, self.obj)
-> 1768return self._getitem_axis(maybe_callable, axis=axis) 1769
1770def _is_scalar_access(self, key: Tuple):
~\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(self, key, axis)
1910if isinstance(key, slice):
1911self._validate_key(key, axis)
-> 1912return self._get_slice_axis(key, axis=axis) 1913elif com.is_bool_indexer(key):
1914return self._getbool_axis(key, axis=axis)
~\anaconda3\lib\site-packages\pandas\core\indexing.py in _get_slice_axis(self, slice_ob j, axis)
1794
1795labels = 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 in slice_indexer(self, start, end, step, kind)
4711slice(1, 3)
4712"""
-> 4713start_slice, end_slice = self.slice_locs(start, end, step=step, kind=ki nd)
4714
4715# return a slice
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in slice_locs(self, start, en d, step, kind)
4924start_slice = None
4925if start is not None:
-> 4926start_slice = self.get_slice_bound(start, "left", kind) 4927if start_slice is None:
4928start_slice = 0
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, labe l, side, kind)
4846except ValueError:
4847# raise the original KeyError
-> 4848raise err
4849
4850if isinstance(slc, np.ndarray):
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, labe l, side, kind)
4840# we need to look up the label
4841try:
-> 4842slc = self.get_loc(label) 4843except KeyError as err:
4844try:
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method,
tolerance)
2646return self._engine.get_loc(key)
2647except KeyError:
-> 2648return self._engine.get_loc(self._maybe_cast_indexer(key))
2649indexer = self.get_indexer([key], method=method, tolerance=tolerance) 2650if indexer.ndim > 1 or indexer.size > 1:
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine._get_loc_duplicates()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine._maybe_get_bool_indexer() KeyError: 'Aa'
-
เรียงลำดับดัชนีจากน้อยไปมาก และลองใช้คำสั่งเดียวกันเพื่อใช้ประโยชน์จากการจัดเรียงสำหรับการแบ่งส่วนศัพท์เฉพาะ
True
-
ตอนนี้ข้อมูลของเราได้รับการตั้งค่าและพร้อมสำหรับการแบ่งส่วนศัพท์ ให้เราเลือกชื่อภาพยนตร์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร 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 |
292 แถว × 3 คอลัมน์
จริง
| หัวเรื่อง | งบประมาณ | 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 |
228 แถว × 3 คอลัมน์