关于pandas中cars.iloc三种索引写法的差异及输出疑问
关于pandas iloc索引输出差异的解答
嘿,这个问题其实是pandas里iloc的维度保留规则在起作用,我给你拆解得明明白白的:
首先得搞懂iloc的核心逻辑:它是基于整数位置的索引工具,返回什么类型的对象,完全取决于你用的索引参数形式——是单个整数,还是列表/数组/切片。
逐个分析你的三条命令:
命令:
cars.iloc[[3, 0]]
这里你给的行索引是列表形式([3, 0]),没有指定列参数(默认取所有列)。pandas有个规则:只要行或列的索引是「列表/数组」形式,就会尽量保留二维的DataFrame结构——哪怕你只取一行(比如cars.iloc[[3]]),返回的也是DataFrame。所以你看到的输出是包含两行所有列的完整DataFrame,类型自然是DataFrame。命令:
cars.iloc[[3],[0]]
这次行和列都用了列表索引(行[3]、列[0]),同样触发了“保留二维结构”的规则,所以返回的是一个只有一行一列的DataFrame,和你看到的带表头、索引的输出一致。命令:
cars.iloc[3, 0]
这里的行和列参数都是单个整数(不是列表),pandas会判断你要的是某个具体单元格里的数值,直接返回这个标量值(也就是单个数据18),不会保留任何二维/一维的结构——这就是它和第1条命令输出差异的核心原因:维度被降维了。
总结一下iloc的返回类型规则:
- 行和列都用单个整数:返回标量(scalar),比如你的第3条命令
- 其中一个参数是单个整数,另一个是列表/数组/切片:返回Series(一维结构)
- 行和列都用列表/数组/切片:返回DataFrame(二维结构)
这样是不是就清晰多啦?
内容的提问来源于stack exchange,提问作者sra7687
相关产品推荐
相关产品推荐

