请考虑以下代码:
my_series = pd.Series(np.arange(3)) my_series[-1]
字符串上面的代码片段在尝试检索值时生成Key Error。但是,当我们在创建pandas系列时指定自定义索引时,就会生成所需的输出。就像下面的代码:
Key Error
my_series2 = pd.Series(np.arange(3), index = ['a', 'b', 'c']) my_series2[-1]
型我想知道为什么两者之间会有微妙的差异?
laik7k3q1#
我相信,当你使用默认索引时,调用my_series[-1]只是试图寻找index value-1,它不存在,因此KeyError。如果你有切片,例如。my_series[1:-1],pandas会把它解释为像正常列表一样寻找索引,这样就没问题了。一旦将索引更改为字母,pandas就会将单个索引视为索引值(如果使用字符串)或位置值(如果使用数字)。一般来说,当您想要使用数字索引时,建议使用.iloc(即位置索引)和.loc(当您想使用非数字索引时)。当使用默认索引时,如果你想看到典型的python功能,请坚持使用.iloc,因为.loc在切片时包含最后一个值(参见这里的解释)。同样的问题被问到here,但没有被接受的答案。他们说这是一个不一致的地方,部分原因是当只使用[]时,很难分辨出你想要的是索引值还是位置值。这就是为什么最好使用.iloc和.loc,这样您的意图就很清楚了。
my_series[-1]
-1
KeyError
my_series[1:-1]
.iloc
.loc
[]
3mpgtkmj2#
第一个案子。创建系列时,使用RangeIndex。RangeIndex没有反向索引,只有单调整数范围。第二种情况使用Index(a,B,c)。你会得到很多方法和机会,你可以使用反向索引。你可以在这里阅读更多:RangeIndex Index
2条答案
按热度按时间laik7k3q1#
我相信,当你使用默认索引时,调用
my_series[-1]
只是试图寻找index value-1
,它不存在,因此KeyError
。如果你有切片,例如。my_series[1:-1]
,pandas会把它解释为像正常列表一样寻找索引,这样就没问题了。一旦将索引更改为字母,pandas就会将单个索引视为索引值(如果使用字符串)或位置值(如果使用数字)。
一般来说,当您想要使用数字索引时,建议使用
.iloc
(即位置索引)和.loc
(当您想使用非数字索引时)。当使用默认索引时,如果你想看到典型的python功能,请坚持使用.iloc
,因为.loc
在切片时包含最后一个值(参见这里的解释)。同样的问题被问到here,但没有被接受的答案。他们说这是一个不一致的地方,部分原因是当只使用
[]
时,很难分辨出你想要的是索引值还是位置值。这就是为什么最好使用.iloc
和.loc
,这样您的意图就很清楚了。3mpgtkmj2#
第一个案子。创建系列时,使用RangeIndex。RangeIndex没有反向索引,只有单调整数范围。第二种情况使用Index(a,B,c)。你会得到很多方法和机会,你可以使用反向索引。你可以在这里阅读更多:RangeIndex Index