Разделение даты и времени - PullRequest
0 голосов
/ 28 июня 2019

У меня есть два столбца, дата создания и дата закрытия, формат как показано ниже. Мне нужно извлечь только дату из каждого столбца и попытаться изменить ситуацию

0    12/31/2015 11:59:45 PM
1    12/31/2015 11:59:44 PM
2    12/31/2015 11:59:29 PM
3    12/31/2015 11:57:46 PM
4    12/31/2015 11:56:58 PM

Я пытался использовать команду str.split (используя пробел для разделения), чтобы получить только даты как от даты создания, так и от даты закрытия Однако, если я пытаюсь понять разницу, я получаю следующую ошибку:

неподдерживаемые типы операндов для -: 'str' и 'str'

a = nyc311['Created Date']
nyc311['Created Date Revised'] = a.str.split('[ ]').str.get(0)

b = nyc311['Closed Date']
nyc311['Closed Date Revised'] = b.str.split('[ ]').str.get(0)

nyc311['Request_Closing_Time'] = nyc311['Closed Date Revised'] -nyc311['Created Date Revised']

Дата создания и дата закрытия вышли, как и ожидалось, однако мне нужно добиться временного отставания от даты создания до даты закрытия, что невозможно, как уже упоминалось, из-за сообщения об ошибке. Это может быть глупый вопрос, я новичок в Python. Помощь будет высоко ценится.

Ответы [ 4 ]

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

Это потому что ваши даты в строковом формате. Вы должны преобразовать их в дату и время. Вот пример того, как это работает:

import datetime

df = pd.DataFrame({'Created Date' : ['12/30/2015 11:59:45 PM', '01/10/2016 11:59:45 PM'],
                  'Closed Date' : ['12/31/2015 11:59:44 PM', '01/22/2016 11:59:44 PM']})

# First we use the split function and the datetime conversion in a list comprehension
df['Created Date'] = [datetime.datetime.strptime(x.split(' ')[0], '%m/%d/%Y') 
                      for x in df['Created Date']]
df ['Closed Date'] = [datetime.datetime.strptime(x.split(' ')[0], '%m/%d/%Y') 
                      for x in df['Closed Date']]

df['Request closing Date'] = df ['Closed Date'] - df['Created Date']

Выход:

  Created Date Closed Date Request closing Date
0   2015-12-30  2015-12-31               1 days
1   2016-01-10  2016-01-22              12 days
1 голос
/ 28 июня 2019

Вы можете использовать функцию strptime (), чтобы вырезать время и затем найти разницу между ними.Приведенный ниже код удалит время из объекта datetime 'a'.

a = datetime.strptime(a, '%Y-%m-%d')

Вы также можете проверить эту ссылку для получения дополнительной информации

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

Я думаю, что некоторые уже задавали этот вопрос и получили ответ, вы можете посмотреть здесь: Как рассчитать количество дней между двумя указанными датами?

так что, если я правильно понимаю, вам нужен код, чтобы получить разницу между двумя датами или временем, и не очень, как правильно разбить строку?

Вы можете проверить эту функцию:

   from datetime import datetime

   def _calculate_range(self, t1, t2):
    """ calculate time range between two different dates """
      try:

        fmt = '%Y-%m-%d %H:%M:%S'
        d1 = datetime.strptime(t1, fmt)
        d2 = datetime.strptime(t2, fmt)
        d1_ts = time.mktime(d1.timetuple())
        d2_ts = time.mktime(d2.timetuple())
        res = int(d2_ts - d1_ts) / 3600
        return res

вам нужно преобразовать вашу строку в объект datetime, потому что вы не можете получить разницу между двумя строками, вы можете добиться этого с помощью метода strptime. вам нужно импортировать дату и время, чтобы вы могли использовать этот метод

0 голосов
/ 28 июня 2019

Попробуйте преобразовать столбцы даты и времени тура в фактическую дату (вместо строк) и использовать .date

nyc311['Created Date'] = pd.to_datetime(nyc311['Created Date'])
nyc311['Closed Date'] = pd.to_datetime(nyc311['Closed Date'])
nyc311['Request_Closing_Time'] = nyc311['Closed Date'].date() -nyc311['Created Date'].date()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...