代码之家  ›  专栏  ›  技术社区  ›  PineNuts0

将hh:mm:ss格式的时间转换为panda格式的总分钟数

  •  0
  • PineNuts0  · 技术社区  · 1 年前

    我有下面的示例输入表。这个 Time 列的格式为 hh:mm:ss 或小时、分钟和秒。

    名称 时间
    Jim 1:33:04
    克丽丝 0:06:39
    Billy 10:00:02

    创建上表的代码是:

    import pandas as pd
    df = pd.DataFrame({'Name':["Jim","Chrissy","Billy"], 'Time':['1:33:04', '0:06:39', '10:00:02']})
    

    我想创建一个名为“_timemin”的新列,将时间列转换为分钟。例如,10:00:02将等于600.03分钟。

    我尝试应用以下代码,但没有成功:

    df['_timemin'] = df['Time'].str.split(':').apply(lambda x: (int(x[0])*60) + int(x[1])) + int(x[2]/60)  
    

    …以上代码产生错误:

    NameError: name 'x' is not defined
    
    3 回复  |  直到 1 年前
        1
  •  1
  •   eetaSanglo    1 年前

    你的表情 df['_timemin'] = df['Time'].str.split(':').apply(lambda x: (int(x[0])*60) + int(x[1])) + int(x[2]/60) 有三个问题:

    1. 不关闭应用方法
    2. 仅将(闭合lambda x)应用于前两个元素(x[0]和x[1])
    3. 除法前不将字符串x[2]转换为数字数据类型

    这里有两个选项:

    df['_timemin'] = df['Time'].str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]) + int(x[2]) // 60) 底数(或整数)除以分钟

    df['_timemin'] = df['Time'].str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]) + int(x[2]) / 60) 浮动分钟

        2
  •  1
  •   ShadowGunn    1 年前

    以下是一个示例,说明如何使用datetime模块来计算时间并将其转换为分钟:

    import pandas as pd
    from datetime import datetime
    
    # Sample DataFrame
    data = {'Time': ['01:30:45', '02:15:20', '00:45:10']}  # Sample 'Time' data
    df = pd.DataFrame(data)
    
    # Function to convert HH:MM:SS format to minutes
    def time_to_minutes(time_str):
        time_obj = datetime.strptime(time_str, "%H:%M:%S")
        total_minutes = time_obj.hour * 60 + time_obj.minute + time_obj.second / 60
        return total_minutes
    
    # Applying the function to the DataFrame's 'Time' column
    df['_timemin'] = df['Time'].apply(time_to_minutes)
    
    print(df)
    
        3
  •  0
  •   cottontail    1 年前

    如果时间小于24小时(而且似乎是从给定输入推断的),我们可以转换 Time 列到timedelta对象(以秒为单位)并转换 那个 到分钟。

    df = pd.DataFrame({
        'Name':["Jim","Chrissy","Billy"], 
        'Time':['1:33:04', '0:06:39', '10:00:02']})
    df['_timemin'] = pd.to_timedelta(df['Time']).dt.total_seconds() / 60
    

    result