Обратите внимание, что часть даты в каждой строке может отличаться (не от одного и того же дня), поэтому вы не можете использовать любую "базовую дату" ( полночь ) для всего DataFrame, так какможно увидеть в одном из других решений.
Моим намерением также было не «загрязнять» исходный DataFrame какими-либо промежуточными столбцами, например, time (фактически дата и время) в виде преобразованной строкив "true" DateTime .
Тогда я предлагаю следующее:
- преобразовать строку DateTime в DateTime,
- взять часть времени из нее,
- вычислить числосекунды из часа / минуты / второй части.
Все вышеперечисленные шаги в выделенной функции.
Итак, чтобы выполнить задачу, определите функцию:
def secSinceNoon(datTimStr):
tt = pd.to_datetime(datTimStr).time()
return tt.hour * 3600 + tt.minute * 60 + tt.second
Затем позвоните:
samples['Secs'] = samples.time.apply(secSinceNoon)
Для исходных данных:
samples = pd.DataFrame(data=[
[ '2018-10-01 00:00:01' ], [ '2018-10-01 00:00:12' ],
[ '2018-11-02 01:01:10' ], [ '2018-11-04 03:02:15' ] ],
columns = ['time']);
при печати результата вы увидите:
time Secs
0 2018-10-01 00:00:01 1
1 2018-10-01 00:00:12 12
2 2018-11-02 01:01:10 3670
3 2018-11-04 03:02:15 10935