Преобразование столбцов с форматом времени ЧЧММСС в секунды

У меня очень длинный фрейм данных pandas (10000 строк). В одном столбце время хранится в следующем формате: «ЧЧММСС».

Для дальнейшего расчета мне нужно добавить рядом с этим столбцом столбец с секундами.

Вот моя проблема, описанная на примере кадра данных pandas с 3 строками и 1 столбцом.

import pandas as pd

data = [['123455'], ['000010'], ['100000']]
df = pd.DataFrame(data, columns=['HHMMSS'])

print(df)

#   HHMMSS
#0  123455
#1  000010
#2  100000

def get_seconds(time_str):
    hh, mm, ss = time_str[0:2], time_str[2:4], time_str[4:6]
    return int(hh) * 3600 + int(mm) * 60 + int(ss)

sec=[get_seconds(df['HHMMSS'][0]),get_seconds(df['HHMMSS'][1]),get_seconds(df['HHMMSS'][2])]

df['sec']=sec

print(df)

#   HHMMSS    sec
#0  123455  45295
#1  000010     10
#2  100000  36000

Как будет выглядеть (эффективное) решение для очень длинных фреймов данных?

123465 это опечатка? Разве не должно быть 123456 (56 вместо 65)

richardec 22.03.2022 19:14

:-) да это тупо, поменял с 123465 на 123455

len 22.03.2022 19:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

print(df['col'].dt.total_seconds()) должно работать.

Возможно, вам потребуется сначала установить для столбца значение даты и времени, чтобы сделать это:

df['col'] = pd.to_datetime(df['col'])
df['col'].dt.total_seconds()

Ваш ответ выглядит как дубликат принятого ответа. Пожалуйста, предоставьте более подробное объяснение того, что вы пытаетесь добавить.

Esraa Abdelmaksoud 22.03.2022 23:22
Ответ принят как подходящий

pandas.Series.dt.total_seconds() работает только с TimedeltaArray, TimedeltaIndex или Series, содержащими значения timedelta в пространстве имен .dt.

Поскольку ваше значение не имеет разделителя между значениями, вам нужно использовать аргумент format, чтобы панды знали формат. Затем преобразуйте его в значения timedelta с помощью pd.to_timedelta(). Наконец, используйте свойство dt.total_seconds(), чтобы получить общее количество секунд timedelta.

df['datetime'] = pd.to_datetime(df['HHMMSS'], format='%H%M%S')
df['delta'] = pd.to_timedelta(df['datetime'].dt.strftime('%H:%M:%S'))
df['delta'].dt.total_seconds()

Другие вопросы по теме