Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在df列/时间序列中按索引-1选择会引发错误_Python_Pandas_Dataframe_Indexing_Numpy Slicing - Fatal编程技术网

Python 在df列/时间序列中按索引-1选择会引发错误

Python 在df列/时间序列中按索引-1选择会引发错误,python,pandas,dataframe,indexing,numpy-slicing,Python,Pandas,Dataframe,Indexing,Numpy Slicing,假设我们有一个简单的数据帧,如下所示: df = pd.DataFrame({'col1':[1,2,3], 'col2':[10,20,30]}) 然后我可以选择这样的元素 df.col2[0]或df.col2[1] 但是如果我想用df.col2[-1]选择最后一个元素,它会导致错误消息: KeyError: -1 我知道有解决办法。例如,我可以执行df.col2[len(df)-1]或df.iloc[-1,1]。但是为什么不允许通过-1直接编制简单得多的索引呢?我是否错过了-1的另一种简

假设我们有一个简单的数据帧,如下所示:

df = pd.DataFrame({'col1':[1,2,3], 'col2':[10,20,30]})
然后我可以选择这样的元素

df.col2[0]
df.col2[1]

但是如果我想用
df.col2[-1]
选择最后一个元素,它会导致错误消息:

KeyError: -1

我知道有解决办法。例如,我可以执行
df.col2[len(df)-1]
df.iloc[-1,1]
。但是为什么不允许通过
-1
直接编制简单得多的索引呢?我是否错过了
-1
的另一种简单选择方式?Tnx

数据帧的索引标签是[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']

数据帧的索引标签是[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']

当使用Python列表时,
myu列表[-1]
访问最后一项。然而,
df.col2
不是Python列表,而是熊猫系列。如果您想访问最后一个项目,可以先将其转换为列表,然后通过[-1]或其他方式访问它,如回复@R.dV谢谢,这会有一点帮助!但是你知道让
df.col2[1]
成为可能,而不是
df.col2[-1]
的动机是什么吗。一些编程范例?或者关于python的工作方式?还有更深层次的含义吗?列表是Python固有的,Pandas和它的所有特性都不是。我想熊猫背后的开发者们是有原因的,但我只能猜测这是什么。但据我所知,熊猫系列不是一个列表,而是一本字典,所以它使用键。列表[1]访问索引1处的项,而序列[1]访问键1处的项,这是一个细微的区别。dm2的回答对此进行了更详细的解释。当使用Python列表时,
my_list[-1]
访问最后一项。然而,
df.col2
不是Python列表,而是熊猫系列。如果您想访问最后一个项目,可以先将其转换为列表,然后通过[-1]或其他方式访问它,如回复@R.dV谢谢,这会有一点帮助!但是你知道让
df.col2[1]
成为可能,而不是
df.col2[-1]
的动机是什么吗。一些编程范例?或者关于python的工作方式?还有更深层次的含义吗?列表是Python固有的,Pandas和它的所有特性都不是。我想熊猫背后的开发者们是有原因的,但我只能猜测这是什么。但据我所知,熊猫系列不是一个列表,而是一本字典,所以它使用键。列表[1]访问索引1处的项,而序列[1]访问键1处的项,这是一个细微的区别。dm2的回答更详细地解释了这一点。谢谢,很高兴知道所有的替代方案和切片!但是你知道让
df.col2[1]
成为可能,而不是
df.col2[-1]
的动机是什么吗。一些编程范例?或者关于python的工作方式?还有更深层次的含义吗?好吧,这只是因为熊猫的
df[col][index]
等同于标签索引(即
df.loc[index\u label,column\u label]
,并且您不能使用不存在的标签(因此,如果您的数据帧有一个标记为-1的行,您可以使用df.col2[-1]来获取该行),对于位置索引,您需要指定使用
.iloc
。我想熊猫优先使用基于标签的索引,而不是位置索引。由于列表和numpy数组的行和列都没有附加标签,因此位置索引是它们的默认值。(新注释更正.loc到.iloc)谢谢,知道所有的替代方案和切片很好!但是你知道让
df.col2[1]
成为可能的动机是什么吗,而不是
df.col2[-1]
。一些编程范例?或者一些关于python应该工作的方式的东西?有什么更深层的意义吗?好吧,这就是熊猫
df[col][index]
相当于标签索引(即,
df.loc[index\u label,column\u label]
并且您不能使用不存在的标签(因此,如果您的数据帧有一个标记为-1的行,您可以使用df.col2[-1]来获取该行),对于位置索引,您需要指定使用
.iloc
。我想熊猫优先使用基于标签的索引,而不是位置索引。由于列表和numpy数组的行和列都没有附加标签,因此位置索引是它们的默认值。(新注释更正.loc到.iloc)