如何将日期时间对象转换为毫秒

Posted

技术标签:

【中文标题】如何将日期时间对象转换为毫秒【英文标题】:How to convert datetime object to milliseconds 【发布时间】:2016-02-02 08:03:08 【问题描述】:

我正在按如下方式解析日期时间值:

df['actualDateTime'] = pd.to_datetime(df['actualDateTime'])

如何将此日期时间对象转换为毫秒?

我在doc of to_datetime 中没有看到毫秒。

更新(基于反馈): 这是提供错误TypeError: Cannot convert input to Timestamp 的代码的当前版本。 Date3 列必须包含毫秒(作为日期时间对象的等效数字)。

import pandas as pd
import time

s1 = 'Date' : ['2015-10-20T07:21:00.000','2015-10-19T07:18:00.000','2015-10-19T07:15:00.000']

df = pd.DataFrame(s1)

df['Date2'] = pd.to_datetime(df['Date'])

t = pd.Timestamp(df['Date2'])

df['Date3'] = time.mktime(t.timetuple())

print df

【问题讨论】:

粘贴一些数据df['actualDateTime'] 如果满意就接受rai的回答! meta.stackexchange.com/questions/43478/… "to_datetime 的文档,但是没有提到毫秒" 是完全不正确的,甚至back in 0.17 doc 它说“格式:strftime 来解析时间,例如“%d/%m/%Y”,请注意“%f”将一直解析到纳秒。" 而 pandas strftime 文档页面将您参考 Python datetime for更多细节。 【参考方案1】:

你可以试试pd.to_datetime(df['actualDateTime'], unit='ms')

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html

表示这将在 epoch 中表示,变化形式为 's'、'ms'、'ns' ...

更新

如果你想要 14567899 形式的纪元时间戳..

import pandas as pd
import time
t = pd.Timestamp('2015-10-19 07:22:00')
time.mktime(t.timetuple())

>> 1445219520.0

最新更新

df = pd.DataFrame(s1)
df1 = pd.to_datetime(df['Date'])
pd.DatetimeIndex(df1)
>>>DatetimeIndex(['2015-10-20 07:21:00', '2015-10-19 07:18:00',
           '2015-10-19 07:15:00'],
          dtype='datetime64[ns]', freq=None)
df1.astype(np.int64) 
>>>0    1445325660000000000
1    1445239080000000000
2    1445238900000000000
df1.astype(np.int64) // 10**9
>>>0    1445325660
1    1445239080
2    1445238900
Name: Date, dtype: int64

【讨论】:

如果我这样做,我看不到任何效果。结果还是2015-10-19 10:39:00 是自纪元以来所需的 o/p 毫秒,类似于 146887891 ? 是的。但是,如果我这样复制您的代码: df['actualDateTime'] = pd.to_datetime(df['actualDateTime']) t = pd.Timestamp(df['actualDateTime']) df['actualDateTime'] = time.mktime (t.timetuple()) 它说:TypeError: Cannot convert input to Timestamp 查看我的更新。我用我的示例数据发布了您的代码,以便您可以看到错误。 导入numpy;而且也不需要 DatetimeIndex;语句 1、2 和 5 就足够了【参考方案2】:

pandas 中的时间戳为always in nanoseconds。

这为您提供了自纪元 (1970-01-01) 以来的毫秒数:

df['actualDateTime'] = df['actualDateTime'].astype(np.int64) / int(1e6)

【讨论】:

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [int32] @KlausosKlausos 这是一个 Windows(或 32 位操作系统)问题。更新为int64【参考方案3】:

这将返回从纪元开始的毫秒数

timestamp_object.timestamp() * 1000

【讨论】:

pandas.pydata.org/pandas-docs/stable/reference/api/…【参考方案4】:

pandas.to_datetime是将字符串或其他一些数据类型转换为pandas datetime[ns]

在您的实例中,初始 'actualDateTime' 没有 milliseconds。因此,如果您正在解析具有毫秒数的列,您将获得数据。

例如,

df
Out[60]: 
                         a  b
0  2015-11-02 18:04:32.926  0
1  2015-11-02 18:04:32.928  1
2  2015-11-02 18:04:32.927  2

df.a
Out[61]: 
0    2015-11-02 18:04:32.926
1    2015-11-02 18:04:32.928
2    2015-11-02 18:04:32.927
Name: a, dtype: object

df.a = pd.to_datetime(df.a)

df.a
Out[63]: 
0   2015-11-02 18:04:32.926
1   2015-11-02 18:04:32.928
2   2015-11-02 18:04:32.927
Name: a, dtype: datetime64[ns]

df.a.dt.nanosecond
Out[64]: 
0    0
1    0
2    0
dtype: int64

df.a.dt.microsecond
Out[65]: 
0    926000
1    928000
2    927000
dtype: int64

【讨论】:

是的,我没有毫秒数。但是我认为可以进行这样的转换。那么,要获得秒数,我应该使用 df.a.dt.second 吗?我试过了,但它似乎不起作用。 你的意思是你想要milliseconds而不是microseconds 对,我需要毫秒。另外,我有 2015-11-02 18:04,而不是 015-11-02 18:04:32.926 如果解决了您的问题,请接受@WoodChopper 的回答。 没有解决问题。如果我运行 df['actualDateTime'].dt.microsecond,我会在所有记录中得到 0。【参考方案5】:

为了它的价值,要将单个 Pandas 时间戳对象 转换为 毫秒,我必须这样做:

import time
time.mktime(<timestamp_object>.timetuple())*1000

【讨论】:

【参考方案6】:
from datetime import datetime

print datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]

>>>> OUTPUT >>>>
2015-11-02 18:04:32.926

【讨论】:

它说:strftime() 参数 1 必须是字符串或只读缓冲区,而不是 Series 我发布了示例数据。 我也试过 thisdf['actualDateTime'] = (df['actualDateTime']-datetime(1970,1,1)).total_seconds() 但它说'Series'对象没有属性'total_seconds' 您的日期时间数据值存储在 df 变量中。 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。

以上是关于如何将日期时间对象转换为毫秒的主要内容,如果未能解决你的问题,请参考以下文章

Python麻烦将毫秒转换为日期时间并返回

JavaScript 之日起对象(转)

怎么将long类型转换成date

vue.js怎样将时间戳转化为日期格式

javascript基础学习

如何通过javascript将日期转换为毫秒? [复制]