使用python提取数字的前2位数字

问题描述 投票:0回答:2

嗨,我有一个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

如何提取并转换为毫秒。

python-2.7 pandas numpy
2个回答
2
投票

我会省去很多麻烦,并使用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)。字符串和格式都必须是字符串。


1
投票

您可能不想在strint中来回更改它们。首先使用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是从数字中得到的毫秒数

© www.soinside.com 2019 - 2024. All rights reserved.