我有以下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?
答案 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
。然后,只是告诉20120302
在to_timedelta
中的时间单位并将其添加到datetime列中。