'Seperating Date/Time column into two: Date and Time

I have a data frame that has a heading that looks like this. I want to use the string split method to create two separate columns: one for date and one for time.

          Date/Time      Lat      Lon    Base
0  7/1/2014 0:03:00  40.7586 -73.9706  B02512
1  7/1/2014 0:05:00  40.7605 -73.9994  B02512
2  7/1/2014 0:06:00  40.7320 -73.9999  B02512
3  7/1/2014 0:09:00  40.7635 -73.9793  B02512
4  7/1/2014 0:20:00  40.7204 -74.0047  B02512

So something like this:

     Date   Time      Lat      Lon    Base
0  7/1/2014 0:03:00  40.7586 -73.9706  B02512
1  7/1/2014 0:05:00  40.7605 -73.9994  B02512
2  7/1/2014 0:06:00  40.7320 -73.9999  B02512
3  7/1/2014 0:09:00  40.7635 -73.9793  B02512
4  7/1/2014 0:20:00  40.7204 -74.0047  B02512


Solution 1:[1]

You can use:

out = pd.concat([df.pop('Date/Time').str.extract('(?P<Date>[^\s]*)\s(?P<Time>.*)'),
                 df], axis=1)
print(out)

# Output
       Date     Time      Lat      Lon    Base
0  7/1/2014  0:03:00  40.7586 -73.9706  B02512
1  7/1/2014  0:05:00  40.7605 -73.9994  B02512
2  7/1/2014  0:06:00  40.7320 -73.9999  B02512
3  7/1/2014  0:09:00  40.7635 -73.9793  B02512
4  7/1/2014  0:20:00  40.7204 -74.0047  B02512

Solution 2:[2]

Here is what I have done: import pandas as pd

date, time = [],[]
for i in df['Date/Time']:
    to_append = i.split(' ') #Separates date and time for example: [date,time]
    date.append(to_append[0]) #Appending the dates
    time.append(to_append[1]) #Appending the times
df.pop('Date/Time') #Removing the old Date/Time
df.insert(0,'Date',date) #Creating Date Column at Start
df.insert(1,'Time',time) #Creating Time Column at Index 1
print(df)

Output:        Date     Time      Lat       Lon    Base
        0  7/1/2014  0:03:00  40.7586  -73.9706  B02512
        1  7/1/2014  0:05:00  40.7605  -73.9994  B02512
        2  7/1/2014  0:06:00  40.7320  -73.9999  B02512
        3  7/1/2014  0:09:00  40.7635  -73.9793  B02512
        4  7/1/2014  0:20:00  40.7204  -74.0047  B02512

Solution 3:[3]

Just use split

df['date'] = df['date'].apply(lambda x : x.split(' ')[0])
df['Time'] = df['date'].apply(lambda x : x.split(' ')[1))

Solution 4:[4]

you can either parse the date time string an split on the space or you can convert the column to date time and get the date component or the time component

data="""Index,Date/Time,Lat,Lon,Base
0,7/1/2014 0:03:00,40.7586,-73.9706,B02512
1,7/1/2014 0:05:00,40.7605,-73.9994,B02512
2,7/1/2014 0:06:00,40.7320,-73.9999,B02512
3,7/1/2014 0:09:00,40.7635,-73.9793,B02512
4,7/1/2014 0:20:00,40.7204,-74.0047,B02512"""

df=pd.read_csv(StringIO(data),sep=',')

print(df['Date/Time'])
df['Date']=df['Date/Time'].apply(lambda x: x.split(' ')[0])
df['Time']=df['Date/Time'].apply(lambda x: x.split(' ')[1])

df['Date/Time']=pd.to_datetime(df['Date/Time'])
df['Date']=df['Date/Time'].dt.date
df['Time']=df['Date/Time'].dt.time

print(df['Time'])

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Corralien
Solution 2 The Myth
Solution 3 ArchAngelPwn
Solution 4 Golden Lion