【问题标题】:How to convert 24 hr time to total seconds in a data frame如何将 24 小时时间转换为数据框中的总秒数
【发布时间】:2018-05-04 02:05:04
【问题描述】:

我正在尝试将 df 中 24 小时内的一列替换为总秒数。下面的代码生成一个随机的df。

import pandas as pd
import random

def randomTime():

    rtime = int(random.random()*86400)

    hours   = int(rtime/3600)
    minutes = int((rtime - hours*3600)/60)
    seconds = rtime - hours*3600 - minutes*60

    time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
    return time_string

time = [randomTime() for _ in range(8)]

k = 5
N = 8

d = ({'Time' : (time),
    'Events' : ['ABC','DEF','GHI','JKL','ABC','DEF','GHI','JKL'],
    'Number1' : ['xx','xx',1,'xx','xx','xx',2,'xx'],
    'Number2' : ['xx',1,'xx',1,'xx',2,'xx',2]})

df = pd.DataFrame(data=d)

输出:

  Events Number1 Number2      Time
0    ABC      xx      xx  07:02:30
1    DEF      xx       1  03:34:02
2    GHI       1      xx  01:38:11
3    JKL      xx       1  14:50:43
4    ABC      xx      xx  06:05:53
5    DEF      xx       2  18:50:44
6    GHI       2      xx  17:09:42
7    JKL      xx       2  21:09:28

我可以使用以下方法将时间转换为总秒数并返回到单独的系列:

Time_secs = pd.to_timedelta(df['Time']).dt.total_seconds()

输出:

0    25350.0
1    12842.0
2     5891.0
3    53443.0
4    21953.0
5    67844.0
6    61782.0
7    76168.0

但我想将数据框中的时间列替换为总秒数。不要导出一个单独的系列,我必须将其连接回 df。

所以我希望产生以下内容:

  Events Number1 Number2  Time
0    ABC      xx      xx  25350.0
1    DEF      xx       1  12842.0
2    GHI       1      xx  5891.0
3    JKL      xx       1  53443.0
4    ABC      xx      xx  21953.0
5    DEF      xx       2  67844.0
6    GHI       2      xx  61782.0
7    JKL      xx       2  76168.0

【问题讨论】:

    标签: python pandas time


    【解决方案1】:

    为什么不直接将结果分配给列?

    df['Time'] = pd.to_timedelta(df['Time']).dt.total_seconds()
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多