У меня очень длинный фрейм данных 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 на 123455
print(df['col'].dt.total_seconds())
должно работать.
Возможно, вам потребуется сначала установить для столбца значение даты и времени, чтобы сделать это:
df['col'] = pd.to_datetime(df['col'])
df['col'].dt.total_seconds()
Ваш ответ выглядит как дубликат принятого ответа. Пожалуйста, предоставьте более подробное объяснение того, что вы пытаетесь добавить.
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()
123465
это опечатка? Разве не должно быть123456
(56 вместо 65)