如何将numpy和pandas的日期时间对象转换为数值?

3

使用时间戳和日期时间并不总是方便的,有些程序需要简单的数字输入。当 pandas 的时间戳被收集到 pandas.Series 中时,可以轻松地将它们转换为数字值,然后再转换回来。

import pandas as pd
from pandas import Timestamp

age = [30, 31, 31]
date = [Timestamp('2001-02-10 00:01:00'),
 Timestamp('2001-11-12 00:01:00'),
 Timestamp('2002-02-27 00:01:00')]

df = pd.DataFrame({'age': age, 'date': date})

pd.to_numeric(df.date)
0     981763260000000000
1    1005523260000000000
2    1014768060000000000

虽然将单个的pandas或numpy日期时间对象或时间差转换为数字并不是这样处理的。

pd.to_numeric(Timestamp('2001-02-10 00:01:00'))
pd.to_numeric([Timestamp('2001-02-10 00:01:00')])
pd.to_numeric([numpy.datetime64('2001-02-10T00:01:00.000000000')])
pd.to_numeric([pd.Timedelta('365 days')])
# all give:
#> TypeError: Invalid object type at position 0

如何将这些类型转换为数值类型?


@jpp:我不想生成一个Series或DataFrame来将Datetime转换为数值。前两个问题涉及到Series和DataFrames。第三个问题是关于datetime、Timestamp和datetime64之间的转换,实际上与数值没有任何关系。最后一个问题有点接近我所寻找的,但也非常具体。因此,我认为这不是一个重复的问题。 - Soren
3个回答

1

只需使用时间戳tsts.value属性:

ts = Timestamp('2001-02-10 00:01:00')
print(ts.value)
#981763260000000000

0

将时间差转换为数字:

x = pd.Timedelta('365 days')
x
#Timedelta('365 days 00:00:00')

type(x)
#pandas._libs.tslibs.timedeltas.Timedelta

y = x / np.timedelta64(1, 'D')
y
#365.0

type(y)
#float

0

尝试使用pandas.Timestamp类的方法:

>>> Timestamp('2001-02-10 00:01:00').timestamp()
981763260.0

1
.timestamp() 的返回值与 pd.to_numeric() 不一致。 - DYZ

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