Timedelta в формате "% H:% M" - PullRequest
1 голос
/ 06 мая 2020

Есть способ преобразовать timedelta столбцы в строки в формате «% H:% M»? Мне это нужно даже для timedeltas с более чем 24 часами

Я хочу сделать это, чтобы создать файл .csv, который можно использовать в программах, подобных электронным таблицам (Excel, таблицы Google ...)

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Нет ничего встроенного. Вы должны свернуть свой:

s = pd.to_timedelta(['0:10:00', '12:34:56', '25:12:34']).to_series()
s.dt.total_seconds().apply(lambda s: f'{s // 3600:02.0f}:{(s % 3600) // 60:02.0f}')

Результат:

0 days 00:10:00    00:10
0 days 12:34:56    12:34
1 days 01:12:34    25:12
dtype: object
1 голос
/ 06 мая 2020

С некоторым целочисленным делением и делением остатка вы можете использовать total_seconds, чтобы выяснить, как отформатировать вашу строку. В настоящее время этот метод игнорирует миллисекунды.

def format_timedelta(s):
    s = s.dt.total_seconds()

    seconds = (s%60).astype(int).astype(str).str.zfill(2)
    minutes = (s//60%60).astype(int).astype(str).str.zfill(2)
    hours = (s//3600).astype(int).astype(str)

    return hours+':'+minutes+':'+seconds


s = pd.Series(pd.to_timedelta(['24:20:00', '00:15:00', '123:12:12', 
                               '123:02:12', '4:20:00.1123']))

format_timedelta(s)
0     24:20:00
1      0:15:00
2    123:12:12
3    123:02:12
dtype: object
...