如何从时间戳索引的数据帧中获取值

时间:2018-04-26 14:09:56

标签: python pandas

我正在构建DataFrame,如此:

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

我想得到一个像这样的值:

d[d.index[0]]['a']

但是我收到以下错误:

KeyError: Timestamp('2018-04-26 16:08:16.120031')

怎么回事?

4 个答案:

答案 0 :(得分:2)

如果您要尝试从#39; a'中获取第一个元素,则可以像这样访问它:

d.loc[d.index[0], 'a']

您现在的写作方式,d[d.index[0]]正在尝试获取名称为d.index[0]

答案 1 :(得分:1)

这取决于你想做什么。

如果您只想要第一行,可以使用iloc访问它,请执行以下操作:

d.iloc[0]['a']

如果您希望按年度过滤数据框,则可以执行以下操作:

d.loc[d.index.year == 2018, 'a']

答案 2 :(得分:0)

d['a'][d.index[0]]

我的困惑来自这样一个事实:DataFrame是第一列,而不是第一行,就像人们对一般多维数据结构所期望的那样。因此,为了获得价值,必须切换指数。

dataFrame[coumn][row]

感谢@Michael提示。

答案 3 :(得分:0)

首先,您必须始终了解要处理的数据类型,在这种情况下,您需要创建一个DatetimeIndex:

DatetimeIndex(['2020-08-25 11:00:00.000307403',
               '2020-08-25 11:00:00.000558638',
               '2020-08-25 11:00:00.002280412',
               '2020-08-25 11:00:00.002440933'])
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

在DatetimeIndex内,它的每个元素都是一个时间戳:

2020-08-25 11:00:00.000307403
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

使用DatetimeIndexes时,必须按实际时间戳记('2020-08-25 11:00:00.000307403')而不是完整的timestamp变量(Timestamp('2020-08-25 11:00:00.000307403'))

所以,不要这样做:

df[Timestamp('2020-08-25 11:00:00.000307403')]

您应该这样做:

df['2020-08-25 11:00:00.000307403']

我花了两个小时才发现此错误,因为在变量中包含数据类型有点愚蠢,解决此问题的最简单方法就是将DatetimeIndex解析为字符串。

为您提供解决方案:

d[str(d.index[0]),'a']

应该工作