How to remove seconds from datetime?

前端 未结 10 1906
终归单人心
终归单人心 2021-02-20 13:02

I have the following date and I tried the following code,

df[\'start_date_time\'] = [\"2016-05-19 08:25:00\",\"2016-05-19 16:00:00\",\"2016-05-20 07:45:00\",\"20         


        
相关标签:
10条回答
  • 2021-02-20 13:37

    Give this a shot with:

    df.index = df.index.map(lambda t: t.strftime('%Y-%m-%d %H:%M'))
    

    As written in one of the comments, the above apply to the case where the dates are not strings. If they, however, are strings, you can simply slice the last three characters from each list in the list:

    import pandas as pd
    
    df = pd.DataFrame({'date': ["2016-05-19 08:25:00"]})
    
    print(df['date'].map(lambda t: t[:-3]))
    

    The above will output:

    0    2016-05-19 08:25
    Name: date, dtype: object
    
    0 讨论(0)
  • 2021-02-20 13:40

    HTML Code:

    < input type="time" class="form-control" name="meeting_time" required /> 
    

    Python Django Code:

    meeting_time = request.POST['meeting_time'] #Like your_time = "12:35:00"
    get_time = meeting_time.strftime("%H:%M")
    

    Result is:

    get_time = "12:35"
    
    0 讨论(0)
  • 2021-02-20 13:40

    this is with the time module not datetime module but might be what your looking for...

    import time
    X = time.strftime("%H:%M")
    print(X)
    

    or you with seconds

    import time
    X = time.strftime("%H:%M:%S")
    print(X)
    

    If your gonna down vote please explain why

    0 讨论(0)
  • 2021-02-20 13:42

    Convert String to datetime object first, then you can use the replace method.

    from _datetime import *
    
    
    df = dict()
    df['start_date_time'] = ["2016-05-19 08:25:00",
                             "2016-05-19 16:00:00",
                             "2016-05-20 07:45:00",
                             "2016-05-24 12:50:00",
                             "2016-05-25 23:00:00",
                             "2016-05-26 19:45:00"]
    
    for dt in df['start_date_time']:
        cur_dt = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
        cur_dt = cur_dt.replace(second=0)
        print(cur_dt)
    
        cur_dt_without_second = cur_dt.strftime('%Y-%m-%d %H:%M')
        print(cur_dt_without_second)
    
    -------------------
    2016-05-19 08:25:00
    2016-05-19 08:25
    2016-05-19 16:00:00
    2016-05-19 16:00
    2016-05-20 07:45:00
    2016-05-20 07:45
    2016-05-24 12:50:00
    2016-05-24 12:50
    2016-05-25 23:00:00
    2016-05-25 23:00
    2016-05-26 19:45:00
    2016-05-26 19:45
    
    0 讨论(0)
  • 2021-02-20 13:44

    As you mentioned removed so I assumed you don't want the seconds or microsecond in the result.If this is the case then following might help:

    datetime_variable.strftime("'%Y-%m-%d %H:%M'")

    If you have datetime in string then you can convert it in datetime obj:

    from dateutil import parser

    datetime_variable = parser.parse(str_datetime_var)

    datetime_variable.strftime("'%Y-%m-%d %H:%M'")

    0 讨论(0)
  • 2021-02-20 13:54

    Solutions if need datetimes in output:

    df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45"]})
    df['start_date_time'] = pd.to_datetime(df['start_date_time'])
    print (df)
           start_date_time
    0  2016-05-19 08:25:23
    1  2016-05-19 16:00:45
    

    Use Series.dt.floor by minutes T or Min:

    df['start_date_time'] = df['start_date_time'].dt.floor('T')
    
    df['start_date_time'] = df['start_date_time'].dt.floor('Min')
    

    You can use convert to numpy values first and then truncate seconds by cast to <M8[m], but this solution remove possible timezones:

    df['start_date_time'] = df['start_date_time'].values.astype('<M8[m]')
    print (df)
          start_date_time
    0 2016-05-19 08:25:00
    1 2016-05-19 16:00:00
    

    Another solution is create timedelta Series from second and substract:

    print (pd.to_timedelta(df['start_date_time'].dt.second, unit='s'))
    0   00:00:23
    1   00:00:45
    Name: start_date_time, dtype: timedelta64[ns]
    
    df['start_date_time'] = df['start_date_time'] - 
                            pd.to_timedelta(df['start_date_time'].dt.second, unit='s')
    print (df)
          start_date_time
    0 2016-05-19 08:25:00
    1 2016-05-19 16:00:00
    

    Timings:

    df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45"]})
    df['start_date_time'] = pd.to_datetime(df['start_date_time'])
    
    #20000 rows
    df = pd.concat([df]*10000).reset_index(drop=True)
    
    
    In [28]: %timeit df['start_date_time'] = df['start_date_time'] - pd.to_timedelta(df['start_date_time'].dt.second, unit='s')
    4.05 ms ± 130 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [29]: %timeit df['start_date_time1'] = df['start_date_time'].values.astype('<M8[m]')
    1.73 ms ± 117 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    In [30]: %timeit df['start_date_time'] = df['start_date_time'].dt.floor('T')
    1.07 ms ± 116 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    In [31]: %timeit df['start_date_time2'] = df['start_date_time'].apply(lambda t: t.replace(second=0))
    183 ms ± 19.7 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
    

    Solutions if need strings repr of datetimes in output

    Use Series.dt.strftime:

    print(df['start_date_time'].dt.strftime('%Y-%m-%d %H:%M'))
    0    2016-05-19 08:25
    1    2016-05-19 16:00
    Name: start_date_time, dtype: object
    

    And if necessary set :00 to seconds:

    print(df['start_date_time'].dt.strftime('%Y-%m-%d %H:%M:00'))
    0    2016-05-19 08:25:00
    1    2016-05-19 16:00:00
    Name: start_date_time, dtype: object
    
    0 讨论(0)
提交回复
热议问题