将熊猫中的毫秒设置为小时,最多24小时

时间:2018-11-29 18:41:08

标签: python pandas datetime timestamp time-series

我有以下DataFrame总结了我在数据集中遇到的不同情况:

import pandas as pd
import numpy as np

df = pd.DataFrame({'date': [20120302, 20141017, 20150215], 
                   'time': [764, 17002, 110000517]}, dtype=np.uint64)

我在df.time列中看到的数字类似于单位,随着一天的增加而增加,240000000附近(例如,最后一项可能是{{1} }。如您所料,它们总共长达24小时(一天)。

我想将这两列合并成一个235959281格式的date_time列,以便我可以对熊猫进行进一步分析。

问题:

我可以加入它们(即将它们转换为str),但是我没有得到想要的确切日期时间格式。加入他们后,我得到了这些值,例如:

datetime64[ns]

我想得到:

20120302764
2014101717002
20150215110000517

在我这端:

  • 尝试直接使用2012-03-02 00:00:00.764 2014-10-17 00:00:17.002 2015-02-15 11:00:00.517 进行转换失败,甚至提供了pd.to_datetime()格式。

  • 我可以将'%Y-%m-%d %H:%M:%S.%f'对象与timedelta64[ns]结合起来形成最后一列。但是,使用timedelta转换的单位不会给出真实的小时,分​​钟,秒和毫秒。

问题是:?¿我如何才能从这些“单位状”数量中获取时,分,秒和毫秒,然后将其加入到日期列中以形成表格完整的date_time?

2 个答案:

答案 0 :(得分:1)

我将全部转换为字符串,就您所做的而言,在时间列上使用zfill(9),以便它们都具有9位数字和缺失的零,并将其全部连接在一起(日期和时间),并以适当的格式使用pd.to_datetime

df['datetime'] = pd.to_datetime(df.date.astype(str) + df.time.astype(str).str.zfill(9),
                                format='%Y%m%d%H%M%S%f')

>>> df
       date       time                datetime
0  20120302        764 2012-03-02 00:00:00.764
1  20141017      17002 2014-10-17 00:00:17.002
2  20150215  110000517 2015-02-15 11:00:00.517

答案 1 :(得分:1)

NVL (ACTUAL.POWER, -9)

您尝试进行操作时遇到的问题是,import pandas as pd import numpy as np df = pd.DataFrame({'date': [20120302, 20141017, 20150215], 'time': [764, 17002, 110000517]}, dtype=np.uint64) df['date'] = pd.to_datetime(df['date'], format='%Y%m%d') df['combined'] = df['date'] + pd.to_timedelta(df['time'], unit='ms') print(df.head()) 应该反映出现有数据的格式。您需要告诉format如何阅读pandas。然后,只是告诉20120302to_timedelta中的时间单位并将其添加到datetime列中。