Преобразование столбца секунд в чч: мм: сс - панды - PullRequest
1 голос
/ 03 мая 2019

Я уверен, что это так, но я не могу найти его. Я пытаюсь преобразовать column из floats в timestamps, отображаемое как hh:mm:ss. Ниже моя попытка:

import pandas as pd

d = ({
    'A' : [100.4,200.2,300.3,400.6,500.8,600.9],                 
    'B' : [10.4,21.5,36.3,44.3,56.6,60.5],                                      
     })

df = pd.DataFrame(data = d)

df['A','B'] = pd.to_datetime(df['A','B'], unit='h')

Предполагаемая мощность:

          A         B
0  00:01:40  00:00:10
1  00:03:20  00:00:22
2  00:05:00  00:00:36
3  00:06:41  00:00:44
4  00:08:21  00:00:57
5  00:10:01  00:01:01

Ответы [ 3 ]

3 голосов
/ 03 мая 2019

round + pd.to_timedelta, указав единицу измерения:

df.round().apply(pd.to_timedelta, unit='s')

         A        B
0 00:01:40 00:00:10
1 00:03:20 00:00:22
2 00:05:00 00:00:36
3 00:06:41 00:00:44
4 00:08:21 00:00:57
5 00:10:01 00:01:00

A    timedelta64[ns]
B    timedelta64[ns]
dtype: object

Теперь у вас есть функциональность timedeltas

3 голосов
/ 03 мая 2019
import pandas as pd

d = ({
    'A' : [100.4,200.2,300.3,400.6,500.8,600.9],                 
    'B' : [10.4,21.5,36.3,44.3,56.6,60.5],                                      
     })

df = pd.DataFrame(data = d)

df['A'] = df['A'].astype('float64') 
df['B'] = df['B'].astype('float64') 

df['A'] = pd.to_datetime(df["A"], unit='s').dt.strftime("%H:%M:%S")
df['B'] = pd.to_datetime(df["B"], unit='s').dt.strftime("%H:%M:%S")

Вывод:


    A           B
0   00:01:40    00:00:10
1   00:03:20    00:00:21
2   00:05:00    00:00:36
3   00:06:40    00:00:44
4   00:08:20    00:00:56
5   00:10:00    00:01:00
1 голос
/ 03 мая 2019

Еще одно однострочное решение:

df = df.apply(lambda x: pd.to_datetime(x, unit='s').dt.strftime('%H:%M:%S'))

Использование apply с pd.to_datetime и dt.strftime.

А теперь:

print(df)

Является:

          A         B
0  00:01:40  00:00:10
1  00:03:20  00:00:21
2  00:05:00  00:00:36
3  00:06:40  00:00:44
4  00:08:20  00:00:56
5  00:10:00  00:01:00
...