将DateTime索引值转换为索引号

nov*_*aly 3 python datetime numpy dataframe pandas

如果我有一个具有日期时间索引的数据框,并且通过使用series.first_valid_index获得了第一个有效索引-它返回第一个非nan的日期时间,这是我要查找的内容:

有没有一种方法来获取datetime值所对应的索引号。例如,它返回2018-07-16,但我想知道那是数据帧的第18行吗?

如果不是,是否有一种方法可以计算从数据帧开头到该索引值的行?

use*_*203 5

TLDR:如果您需要一种将给定索引值(在本例中为aDatetimeIndex)映射为其等效整数的方法,则要求get_loc,如果您只是想从Series中找到整数索引,请argmax与基础numpy数组一起使用。

设定

np.random.seed(3483203)

df = pd.DataFrame(
    np.random.choice([0, np.nan], 5),
    index=pd.date_range(start='2018-01-01', freq='1D', periods=5)
)
Run Code Online (Sandbox Code Playgroud)

              0
2018-01-01  NaN
2018-01-02  NaN
2018-01-03  0.0
2018-01-04  NaN
2018-01-05  NaN
Run Code Online (Sandbox Code Playgroud)

使用pandas.Index.get_loc此处,这是为给定标签返回整数索引的常规函数​​:

>>> idx = df[0].first_valid_index()
>>> idx
Timestamp('2018-01-03 00:00:00', freq='D')
>>> df.index.get_loc(idx)
2
Run Code Online (Sandbox Code Playgroud)

如果您想完全避免查找datetime索引,则可以argmax在基础numpy数组上使用:

>>> np.argmax(~np.isnan(df[0].values))
2
Run Code Online (Sandbox Code Playgroud)

  • 是的,我试图使用 get_loc 但我的语法已关闭。这解决了问题。谢谢你! (2认同)