pandas 使用 datetime 对象重新索引 DataFrame

pandas reindex DataFrame with datetime objects

提问人:BFTM 提问时间:6/8/2012 最后编辑:piRSquaredBFTM 更新时间:1/5/2017 访问量:15213

问:

是否可以使用由 datetime 对象组成的列重新索引 pandas?DataFrame

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

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)

我可以轻松地重新索引: 并具有以下值:dfDOYtimestampdf.reindex(index=df.dtstamp)DOYtimestamp

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

但我想重新索引由 datetime 对象组成的 DataFrame,以便直接从索引生成不同的时间戳。该列的值如下所示:dtstampdtstamp

 >>> 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)

当我尝试重新索引时,我得到以下内容:dfdtstamp

>>> df.reindex(index=df.dtstamp)
    TypeError: can't compare datetime.datetime to long

我只是不确定我需要做什么才能使索引为日期时间类型。有什么想法吗?

Python DataFrame 熊猫 重新索引

评论


答:

28赞 BrenBarn 6/8/2012 #1

听起来你不想重新索引。有点令人困惑的是,确切地说,不是为了定义新索引;相反,它会查找具有指定索引的行。因此,如果您有一个带有索引的 DataFrame,那么执行 将以相反的顺序返回行。执行类似操作不会为行创建新索引;相反,它将返回一个带有值的 DataFrame,因为没有索引为 8、9 或 10 的行。reindex[0, 1, 2]reindex([2, 1, 0])reindex([8, 9, 10])NaN

似乎您想要的只是保留相同的行,但为它们创建一个全新的索引。为此,您可以直接分配给索引。所以试着做.df.index = df['dtstamp']

评论

0赞 BFTM 6/8/2012
谢谢,这正是我需要的。不知何故,我不清楚我是否可以将其中一列分配给索引。
8赞 Wes McKinney 6/13/2012
您也可以使用该方法set_index