2017-04-10 27 views
1

我想從csv加載數據並將其顯示在matplotlib散點圖中,其中X軸上的格式化日期時間。這是數據:無法使用strptime解析日期時間

0,03/12/2017 21:00:00.000 +0000,4745 
0,03/12/2017 22:00:00.000 +0000,3046 
0,03/12/2017 23:00:00.000 +0000,2052 
0,03/13/2017 00:00:00.000 +0000,1455 
2,03/13/2017 00:00:00.000 +0000,2 
1,03/13/2017 00:00:00.000 +0000,2 

而且我用的是Python3.4代碼:

import numpy as np 
import matplotlib.pyplot as plt 
import datetime as dt 

retries, count = np.loadtxt(open('search-results.csv', 'r'), 
        delimiter=",", 
        skiprows=1, 
        unpack=True, 
        usecols=[0, 2]) 

time = np.loadtxt(open('search-results.csv', 'r'), 
        delimiter=",", 
        skiprows=1, 
        unpack=True, 
        usecols=[1], 
        dtype=str) 

dates = [dt.datetime.strptime(str(d), "b'%d/%m/%Y %H:%M:%S.000 +0000'") for d in time] 

plt.scatter(dates, retries, s=count) 
plt.grid(which='both', color='#aaaaaa') 
plt.savefig('out.png', format='png') 

當我運行上面的代碼,它看起來就像是分析數據,直到它到達第十三天:

ValueError: time data "b'03/13/2017 00:00:00.000 +0000'" does not match format "b'%d/%m/%Y %H:%M:%S.000 +0000'" 

回答

1

TL; DR:

,則應該更換followi NG線從這樣的:

dates = [dt.datetime.strptime(str(d), "b'%d/%m/%Y %H:%M:%S.000 +0000'") for d in time] 

這樣:

dates = [dt.datetime.strptime(str(d), "b'%m/%d/%Y %H:%M:%S.000 +0000'") for d in time] 

那麼你所得到的錯誤是正確的,因爲你告訴你的代碼,以期待一個日期,格式化爲:"b'%d/%m/%Y %H:%M:%S.000 +0000'"但你通過它像這樣格式化日期:

"b'%m/%d/%Y %H:%M:%S.000 +0000'" (interchanged month and date). 

你的代碼適用於前3行,因爲12是在一年的月份範圍內,但是當它在第四行獲得13時,它會中斷!

祝你好運:)

+0

呀,我需要:-) – ftraian

+0

休息似乎很配合:) –