使用Pandas将小时格式转换为分钟(浮点)

时间:2019-10-08 21:35:14

标签: python pandas dataframe

我正在跟踪一个有关网络抓取的教程,但我只坚持其中的一部分。  当我尝试运行以下代码时,我只会收到错误消息:

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

任何帮助都会有所帮助... 副词adv。

2 个答案:

答案 0 :(得分:0)

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])]))

如果您将date ['Time'] dtype作为字符串(如果没有),则只需在上面的行中进行一些小的更改:

x.str.split(':')

答案 1 :(得分:0)

创建示例数据框:

# 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