【问题标题】:How to change the time format of timedelta [duplicate]如何更改timedelta的时间格式[重复]
【发布时间】:2018-10-29 10:48:05
【问题描述】:

嗨,我有一个以下格式的时间增量

0days 01:25:53.0000000

我想将这个时间增量更改为等值 分钟(即 85.88) 谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用 total_seconds

    pd.Series(pd.Timedelta('0days 01:25:53.0000000')).dt.total_seconds()/60
    Out[334]: 
    0    85.883333
    dtype: float64
    

    【讨论】:

      【解决方案2】:
      # Sample DataFrame
                           time
      0  0days 01:25:53.0000000
      

      使用 to_timedelta 并除以 pd.Timedelta(1, 'm')

      pd.to_timedelta(df.time) / pd.Timedelta(1, 'm')
      
      0    85.883333
      Name: time, dtype: float64
      

      【讨论】:

        【解决方案3】:

        我对您可以选择的不同方法进行了比较:

        1. df.timedelta / np.timedelta64(1, 'm')
        2. df.timedelta.dt.total_seconds().div(60)(> 10.000 行时最快)
        3. df.timedelta.astype('timedelta64[s]').div(60)(对于
        4. df.timedelta.astype('timedelta64[m]')(将舍入值)。

        注意:这个答案是骗人的: Convert timedelta64[ns] column to seconds in Python Pandas DataFrame


        完整示例:

        import pandas as pd
        
        df = pd.DataFrame({
            'timedelta': [pd.Timedelta('0days 01:25:53.0000000'),
                          pd.Timedelta('0days 02:25:53.0000000')]
        })
        
        df['timedelta-minutes'] = df.timedelta.astype('timedelta64[s]').div(60)
        print(df)
        

        返回:

          timedelta  timedelta-minutes
        0  01:25:53          85.883333
        1  02:25:53         145.883333
        

        时间

        import pandas as pd
        import numpy as np
        
        df = pd.DataFrame({
            'timedelta': [pd.Timedelta('0days 01:25:53.0000000'),
                          pd.Timedelta('0days 02:25:53.0000000')]
        })
        
        df = pd.concat([df]*5000)
        
        %timeit df.timedelta / np.timedelta64(1, 'm')         # 638 µs per loop
        %timeit df.timedelta.dt.total_seconds().div(60)       # 215 µs per loop
        %timeit df.timedelta.astype('timedelta64[s]').div(60) # 213 µs per loop
        %timeit df.timedelta.astype('timedelta64[m]')         # 132 µs per loop
        

        【讨论】:

        • 感谢您的编辑,投票支持 :-)
        • @Wen Hmm sorry....我编辑的太多了,所以把它作为自己的答案。
        • @Wen 我认为我们应该将其标记为欺骗。
        • @chrisz 原来你是不正确的(我的设置)。
        • @chrisz 有趣... 10000 行似乎是断点。所以在 10000 行 (2x5000) 之前它会更快。在 20000 时, dt.total_seconds() 确实变得更快。自己试试吧:pd.concat([df]*2000)
        猜你喜欢
        • 1970-01-01
        • 2017-02-19
        • 2015-09-10
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 2019-05-01
        • 2015-03-01
        • 2021-11-20
        相关资源
        最近更新 更多