猿问

通过整数索引选择一行熊猫系列/数据框

我很好奇,为什么df[2]不支持,而df.ix[2]与df[2:3]这两个工作。


In [26]: df.ix[2]

Out[26]: 

A    1.027680

B    1.514210

C   -1.466963

D   -0.162339

Name: 2000-01-03 00:00:00


In [27]: df[2:3]

Out[27]: 

                  A        B         C         D

2000-01-03  1.02768  1.51421 -1.466963 -0.162339

我希望df[2]以df[2:3]与Python索引约定一致的方式进行工作。是否有设计原因不支持按单个整数索引行?


皈依舞
浏览 363回答 3
3回答

HUH函数

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。

慕桂英4014372

您可以看一下源代码。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)
随时随地看视频慕课网APP

相关分类

Python
我要回答