Как преобразовать столбец целого числа в стандартное время часа в Python?
У меня есть фрейм данных, как это:
BuyTime ID SellTime
94650 1 94651
94717 1 94817
120458 2 114119
время покупки и время продажи являются целыми числами, но я хочу преобразовать их в стандартную дату времени. Я уже пользовалась
quote['SellTime'] = pd.to_datetime(quote['SellTime'], unit = 's')
но это дает стартовый год, как 1970-01-01, времени, которое не нужно. мои данные должны быть такими:
BuyTime Id SellTime
09:46:50 1 09:46:51
09:47:17 1 09:48:17
12:04:58 2 11:41:19
РЕДАКТИРОВАТЬ: также использование этой функции в отношении размера моих данных неэффективно:
def format_time(value):
t2 = str(value)
if len(t2) == 5:
return "0%s:%s:%s" % (t2[0], t2[1:3], t2[3:5])
return "%s:%s:%s" % (t2[0:2], t2[2:4], t2[4:6])
2 ответа
Я думаю, что вам нужно, если нужно выводить как string
s zfill
а также str[]
для выбора по позициям:
t1 = quote['BuyTime'].astype(str).str.zfill(6)
t2 = quote['SellTime'].astype(str).str.zfill(6)
quote['BuyTime'] = t1.str[0:2] + ':' + t1.str[2:4] + ':' + t1.str[4:6]
quote['SellTime'] = t2.str[0:2] + ':' + t2.str[2:4] + ':' + t2.str[4:6]
print (quote)
BuyTime ID SellTime
0 09:46:50 1 09:46:51
1 09:47:17 1 09:48:17
2 12:04:58 2 11:41:19
Или если нужно python times
добавлять 0
от zfill
, преобразовать в datetime
и извлечь time
s:
t1 = quote['BuyTime'].astype(str).str.zfill(6)
t2 = quote['SellTime'].astype(str).str.zfill(6)
quote['BuyTime'] = pd.to_datetime(t1, format='%H%M%S').dt.time
quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S').dt.time
print (quote)
BuyTime ID SellTime
0 09:46:50 1 09:46:51
1 09:47:17 1 09:48:17
2 12:04:58 2 11:41:19
Альтернатива для string
выходы strftime
:
quote['BuyTime'] = pd.to_datetime(t1, format='%H%M%S').dt.strftime('%H:%M:%S')
quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S').dt.strftime('%H:%M:%S')
print (quote)
BuyTime ID SellTime
0 09:46:50 1 09:46:51
1 09:47:17 1 09:48:17
2 12:04:58 2 11:41:19
Предполагая, что строка даты содержит только часы / минуты / секунды (а минуты / секунды всегда имеют длину 2 символа, вы можете сделать что-то вроде этого, чтобы проанализировать строку, используя оператор Python по модулю:
dateStr = '94522'
dateInt = int(dateStr)
sec = dateInt % 100
dateInt = dateInt - sec
min = dateInt % 10000
dateInt = dateInt - min
min /= 100
hour = dateInt / 10000
newDateStr = '{}:{}:{}'.format(hour, min, sec)
print 'number={} formatted={}'.format(dateStr, newDateStr)
Это будет работать как для длинных строк, так и для 5 и 6 символов.