使用datetime对象重新索引pandas DataFrame

16

能否使用由日期时间对象组成的列重新索引pandas DataFrame

我有一个包含以下列的df DataFrame:

Int64Index: 19610 entries, 0 to 19609
Data columns:
cntr                  19610  non-null values  #int
datflt                19610  non-null values  #float
dtstamp               19610  non-null values  #datetime object
DOYtimestamp          19610  non-null values  #float
dtypes: int64(1), float64(2), object(1)

我可以使用以下代码轻松地沿着 DOYtimestamp 重新索引 dfdf.reindex(index=df.dtstamp)DOYtimestamp 具有以下值:

>>> df['DOYtimestamp'].values
    array([ 153.76252315,  153.76253472,  153.7625463 , ...,  153.98945602,
    153.98946759,  153.98947917])

但我想重新索引DataFrame,沿着由日期时间对象组成的dtstamp进行索引,以便我可以直接从索引中生成不同的时间戳。 dtstamp列的值看起来像:

 >>> df['dtstamp'].values
     array([2012-06-02 18:18:02, 2012-06-02 18:18:03, 2012-06-02 18:18:04, ...,
     2012-06-02 23:44:49, 2012-06-02 23:44:50, 2012-06-02 23:44:51], 
     dtype=object)

当我尝试沿着dtstamp重新索引df时,我会得到以下结果:
>>> df.reindex(index=df.dtstamp)
    TypeError: can't compare datetime.datetime to long

我不确定如何将索引设置为日期时间类型。有什么想法吗?

1个回答

28

听起来你不想进行索引重建。有点混乱的是,reindex并不是用于定义新索引;而是查找具有指定索引的行。因此,如果你有一个带有索引 [0, 1, 2] 的 DataFrame,则执行 reindex([2, 1, 0]) 将返回相反顺序的行。像 reindex([8, 9, 10]) 这样的操作并不会为行创建新索引;而是将返回一个带有 NaN 值的 DataFrame,因为没有索引为 8、9 或 10 的行。

看起来你只想保留相同的行,但为它们创建全新的索引。为此,你可以直接分配一个新索引给 index。所以尝试执行 df.index = df['dtstamp']


谢谢,这正是我所需要的。不知怎么的,我没有意识到我可以将其中一列分配给索引。 - BFTM
8
你可以使用 set_index 方法。 - Wes McKinney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接