Splitting timestamp column into separate date and time columns

后端 未结 7 710
执念已碎
执念已碎 2020-11-27 06:29

I have a pandas dataframe with over 1000 timestamps (below) that I would like to loop through:

2016-02-22 14:59:44.561776

I\'m having a har

相关标签:
7条回答
  • 2020-11-27 06:33

    If your timestamp is a string, you can convert it to a datetime object:

    from datetime import datetime
    
    timestamp = '2016-02-22 14:59:44.561776'
    dt = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S.%f')
    

    From then on you can bring it to whatever format you like.

    0 讨论(0)
  • 2020-11-27 06:36

    Had same problem and this worked for me.

    Suppose the date column in your dataset is called "date"

    import pandas as pd
    df = pd.read_csv(file_path)
    
    df['Dates'] = pd.to_datetime(df['date']).dt.date
    df['Time'] = pd.to_datetime(df['date']).dt.time
    

    This will give you two columns "Dates" and "Time" with splited dates.

    0 讨论(0)
  • 2020-11-27 06:40

    try this:

    def time_date(datetime_obj):
        date_time = datetime_obj.split(' ')
        time = date_time[1].split('.')
        return date_time[0], time[0]
    
    0 讨论(0)
  • 2020-11-27 06:41

    I think the most easiest way is to use dt attribute of pandas Series. For your case you need to use dt.date and dt.time:

    df = pd.DataFrame({'full_date': pd.date_range('2016-1-1 10:00:00.123', periods=10, freq='5H')})
    df['date'] = df['full_date'].dt.date
    df['time'] = df['full_date'].dt.time
    
    In [166]: df
    Out[166]:
                    full_date        date             time
    0 2016-01-01 10:00:00.123  2016-01-01  10:00:00.123000
    1 2016-01-01 15:00:00.123  2016-01-01  15:00:00.123000
    2 2016-01-01 20:00:00.123  2016-01-01  20:00:00.123000
    3 2016-01-02 01:00:00.123  2016-01-02  01:00:00.123000
    4 2016-01-02 06:00:00.123  2016-01-02  06:00:00.123000
    5 2016-01-02 11:00:00.123  2016-01-02  11:00:00.123000
    6 2016-01-02 16:00:00.123  2016-01-02  16:00:00.123000
    7 2016-01-02 21:00:00.123  2016-01-02  21:00:00.123000
    8 2016-01-03 02:00:00.123  2016-01-03  02:00:00.123000
    9 2016-01-03 07:00:00.123  2016-01-03  07:00:00.123000
    
    0 讨论(0)
  • 2020-11-27 06:54

    I'm not sure why you would want to do this in the first place, but if you really must...

    df = pd.DataFrame({'my_timestamp': pd.date_range('2016-1-1 15:00', periods=5)})
    
    >>> df
             my_timestamp
    0 2016-01-01 15:00:00
    1 2016-01-02 15:00:00
    2 2016-01-03 15:00:00
    3 2016-01-04 15:00:00
    4 2016-01-05 15:00:00
    
    df['new_date'] = [d.date() for d in df['my_timestamp']]
    df['new_time'] = [d.time() for d in df['my_timestamp']]
    
    >>> df
             my_timestamp    new_date  new_time
    0 2016-01-01 15:00:00  2016-01-01  15:00:00
    1 2016-01-02 15:00:00  2016-01-02  15:00:00
    2 2016-01-03 15:00:00  2016-01-03  15:00:00
    3 2016-01-04 15:00:00  2016-01-04  15:00:00
    4 2016-01-05 15:00:00  2016-01-05  15:00:00
    

    The conversion to CST is more tricky. I assume that the current timestamps are 'unaware', i.e. they do not have a timezone attached? If not, how would you expect to convert them?

    For more details:

    https://docs.python.org/2/library/datetime.html

    How to make an unaware datetime timezone aware in python

    EDIT

    An alternative method that only loops once across the timestamps instead of twice:

    new_dates, new_times = zip(*[(d.date(), d.time()) for d in df['my_timestamp']])
    df = df.assign(new_date=new_dates, new_time=new_times)
    
    0 讨论(0)
  • 2020-11-27 06:58

    Try

    s = '2016-02-22 14:59:44.561776'
    
    date,time = s.split()
    

    then convert time as needed.

    If you want to further split the time,

    hour, minute, second = time.split(':')
    
    0 讨论(0)
提交回复
热议问题