How can I split a DataFrame column with datetimes into two columns: one with dates and one with times of the day?

后端 未结 4 1580
有刺的猬
有刺的猬 2021-01-19 00:26

I have a data frame called data, which has a column Dates like this,

                 Dates
0  2015-05-13 23:53:00
1  2015-05-13 23         


        
相关标签:
4条回答
  • 2021-01-19 00:52

    If your Dates column is a string:

    data['Day'], data['Time'] = zip(*data.Dates.str.split())
    
    >>> data
                     Dates         Day      Time
    0  2015-05-13 23:53:00  2015-05-13  23:53:00
    1  2015-05-13 23:53:00  2015-05-13  23:53:00
    2  2015-05-13 23:33:00  2015-05-13  23:33:00
    3  2015-05-13 23:33:00  2015-05-13  23:33:00
    4  2015-05-13 23:33:00  2015-05-13  23:33:00
    

    If it is a timestamp:

    data['Day'], data['Time'] = zip(*[(d.date(), d.time()) for d in data.Dates])
    
    0 讨论(0)
  • 2021-01-19 00:53

    If your series is s, then this will create such a DataFrame:

    pd.DataFrame({
        'date': pd.to_datetime(s).dt.date,
        'time': pd.to_datetime(s).dt.time})
    

    as once you convert the series using pd.to_datetime, then the dt member can be used to extract the parts.


    Example

    import pandas as pd
    
    s = pd.Series(['2015-05-13 23:53:00', '2015-05-13 23:53:00'])
    >>> pd.DataFrame({
        'date': pd.to_datetime(s).dt.date,
        'time': pd.to_datetime(s).dt.time})
        date    time
    0   2015-05-13  23:53:00
    1   2015-05-13  23:53:00
    
    0 讨论(0)
  • 2021-01-19 00:54

    attrgetter + pd.concat + join

    You can use operator.attrgetter with pd.concat to add an arbitrary number of datetime attributes to your dataframe as separate series:

    from operator import attrgetter
    
    fields = ['date', 'time']
    df = df.join(pd.concat(attrgetter(*fields)(df['Date'].dt), axis=1, keys=fields))
    
    print(df)
    
                     Date        date      time
    0 2015-05-13 23:53:00  2015-05-13  23:53:00
    1 2015-01-13 15:23:00  2015-01-13  15:23:00
    2 2016-01-13 03:33:00  2016-01-13  03:33:00
    3 2018-02-13 20:13:25  2018-02-13  20:13:25
    4 2017-05-12 06:52:00  2017-05-12  06:52:00
    
    0 讨论(0)
  • 2021-01-19 01:05

    If type of column Dates is string, convert it by to_datetime. Then you can use dt.date, dt.time and last drop original column Dates:

    print df['Dates'].dtypes
    object
    print type(df.at[0, 'Dates'])
    <type 'str'>
    
    df['Dates'] = pd.to_datetime(df['Dates'])
    
    print df['Dates'].dtypes
    datetime64[ns]
    
    print df
                    Dates
    0 2015-05-13 23:53:00
    1 2015-05-13 23:53:00
    2 2015-05-13 23:33:00
    3 2015-05-13 23:30:00
    4 2015-05-13 23:30:00
    
    df['Date'] = df['Dates'].dt.date
    df['Time'] = df['Dates'].dt.time
    
    df = df.drop('Dates', axis=1)
    print df
             Date      Time
    0  2015-05-13  23:53:00
    1  2015-05-13  23:53:00
    2  2015-05-13  23:33:00
    3  2015-05-13  23:30:00
    4  2015-05-13  23:30:00
    
    0 讨论(0)
提交回复
热议问题