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

时间:2018-05-09 12:15:43

标签: python-2.7 pandas numpy

您好我有一个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

如何提取并转换为毫秒。

2 个答案:

答案 0 :(得分:2)

我会省去很多麻烦,并使用'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

的默认行为,日期if-else最有可能被用作默认值
  

当无法推断出更准确的值时,用于填充任何缺失数据的默认值为(1900,1,1,0,0,0,0,1,-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是从数字

获得的毫秒数