Как поиграться с форматом даты JSON? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть набор данных даты JSON, и я пытаюсь вычислить разницу во времени между двумя разными датами JSON DateTime.

Например:

'2015-01-28T21:41:38.508275' - '2015-01-28T21:41:34.921589'

Пожалуйста, посмотрите на код Python ниже:

#let's say 'time' is my data frame and JSON formatted time values are under the 'due_date' column
time_spent = time.iloc[2]['due_date'] - time.iloc[10]['due_date']

Это не работает. Я также пытался привести каждый операнд к int, но это также не помогло. Каковы различные способы выполнения этого расчета?

Ответы [ 3 ]

1 голос
/ 14 июня 2019

Я использую парсер из dateutil.

Что-то вроде этого:

from dateutil.parser import parse

first_date_obj = parse("2015-01-28T21:41:38.508275")
second_date_obj = parse("2015-02-28T21:41:38.508275")
print(second_date_obj - first_date_obj)

Вы также можете получить доступ к году, месяцу, дню объекта даты, например:

print(first_date_obj.year)
print(first_date_obj.month)
print(first_date_obj.day)
# and so on
0 голосов
/ 15 июня 2019

Самое простое, что можно сделать - это использовать функцию pandas datetime (поскольку вы уже используете iloc, я предполагаю, что вы используете pandas). Вы можете преобразовать весь столбец данных с меткой due_date в тип данных дата-время pandas, используя

import pandas as pd
time['due_date'] = pd.to_datetime(time['due_date']

, затем рассчитайте разницу во времени, которую вы хотите, используя

time_spent = time.iloc[2]['due_date'] - time.iloc[10]['due_date']

time_spent будет объектом временной шкалы панд, которым вы сможете манипулировать при необходимости.

См. https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html и https://pandas.pydata.org/pandas-docs/stable/user_guide/timedeltas.html.

0 голосов
/ 14 июня 2019
from datetime import datetime

date_format = '%Y-%m-%dT%H:%M:%S.%f'

d2 = time.iloc[2]['due_date']
d1 = time.iloc[10]['due_date']

time_spent = datetime.strptime(d2, date_format) - datetime.strptime(d1, date_format)

print(time_spent.days) # 0
print(time_spent.microseconds) # 586686
print(time_spent.seconds) # 3
print(time_spent.total_seconds()) # 3.586686
...