人工智能训练师三级:loc[0]为什么不一定是第一行?

TIVIA人工智能训练师三级实操自测:用标签10、20的自拟表格区分pandas loc与iloc,附五条断言及预期KeyError检查。

发布:2026-11-13 · TIVIA

人工智能训练师三级数据处理练习中,表格左边显示的整数,不一定是行的位置。今天只分清一个问题:按标签取数据和按位置取数据。自拟表格只有两行,索引标签为10、20,score分别是80、90。

本例第一行的位置是0,但索引标签是10;第二行的位置是1,标签是20。pandas的loc按标签选择,iloc按从0开始的整数位置选择。即使标签本身也是整数,也不能把两者当成同一个含义。

同一行有位置,也有标签

整数位置索引标签score
01080
12090

frame.loc[10, "score"]按行标签10、列标签score取到80;frame.iloc[0, 0]按第一行、第一列的位置也取到80。它们在本例得到相同的数,但选择规则不同。

frame.loc[0]是在找标签0,不是在找第一行。这个表没有标签0,因此会抛出KeyError。想按位置取第一整行,可用frame.iloc[0];想按标签取标签10的整行,可用frame.loc[10]。

用五条断言核对选择规则

import pandas as pd
frame = pd.DataFrame({"score": [80, 90]}, index=[10, 20])
assert frame.loc[10, "score"] == 80
assert frame.iloc[0, 0] == 80
assert frame.iloc[1].name == 20
assert list(frame.index) == [10, 20]
missing_label = False
try:
    frame.loc[0]
except KeyError:
    missing_label = True
assert missing_label
print(frame)

样例在pandas 2.3.1执行通过,包含预期KeyError检查;需要安装pandas的Python环境。本例结果是代码行为验证,不是学员学习效果。

自拟填空:索引标签为10、20时,按位置取第一整行,填写frame.____[0]。本例填iloc。再说明为什么不能填loc:loc[0]查找的是本例不存在的标签0。

适用范围:本例是列名和行标签唯一的简单DataFrame,只示范标量及单行读取,不讨论重复标签、多层索引、切片边界或链式赋值。不能为了让loc[0]不报错就随意重置业务索引。实际任务应先核索引和列名,再选择合适的访问方式。

完成一个能解释的自测

今天的自测动作:对同一张表分别写出第一行的位置和标签,再读一个明确的单元格。若输出不符预期,先说清楚你要的是标签还是位置,而不是只换数字试到不报错。

本文由TIVIA产品方发布,AI辅助整理并执行自拟代码核验。TIVIA包含理论题学习与上机代码填空等学习内容。本文围绕产品实操中的标签访问作基础延伸,非原题照搬、官方真题或通过承诺,完整范围以实际产品说明为准。

查看实操体验范围 · 免费理论练习(固定样本未必含本文同题)。

技术参考:pandas官方索引与选择文档。

微信学习群二维码

扫码加入学习群

使用微信扫描上方二维码