Извлечение первых 2 цифр числа с помощью Python - PullRequest
0 голосов
/ 09 мая 2018

Привет, у меня есть массив чисел в формате UTC. Формат HH.MM.SS.MS, т.е. часы, минуты, секунды и миллисекунды. Я хочу преобразовать все число в миллисекунды. Итак, я извлекаю первые 2 цифры, как показано ниже

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 голосов
/ 09 мая 2018

Я бы избавил себя от лишних хлопот и поработал с удобными опциями форматирования, уже предоставленными pandas.to_datetime.Ваш столбец явно является строкой из-за ведущих нулей.Оттуда очень легко получить время в любой единице, которую вы хотите, в этом случае 'ms'

Формат вашей строки '%H%M%S.%f'.Мы преобразуем это в datetime объект, который дает вам начальную дату 1900-01-01.Мы просто вычитаем это, а затем преобразуем единицы в мс с помощью np.timedelta64

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).И строка, и формат должны быть строками.

0 голосов
/ 09 мая 2018

Вы, вероятно, не хотите менять их назад и вперед в 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 - это миллисекунды, которые вы получаете от числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...