2013-07-17 45 views
1

我試圖將某些日期時間數據轉換爲pandas.to_datetime()格式。它不起作用,並且df['Time']的類型是Object。哪裏錯了?轉換爲datetime64格式與to_datetime()

請注意,我附上我的時間檔案。

我的代碼

import pandas as pd 
import numpy as np 
from datetime import datetime 

f = open('time','r') 
lines = f.readlines() 

t = [] 
for line in lines: 
    time = line.split()[1][-20:] 
    time2 = time[:11] + ' ' +time[12:21] 
    t.append(time2) 



df = pd.DataFrame(t) 
df.columns = ['Time'] 
df['Time'] = pd.to_datetime(df['Time']) 

print df['Time'] 


Name: Time, Length: 16136, dtype: object 

請找附上時間數據文件here

+1

如果您能更輕鬆地處理此問題,我們將爲您提供更多支持。你能粘貼幾行數據(比如說5)來重現你的問題嗎? –

回答

3

文件time包含一些無效數據。

例如,第8323行包含8322 "5/Jul/2013::8:25:18 0530", ,它與正常行8321 "15/Jul/2013:18:25:18 +0530"不同。

8321 "15/Jul/2013:18:25:18 +0530" 
8322 "5/Jul/2013::8:25:18 0530" 

對於法線,time2成爲15/Jul/2013 18:25:18,但對於無效的行"5/Jul/2013::8:25:18

15/Jul/2013 18:25:18 
"5/Jul/2013::8:25:18 

造成部分線路被解析爲datetime,有的線路不是;數據被強制對象(包含日期時間和字符串)。

>>> pd.Series(pd.to_datetime(['15/Jul/2013 18:25:18', '15/Jul/2013 18:25:18'])) 
0 2013-07-15 18:25:18 
1 2013-07-15 18:25:18 
dtype: datetime64[ns] 

>>> pd.Series(pd.to_datetime(['15/Jul/2013 18:25:18', '*5/Jul/2013 18:25:18'])) 
0 15/Jul/2013 18:25:18 
1 *5/Jul/2013 18:25:18 
dtype: object 

如果你只需要前5個數據(其中有正確的日期格式)從文件中,你會得到你所期望的。

... 
df = pd.DataFrame(t[:5]) 
df.columns = ['Time'] 
df['Time'] = pd.to_datetime(df['Time']) 

以上代碼產量:

0 2013-07-15 00:00:12 
1 2013-07-15 00:00:18 
2 2013-07-15 00:00:23 
3 2013-07-15 00:00:27 
4 2013-07-15 00:00:29 
Name: Time, dtype: datetime64[ns] 

UPDATE

添加一個小例子,顯示的D型細胞object,不datetime原因。

+0

對於遲到的回覆感到抱歉,我刪除了這些條目,但仍未將其轉換爲datetime64。有沒有辦法找到它失敗的地方?像try..except的東西? –

+0

@NilaniAlgiriyage,你可以上傳新版本的'time'文件嗎? – falsetru

+0

可能還有一些其他的東西....請在這裏參考time2 .. https://docs.google.com/file/d/0B80N3g3ZkIhhc2tvN1lLR0FvdGc/edit?usp=sharing –