15

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)

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

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

但我想重新索引由 datetime 对象组成的 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)

当我尝试重新索引df时,dtstamp我得到以下信息:

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

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

4

1 回答 1

27

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

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

于 2012-06-08T05:34:25.010 回答