Доступ к формату datetime.time (00:00 - 23:59) в числовом типе данных - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть усредненные данные за 24 часа, которые индексируются с 00:00 до 23:59 с интервалом в 1 минуту.Это приводит к 1440 точкам данных, соответствующим каждой минуте.Я хочу сопоставить эти временные метки с их числовыми индексами в диапазоне от 0 до 1440 (как 1440 минут за весь день).

Например, 00:00 -> 0, 00: 01-> 1, 00: 02-> 2 ... 23: 58-> 1339, 23: 59-> 1440

time = 01:11 dtype: datetime.time
time.func ()
71

Я пытался найти, есть ли такиефункциональность в пандах для формата datetime.time.Но я не смог найти ни одного.

Если в пандах для этого нет встроенной функциональности, другим способом может быть написание функции, которая сопоставляет конкретное datetime.time с индексом (0-1440).

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Посмотрите и убедитесь, что это то, что вы хотели:

import pandas as pd
df = pd.DataFrame(['23:57', '10:39', '4:03'], columns=['Time'])

Этот фрейм данных выглядит следующим образом:

    Time
0  23:57
1  10:39
2   4:03

Тогда мы можем применить эту функцию к нашему столбцу:

df['Time'].apply(lambda x: int(pd.to_timedelta(pd.to_datetime(x, format='%H:%M').strftime('%H:%M:00'), unit='m').total_seconds()/60))

Из которых на выходе получается:

0    1437
1     639
2     243
Name: Time, dtype: int64

Здесь мы используем apply для применения одной и той же функции ко всем элементам столбца.

  1. Преобразовать вформат даты и времени (здесь я указал формат, используя «% H:% M», чтобы обеспечить явное преобразование времени в часы и минуты.
  2. Отформатируйте время с помощью дополнительного элемента секунд, добавив «: 00», используяstrftime, это потому, что pd.to_timedelta будет хотеть время в формате 'чч: мм: сс'
  3. Затем мы получим total_seconds () timedelta и разделим на 60, чтобы получить минуты
  4. Преобразовать в целое число, чтобы получить окончательный формат.
0 голосов
/ 05 февраля 2019

Панд не имеет нативного time dtype, но у него есть timedelta:

In [11]: t = dt.time(10, 15)

In [12]: t.hour * 60 + t.minute  # total minutes (this may suffice!)
Out[12]: 615

In [13]: pd.to_timedelta((t.hour * 60 + t.minute), unit='m')
Out[13]: Timedelta('0 days 10:15:00')

Примечание: вы можете работать с timedelta с самого начала (либо в разборе, либо в расчете)):

In [14]: pd.to_timedelta('10:15:00')
Out[14]: Timedelta('0 days 10:15:00')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...