如何选择带有索引标签的数据子集?
熊猫具有双重选择功能,可以使用“索引”位置或“索引”标签选择数据子集。在本文中,我将向您展示如何使用索引标签“使用索引标签选择数据子集”。
请记住,Python词典和列表是内置的数据结构,它们可以通过使用索引标签或按索引位置来选择其数据。字典的键必须是字符串,整数或元组,而列表必须使用整数(位置)或切片对象进行选择。
熊猫具有.loc和.iloc属性,可用于以自己独特的方式执行索引操作。)。使用.iloc属性,熊猫仅按位置选择,并且工作方式类似于Python列表。.loc属性仅按索引标签选择,这类似于Python词典的工作方式。
使用带有.loc []的索引标签选择数据子集
loc和iloc属性在Series和DataFrame上均可用
导入以标题为索引的电影数据集。
import pandas as pdmovies = pd.read_csv(
"movies_data.csv",
index_col="title",
usecols=["title","budget","vote_average","vote_count"]
)
我总是建议对索引进行排序,尤其是当索引由字符串组成时。如果在对索引进行排序时要处理巨大的数据集,则会注意到差异。
输入值
movies.sort_index(inplace = True)movies.head(3)
输出结果
标题 | 预算 | 平均投票 | 投票数 |
---|---|---|---|
(500天的夏日 | 7500000 | 7.2 | 2904 |
克洛弗菲尔德巷10号 | 15000000 | 6.8 | 2468 |
疯人院10天 | 1200000 | 4.3 | 5 |
我已经使用sort_index和“ inplace = True”参数对索引进行了排序。
loc方法的语法有趣的一件事是,它不需要
parenthesis()
带方括号[]。我认为(可能是错误的)这是因为他们想要一致性,即您可以在Series上使用[]来提取行,而在Dataframe上应用将获取列。
输入值
# extract "Spider-Man 3" ( I'm not a big fan of spidy)movies.loc["Spider-Man 3"]
输出结果
budget 258000000.0vote_average 5.9
vote_count 3576.0
Name: Spider-Man 3, dtype: float64
使用切片拉出许多值。我要去看那些没看过的电影。因为这是一个字符串标签,所以我们将获取搜索条件(包括“头像”)的所有数据。
切记-如果您使用Python列表,则最后一个值将被排除,但由于我们使用的是字符串,因此将包含在内。
movies.loc["Alien":"Avatar" ]
标题 | 预算 | 平均投票 | 投票数 |
---|---|---|---|
外星人 | 11000000 | 7.9 | 4470 |
外星人区 | 0 | 4.0 | 3 |
外星人:复活 | 70000000 | 5.9 | 1365 |
外星人 | 18500000 | 7.7 | 3220 |
阁楼上的外星人 | 45000000 | 5.3 | 244 |
-- | -- | -- | |
澳大利亚 | 130000000 | 6.3 | 694 |
自动对焦 | 7000000 | 6.1 | 56 |
自动机 | 7000000 | 5.6 | 670 |
纽约的秋天 | 65000000 | 5.7 | 135 |
头像 | 237000000 | 7.2 | 11800 |
167行×3列
我可以得到不相邻的任意两部或更多部随机电影吗?肯定可以,但是您需要付出更多的努力来传递所需的电影列表。
我的意思是,您需要在方括号中包含方括号。
输入值
movies.loc[["Avatar", "Avengers: Age of Ultron"]]
标题 | 预算 | 平均投票 | 投票数 |
---|---|---|---|
头像 | 237000000 | 7.2 | 11800 |
复仇者联盟:奥创纪元 | 280000000 | 7.3 | 6767 |
我可以更改选择顺序吗?当然,您可以通过在订单中指定所需标签列表来帮助自己。
虽然这很酷,可以指定要提取的标签列表,但是您知道如果拼写错误的值会怎样?熊猫会因为拼写错误的标签而遗漏缺少值(NaN)。但是那些日子已经一去不复返了,它的最新更新引发了一个例外。
输入值
movies.loc[["Avengers: Age of Ultron","Avatar","When is Avengers next movie?"]]
---------------------------------------------------------------------------KeyError Traceback (most recent call last)
<ipython-input-21-ebe975264840> in <module>
----> 1 movies.loc[["Avengers: Age of Ultron","Avatar","When is Avengers next movie?"]]
∽\anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key)
1766
1767 maybe_callable = com.apply_if_callable(key, self.obj)
−> 1768 return self._getitem_axis(maybe_callable, axis=axis)
1769
1770 def _is_scalar_access(self, key: Tuple):
∽\anaconda3\lib\site−packages\pandas\core\indexing.py in _getitem_axis(self, key, axis)
1952 raise ValueError("Cannot index with multidimensional key")
1953
−> 1954 return self._getitem_iterable(key, axis=axis)
1955
1956 # nested tuple slicing
∽\anaconda3\lib\site−packages\pandas\core\indexing.py in _getitem_iterable(self, key, axis)
1593 else:
1594 # A collection of keys
−> 1595 keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
1596 return self.obj._reindex_with_indexers(
1597 {axis: [keyarr, indexer]}, copy=True, allow_dups=True
∽\anaconda3\lib\site−packages\pandas\core\indexing.py in _get_listlike_indexer(self, key, axis, raise_missing)
1550 keyarr, indexer, new_indexer = ax._reindex_non_unique(keyarr)
1551
−> 1552 self._validate_read_indexer(
1553 keyarr, indexer, o._get_axis_number(axis), raise_missing=raise_missing
1554 )
∽\anaconda3\lib\site−packages\pandas\core\indexing.py in _validate_read_indexer(self, key, indexer, axis, raise_missing)
1652 # just raising
1653 if not (ax.is_categorical() or ax.is_interval()):
−> 1654 raise KeyError(
1655 "Passing list−likes to .loc or [] with any missing labels "
1656 "is no longer supported, see "
KeyError: 'Passing list−likes to .loc or [] with any missing labels is no longer supported, see https://pandas.pydata.org/pandas−docs/stable/user_guide/indexing.html#deprecate−loc−reindex−listlike'
一种注意的方法是直接检查索引中的值。
输入值
"When is Avengers next movie?" in movies.index
如果您想忽略错误并继续前进,可以使用以下方法
movies.query("title in ('Avatar','When is Avengers next Movie?')")
标题 | 预算 | 平均投票 | 投票数 |
---|---|---|---|
头像 | 237000000 | 7.2 | 11800 |
以上是 如何选择带有索引标签的数据子集? 的全部内容, 来源链接: utcz.com/z/326871.html