Я добавляю новое решение, которое намного быстрее, чем оригинальное, поскольку оно опирается на векторизованные функции панд, а не на циклы (функции применения панд - это, по сути, оптимизированные циклы в данных).
Я протестировал его с образцом, похожим по размеру на ваш, и разница составляет от 778 до 21,3 мс. Поэтому я определенно рекомендую новую версию.
Оба решения основаны на преобразовании ваших целых секунд в формат timedelta и добавлении его в опорную дату / время. Затем я просто фиксирую компонент времени результирующих datetime.
Новый (более быстрый) вариант:
import datetime as dt
seconds = pd.Series(np.random.rand(50)*100).astype(int) # Generating test data
start = dt.datetime(2019,1,1,0,0) # You need a reference point
datetime_series = seconds.astype('timedelta64[ms]') + dt.datetime(2019,1,1,0,0)
time_series = datetime_series.dt.time
time_series
Оригинал (медленнее) Ответ:
Не самое элегантное решение, но оно делает свое дело.
import datetime as dt
seconds = pd.Series(np.random.rand(50)*100).astype(int) # Generating test data
start = dt.datetime(2019,1,1,0,0) # You need a reference point
time_series = seconds.apply(lambda x: start + pd.Timedelta(seconds=x)).dt.time
time_series