我在一秒钟内(从午夜开始)有一列timestamps
,其中包含34200.934549345, 34205.735545344
等纳秒精度,依此类推在DataFrame df
中。
这些timestamps
来自同一天2011-01-10
。
如何以DateTime64
numpy
格式转换这些秒以纳秒精度?
我想在df
2011-01-10 9:30:00.934549345
2011-01-10 9:30:05.735545344
我需要在问题的解决方案下执行与此example中相同的操作。
有可能吗?
答案 0 :(得分:5)
> df = pd.DataFrame({'seconds_since_midnight': [34200.934549345, 34205.735545344]})
> df['actual_date'] = (df.seconds_since_midnight * 1e9).astype('timedelta64[ns]') + pd.to_datetime('2011-01-10')
> df
seconds_since_midnight actual_date
0 34200.934549 2011-01-10 09:30:00.934549345
1 34205.735545 2011-01-10 09:30:05.735545344
[2 rows x 2 columns]
答案 1 :(得分:1)
我使用strptime()在给出一个小数秒的字符串时需要以微秒为单位显示几秒钟。由于没有定义小数位数,我必须处理所有可能性。我不得不使用Python 2.6.7,它需要strptime使用整数秒,并且不允许小数部分在字符串中。如果我有2.7.6版本,那么我可以使用该格式的%f部分。但是,我仍然需要确保秒的小数部分只有6位数。
import datetime DT
def mystrptime(self, val)
vals = val.split('.')
if len(vals) == 1:
dt = DT.datetime.strptime(val, '%Y-%m-%d %H%M%S')
else:
nofrag, frag = vals
length = len(frag)
if length > 6:
frag = frag[:5]
length = len(frag) # This resets length to 6, but is not really needed
while length < 6:
frag = frag + '0'
length += 1
nofrag_dt = DT.datetime.strptime(nofrag, '%Y-%m-%d %H%M%S')
dt = nofrag_dt.replace(microsecond=int(frag))
return dt
安装Python 2.7.6或更高版本后,可以按如下方式使用%f选项:
import datetime DT
def mystrptime(self, val)
vals = val.split('.')
if len(vals) > 1:
nofrag, frag = vals
frag = frag[:5] # This works even if frag is < 6 characters
val = '.'.join(nofrag, frag)
dt = DT.datetime.strptime(val, '%Y-%m-%d %H%M%S.%f')
return dt
答案 2 :(得分:0)
我能用datetime.strptime构造函数解析它,但是我必须修剪字符串上的最后3个字符:
>>> ds
'2011-01-10 9:30:00.934549345'
>>> datetime.datetime.strptime(ds[:-3], '%Y-%m-%d %H:%M:%S.%f')
datetime.datetime(2011, 1, 10, 9, 30, 0, 934549)
似乎允许的最终粒度级别为microseconds, which are one millionth of a second,根据定义,必须在六位数内:
>>> datetime.datetime(2011, 1, 10, 9, 30, 0, 934549345)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: microsecond must be in 0..999999
由于您有时间(以纳秒为单位),如果您想要转换为Python日期时间对象,您将不得不失去这种精确度,或者被迫创建自己的解决方法。