【问题标题】:How to encode time in the range of 1 to 48如何在 1 到 48 范围内编码时间
【发布时间】:2019-04-26 14:29:48
【问题描述】:

我有以下时间格式,时间间隔为 24 小时半小时,即一天中有 48 个时间间隔。

我想将其编码为以下格式。

【问题讨论】:

    标签: python-3.x pandas datetime time-series


    【解决方案1】:

    我相信您需要timedelta_rangezip 创建的字典中的map,对于相同类型的数据,需要转换列to_timedelta

    df = pd.DataFrame({'Time':['00:00:00','00:30:00','01:00:00','08:00:00']})
    
    print (type(df['Time'].iat[0]))
    <class 'str'>
    
    d = dict(zip(pd.timedelta_range('00:00:00', '23:30:00', freq='30T'), range(1, 49)))
    df['EncodedTime'] = pd.to_timedelta(df['Time']).map(d)
    print (df)
           Time  EncodedTime
    0  00:00:00            1
    1  00:30:00            2
    2  01:00:00            3
    3  08:00:00           17
    

    date_rangeDatetimeIndex.strftime 创建的类似解决方案:

    d = dict(zip(pd.date_range('00:00:00', '23:30:00', freq='30T').strftime('%H:%M:%S'), 
                 range(1, 49)))
    df['EncodedTime'] = df['Time'].map(d)
    

    与时间一起工作的解决方案:

    df = pd.DataFrame({'Time':pd.to_datetime(['00:00:00','00:30:00','01:00:00','08:00:00']).time})
    
    print (type(df['Time'].iat[0]))
    <class 'datetime.time'>
    
    d = dict(zip(pd.date_range('00:00:00', '23:30:00', freq='30T').time, range(1, 49)))
    df['EncodedTime'] = df['Time'].map(d)
    

    【讨论】:

    • 您的代码只有从 1 到 ~ 的数字,而不是从 1 到 48 的编码。
    • @NikhilMangire - 好的,所以检查另一个解决方案。
    • @NikhilMangire - 添加了接下来的 2 个解决方案,但仍然有些问题,返回什么 print (type(df['Time'].iat[0]))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2023-03-11
    • 2019-05-27
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多