Могу ли я изменить строковые данные в кадре данных на дату и время в определенном формате? - PullRequest
0 голосов
/ 05 июля 2019

Я хочу изменить строковые данные в кадре данных на данные даты и времени но это не работает например, у меня есть данные dataframe здесь

TotTime
D1 12:24:13.88
D1 12:24:14.88
D1 12:24:15.88
D1 12:24:16.88
D1 12:24:17.88

и я хочу изменить эти данные в дату и время для расчета Как я могу?

Я пробовал, как показано ниже

df.StepTime = pd.to_datetime(df.StepTime)

dfn['totTime'] = dfn.totTime.apply(lambda totTime: datetime.strptime(totTime, 'D%d %H:%M:%S'))

dfn['totTime'] = dfn.totTime.apply(lambda totTime: parse(totTime))

но это не сработало

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Попробуйте использовать .astype() с типом данных datetime64.

df['totTime'] = df['totTime'].astype('datetime64[ns]')
0 голосов
/ 05 июля 2019

Полагаю, вам, вероятно, не нужен тип datetime, а вместо этого тип timedelta.

Тип datetime предназначен для точной точки даты и времени.

timedelta для периодов времени сразной длины.

Я сделал свое предположение на основе имени 'TotTime' в вашем коде.

Вы можете создать тип timedelta из вашей строки с помощью следующего кода:

def get_days(_str):
  return int(_str[1:]) # assume first simbol is 'D' and others is number of days

def get_mss(_str): #assume format is 15.88
  s_ms = _str.split('.')
  s = int(s_ms[0])
  ms = int(s_ms[1]) * 10 # 0.88 is 880 milliseconds, not 88
  return s, ms

def get_seconds(_str): # assume format is 12:24:15.88
  hms = _str.split(':')
  h = int(hms[0])
  m = int(hms[1])
  s, ms = get_mss(hms[2])
  return h, m, s, ms

def str_to_td(_str):
  dt1 = _str.split(' ')
  days = get_days(dt1[0])
  h, m, s, ms = get_seconds(dt1[1])
  return datetime.timedelta(days = days, hours = h, minutes = m, seconds = seconds, milliseconds = ms)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...