You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从时间戳索引的DataFrame取值?为何出现KeyError报错

为什么用d[d.index[0]]['a']会报KeyError?

咱们先拆解下你写的代码逻辑和问题出在哪:

首先看你构造的DataFrame:

import datetime
import pandas as pd

dates = [datetime.datetime.today() + datetime.timedelta(days=x) for x in range(0, 2)]
d = pd.DataFrame([[1,2],[3,4]], index = dates, columns = ['a', 'b'])

这个DataFrame的结构是用日期做行索引,列名是'a'和'b'。

错误原因

你写的d[d.index[0]]这里犯了一个常见的索引误区:在Pandas的DataFrame中,直接用方括号[]默认是按列名来索引的,而你传入的d.index[0]是一个Timestamp类型的行索引值,你的DataFrame里根本没有叫这个Timestamp的列,所以自然会抛出KeyError。

正确的取值方式

给你几种靠谱的写法:

  1. 最推荐:用.loc做标签索引
    .loc是Pandas专门用于按标签(行索引名、列名)取值的方法,语法清晰不容易出错:
d.loc[d.index[0], 'a']

这里第一个参数是行标签(你的日期索引),第二个参数是列名,直接就能拿到对应的值。

  1. 用.iloc按位置索引
    如果你只关心行的位置(比如第一行),可以用.iloc按整数位置来取:
d.iloc[0]['a']

.iloc[0]取到第一行的Series,再通过['a']拿到对应列的值。

  1. 布尔索引(稍繁琐,不推荐)
    也可以通过布尔条件筛选出目标行,再取值:
d[d.index == d.index[0]]['a'].values[0]

不过这种写法需要额外提取values,不如前两种简洁直观。

总结一下:DataFrame的[]默认是列索引,要按行索引取值的话,一定要用.loc(标签)或者.iloc(位置)这类专门的索引方法哦~

内容的提问来源于stack exchange,提问作者Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:51