2017-04-23 978 views
2

我有一個日期時間系列,我只想保留系列中的「小時 - 小 - 秒」字符串,並刪除年 - 月 - 日字符串。 那我該怎麼辦?如何從datetime系列中刪除年份 - 日期 - 日期? [python]

原始系列:

0   2000-12-31 22:12:40 
1   2000-12-31 22:35:09 
2   2000-12-31 22:32:48 
3   2000-12-31 22:04:35 
4   2001-01-06 23:38:11 
5   2000-12-31 22:37:48 
…… 

目標:

0   22:12:40 
1   22:35:09 
2   22:32:48 
3   22:04:35 
4   23:38:11 
5   22:37:48 
…… 

Preiviously原始序列已被從一個Unix時間戳系列通過使用pandas.to_datetime翻譯()。但我不能用這個方法來達到我的目標:(

任何建議表示讚賞

+0

如果我或另一種答案是有幫助的,不要忘了[接受](http://meta.stackexchange.com/a/5235/295067 )它。謝謝。 – jezrael

+0

接受,但你的答案是非常有用的:) – Ricky

回答

2

使用dt.strftime

#if necessary convert to datetime 
#df['date'] = pd.to_datetime(df['date']) 

print (df.dtypes) 
date datetime64[ns] 
dtype: object 

df['time'] = df['date'].dt.strftime('%H:%M:%S') 
print (df) 
       date  time 
0 2000-12-31 22:12:40 22:12:40 
1 2000-12-31 22:35:09 22:35:09 
2 2000-12-31 22:32:48 22:32:48 
3 2000-12-31 22:04:35 22:04:35 
4 2001-01-06 23:38:11 23:38:11 
5 2000-12-31 22:37:48 22:37:48 

或者轉換爲stringsplit和選擇的第二個值lists通過str[1]

#if dtype of date column is object (obviously string), omit astype 
df['time'] = df['date'].astype(str).str.split().str[1] 
print (df) 
       date  time 
0 2000-12-31 22:12:40 22:12:40 
1 2000-12-31 22:35:09 22:35:09 
2 2000-12-31 22:32:48 22:32:48 
3 2000-12-31 22:04:35 22:04:35 
4 2001-01-06 23:38:11 23:38:11 
5 2000-12-31 22:37:48 22:37:48 
0

使用:DAT etime

from datetime import datetime 
your_datetime = "2017-01-01 23:00:00" 
dt = datetime.strptime(your_datetime , "%Y-%m-%d %H:%M:%S").strftime('%H:%M:%S') 
print dt 
+0

你應該考慮到上下文。這是一個熊貓問題。答案可能應該包括如何逐列進行,而不是按值進行。也就是說,有些人最終會在這裏結束並找到你的答案。 –

0

你已經有了一些不錯的答案了。然而,他們將其存儲爲字符串,您可能希望將其存儲爲實際datetime.time對象:

import pandas as pd 

df = pd.DataFrame([ 
    {'date': '2000-12-31 22:12:40'}, 
    {'date': '2000-12-31 22:35:09'}, 
    {'date': '2000-12-31 22:32:48'}, 
    {'date': '2000-12-31 22:04:35'}, 
    {'date': '2001-01-06 23:38:11'}, 
    {'date': '2000-12-31 22:37:48'}, 
]) 

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

print(df) 
print(df['time'].dtype) 
print(type(df['time'][0])) 

    date  time 
0 2000-12-31 22:12:40 22:12:40 
1 2000-12-31 22:35:09 22:35:09 
2 2000-12-31 22:32:48 22:32:48 
3 2000-12-31 22:04:35 22:04:35 
4 2001-01-06 23:38:11 23:38:11 
5 2000-12-31 22:37:48 22:37:48 
object 
<class 'datetime.time'> 

編輯:

注意到,您的目標是沒有的date列。下面添加到末尾:

del df['date'] 
print(df) 

 time 
0 22:12:40 
1 22:35:09 
2 22:32:48 
3 22:04:35 
4 23:38:11 
5 22:37:48 
相關問題