Преобразовать формат часов в минуты (плавать) с Pandas - PullRequest
0 голосов
/ 09 октября 2019

Я следую одному уроку по просмотру веб-страниц, и я застрял с одной частью. Я получаю ошибки только при попытке запустить следующий код:

df7['Time2'] =  df7['Time'].str.split(':').apply(lambda x: float(x[0]) * 60 + float(x[1]) + float(x[2])/60)

Получить ошибку:

IndexError: список индекса выходит за пределы диапазона

Также попробовал следующее:

time_mins = []
for i in time_list:
    h, m, s = i.split(':')
    math = (int(h) * 3600 + int(m) * 60 + int(s))/60
    time_mins.append(math)

Опять не сработало.

Моя клетка похожа на:

The format of current cell HH:MM:SS

результат, который я хочу, похож на:

Objective output

Любая помощь будет полезна ... Tks in adv.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Создать образец кадра данных:

# Import packages
import pandas as pd
# Create sample dataframe 
time = ['1:38:17','1:38:31','1:38:32']
gender = ['M','F','M']
data = pd.DataFrame({
        'Time':time,
        'Gender':gender
        })

data
Out[]: 
      Time Gender
0  1:38:17      M
1  1:38:31      F
2  1:38:32      M

Преобразовать столбец в формат timedelta:

# Time conversion
data['Time'] = pd.to_timedelta(data['Time']) 
# Time in days 
data = data.assign(Time_in_days = [x.days for x in data['Time']])
# Time in hour
data = data.assign(Time_in_hour = [(x.seconds)/(60.0*60.0) for x in data['Time']] )
# Time in minutes 
data = data.assign(Time_in_minutes = [(x.seconds)/60.0 for x in data['Time']])
# Time in seconds
data = data.assign(Time_in_seconds = [x.seconds * 1.0 for x in data['Time']] )

print(data)

    Time   Gender  Time_in_days  Time_in_hour  Time_in_minutes  Time_in_seconds
0 01:38:17      M             0      1.638056        98.283333           5897.0
1 01:38:31      F             0      1.641944        98.516667           5911.0
2 01:38:32      M             0      1.642222        98.533333           5912.0
0 голосов
/ 09 октября 2019
data['Time2'] = data['Time'].apply(lambda x: sum([a*b for a,b in zip(list(map(int,x.split(':')))[::-1],[1/60,1,60])]))

Если у вас есть дата ['Time'] dtype в виде строки, если нет, просто внесите небольшое изменение в строку выше:

x.str.split(':')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...