嗨,我有一个UTC格式的数字数组。格式为HH.MM.SS.MS,即小时分秒和毫秒。我想将整个数字转换为毫秒。所以我提取前两位数,如下所示
hh=int(str(x[1])[:2]) # returns 42 where hours and minutes mixed
# My data also start with non zero for example x=142826.00
# doing the same operation like above returns 14( It is perfect). So intention is when 04 extract only 4 and if it is 14 extract 14.
042826.00
042826.25
042826.50
042826.75
042827.00
042827.25
042827.50
042827.75
042828.00
042828.25
042828.50
042828.75
042829.00
042829.25
042829.50
042829.75
042830.00
042830.25
042830.50
042830.75
如何提取并转换为毫秒。
我会省去很多麻烦,并使用pandas.to_datetime
提供的漂亮的格式化选项。由于前导零,您的列显然是一个字符串。从那里,你很容易在任何你想要的单位获得时间,在这种情况下'ms'
你的字符串的格式是'%H%M%S.%f'
。我们将它转换为datetime
对象,它为您提供开始日期1900-01-01
。我们只是将其减去然后用np.timedelta64
将单位转换为ms
import pandas as pd
import numpy as np
df
number
0 042826.00
1 042826.25
2 042826.50
3 042826.75
4 042827.00
5 042827.25
6 042827.50
7 042827.75
(pd.to_datetime(df.number, format='%H%M%S.%f')
-pd.to_datetime('1900-01-01'))/np.timedelta64(1, 'ms')
#0 16106000.0
#1 16106250.0
#2 16106500.0
#3 16106750.0
#4 16107000.0
#5 16107250.0
#6 16107500.0
#7 16107750.0
#Name: number, dtype: float64
由于1900-01-01
的默认行为,最有可能使用日期time.strptime作为默认值
当无法推断出更准确的值时,用于填充任何缺失数据的默认值为(1900,1,1,0,0,0,0,1,-1)。字符串和格式都必须是字符串。
您可能不想在str
和int
中来回更改它们。首先使用Decimal/float
获得毫秒,然后使用int
转换其余部分:
numbers = {your array}
milisecond = 0
for number in numbers:
number = Decimal(number, '.3f')
millisecond += (number * 1000) % 1000
number = int(number)
millisecond += (number % 100) * 1000
number /= 100
millisecond += (number % 100) * 60 * 1000
number /= 100
millisecond += number * 60 * 60 * 1000
millisecond
是从数字中得到的毫秒数