【问题标题】:pandas reindex DataFrame with datetime objectspandas 使用日期时间对象重新索引 DataFrame
【发布时间】:2012-06-08 05:24:57
【问题描述】:

是否可以使用由 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)

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

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

但我想沿着由 datetime 对象组成的 dtstamp 重新索引 DataFrame,以便我直接从索引生成不同的时间戳。 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)

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

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

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

【问题讨论】:

    标签: python dataframe pandas reindex


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这正是我所需要的。不知何故,我不清楚是否可以将其中一列分配给索引。
    • 也可以使用set_index方法
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2017-04-15
    • 2012-05-14
    • 2017-11-16
    • 2014-06-05
    • 2017-12-22
    • 2019-06-22
    • 2015-07-02
    相关资源
    最近更新 更多