3 回答

TA贡献1836条经验 获得超4个赞
DataFrame索引运算符的主要目的[]是选择列。
当索引运算符传递字符串或整数时,它将尝试查找具有该特定名称的列并将其作为Series返回。
因此,在上述问题中:df[2]搜索与整数值匹配的列名2。该列不存在,并且KeyError引发a。
使用切片符号时,DataFrame索引运算符完全更改行为以选择行
奇怪的是,当给定切片时,DataFrame索引运算符会选择行,并可以通过整数位置或通过索引标签来选择行。
df[2:3]
这将从整数位置为2的行开始切为3,最后一个元素除外。因此,只需一行。下面的代码选择从整数位置6开始的行,直到每第三行不包括20的行。
df[6:20:3]
如果DataFrame索引中包含字符串,则还可以使用由字符串标签组成的切片。有关更多详细信息,请参见.iloc与.loc上的此解决方案。
我几乎从未将这种切片符号与索引运算符一起使用,因为它不是显式的,而且几乎从未使用过。按行切片时,请坚持使用.loc/.iloc。

TA贡献1871条经验 获得超13个赞
您可以看一下源代码。
DataFrame具有对_slice()进行切片的私有函数DataFrame,并且它允许参数axis确定要切片的轴。将__getitem__()用于DataFrame在调用不设置轴_slice()。因此_slice(),默认情况下将其切片为轴0。
您可以进行一个简单的实验,这可能对您有所帮助:
print df._slice(slice(0, 2))
print df._slice(slice(0, 2), 0)
print df._slice(slice(0, 2), 1)
添加回答
举报