提问人:BFTM 提问时间:6/8/2012 最后编辑:piRSquaredBFTM 更新时间:1/5/2017 访问量:15213
pandas 使用 datetime 对象重新索引 DataFrame
pandas reindex DataFrame with datetime objects
问:
是否可以使用由 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)
我可以轻松地重新索引: 并具有以下值:df
DOYtimestamp
df.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
我只是不确定我需要做什么才能使索引为日期时间类型。有什么想法吗?
答:
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
评论