Skip to content Skip to sidebar Skip to footer

How Can I Split A Dataframe Column With Datetimes Into Two Columns: One With Dates And One With Times Of The Day?

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:53:00 2 2015-05-13 23:33:00 3 2015-05-13 23:30

Solution 1:

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})
    datetime02015-05-1323:53:0012015-05-1323:53:00

Solution 2:

If your Dates column is a string:

data['Day'],data['Time']=zip(*data.Dates.str.split())>>>dataDatesDayTime02015-05-13 23:53:00  2015-05-13  23:53:0012015-05-13 23:53:00  2015-05-13  23:53:0022015-05-13 23:33:00  2015-05-13  23:33:0032015-05-13 23:33:00  2015-05-13  23:33:0042015-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 indata.Dates])

Solution 3:

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:

printdf['Dates'].dtypes
object
printtype(df.at[0, 'Dates'])
<type'str'>

df['Dates'] = pd.to_datetime(df['Dates'])

printdf['Dates'].dtypes
datetime64[ns]

printdf
                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)
printdf
         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

Solution 4:

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:

fromoperatorimportattrgetterfields= ['date', 'time']
df=df.join(pd.concat(attrgetter(*fields)(df['Date'].dt),axis=1,keys=fields))print(df)Datedatetime02015-05-13 23:53:00  2015-05-13  23:53:0012015-01-13 15:23:00  2015-01-13  15:23:0022016-01-13 03:33:00  2016-01-13  03:33:0032018-02-13 20:13:25  2018-02-13  20:13:2542017-05-12 06:52:00  2017-05-12  06:52:00

Post a Comment for "How Can I Split A Dataframe Column With Datetimes Into Two Columns: One With Dates And One With Times Of The Day?"