在pandas DataFrame中查找对应时间戳的行

1 投票
1 回答
11214 浏览
提问于 2025-04-18 06:40

我想在一个pandas数据表中找到与某个时间戳对应的行号。我觉得我现在的方法结果有点模糊,没法选中正确的行:

idx = pd.DatetimeIndex(freq='d', start='1979-01-01', end='2015-12-30')
df = pd.DataFrame(data=randint(-10, high=20, size=(len(idx),2)), index=idx)
row = abs(df.sum(axis=1)- df.ix['2014-05-30'].sum(axis=1)).values.argmin()

当我检查我的结果时,我得到了77这个行号,结果是:

df.ix[row]

0    14
1     9
Name: 1979-03-19 00:00:00, dtype: int32

但这并不是正确的日期,应该是'2014-05-30'。

有没有更通用的方法可以用来处理pandas中的时间戳呢?

1 个回答

5
In [12]: np.random.seed(1234)

In [13]: df = pd.DataFrame(data=randint(-10, high=20, size=(len(idx),2)), index=idx)

如果你真的想要行号

In [14]: df.index.get_loc('2014-05-30')
Out[14]: array([12933])

In [15]: df.iloc[12933]
Out[15]: 
0    18
1     8
Name: 2014-05-30 00:00:00, dtype: int64

这是部分字符串索引,具体可以参考这里:http://pandas-docs.github.io/pandas-docs-travis/timeseries.html#datetimeindex-partial-string-indexing;在这种情况下,它和你指定 df.loc[Timestamp('2014-05-30')] 是一样的,因为这是一个精确匹配(例如,你有每日的频率)

In [16]: df.loc['2014-05-30']
Out[16]: 
0    18
1     8
Name: 2014-05-30 00:00:00, dtype: int64

撰写回答