在 df 列/时间序列中按索引 -1 选择会引发错误
Selecting by index -1 in a df column / time series throws error
假设我们有一个像这样的简单数据框:
df = pd.DataFrame({'col1':[1,2,3], 'col2':[10,20,30]})
然后我可以select这样的元素
df.col2[0]
或 df.col2[1]
但是如果我想 select 最后一个带有 df.col2[-1]
的元素,它会导致错误消息:
KeyError: -1
我知道有解决方法。例如,我可以做 df.col2[len(df)-1]
或 df.iloc[-1,1]
。但是为什么不允许使用 -1
直接索引的更简单版本呢?我是否可能错过了 -1
的另一种简单的 selection 方式?发送
你的DataFrame的索引标签是[0,1,2]。您的代码 df.col2[1]
相当于使用 loc 函数作为 df['col2'].loc[1]
(或 df.col2.loc[1]
)。您可以看到您的索引不包含标签“-1”(这就是您收到 KeyError 的原因)。
对于位置索引,你需要使用一个 iloc 函数(你可以在 Pandas 系列和 DataFrame 上使用它),所以你可以做 df['col2'].iloc[-1]
(或 df.col2.iloc[-1]
) .
如您所见,您可以同时使用基于标签的 ('col2') 和基于位置的 (-1) 索引,您不需要选择其中之一作为 df.iloc[-1,1]
或df.col2[len(df)-1]
(相当于 df.loc[lend(df)-1,'col2']
)
假设我们有一个像这样的简单数据框:
df = pd.DataFrame({'col1':[1,2,3], 'col2':[10,20,30]})
然后我可以select这样的元素
df.col2[0]
或 df.col2[1]
但是如果我想 select 最后一个带有 df.col2[-1]
的元素,它会导致错误消息:
KeyError: -1
我知道有解决方法。例如,我可以做 df.col2[len(df)-1]
或 df.iloc[-1,1]
。但是为什么不允许使用 -1
直接索引的更简单版本呢?我是否可能错过了 -1
的另一种简单的 selection 方式?发送
你的DataFrame的索引标签是[0,1,2]。您的代码 df.col2[1]
相当于使用 loc 函数作为 df['col2'].loc[1]
(或 df.col2.loc[1]
)。您可以看到您的索引不包含标签“-1”(这就是您收到 KeyError 的原因)。
对于位置索引,你需要使用一个 iloc 函数(你可以在 Pandas 系列和 DataFrame 上使用它),所以你可以做 df['col2'].iloc[-1]
(或 df.col2.iloc[-1]
) .
如您所见,您可以同时使用基于标签的 ('col2') 和基于位置的 (-1) 索引,您不需要选择其中之一作为 df.iloc[-1,1]
或df.col2[len(df)-1]
(相当于 df.loc[lend(df)-1,'col2']
)