2011-02-14 254 views
4

Im使用python csv模块从CSV文件导入记录。如何从csv文件中读取日期/时间字段并相应地在python中绘制图表

的日期/时间字段预计日期是在一个特定的格式,但 不同的电子表格程序默认为不同类型的格式 ,我不希望用户不得不改变他们的下format.I要 找到一种检测字符串格式的方式,或者只允许 几种指定的格式。

如何从csv文件读取日期/时间字段并相应地绘制图形 。

回答

8

dateutil可以在多种格式解析日期字符串,而您不必预先指定什么格式的日期字符串是:

In [8]: import dateutil.parser as parser 

In [9]: parser.parse('Jan 1') 
Out[9]: datetime.datetime(2011, 1, 1, 0, 0) 

In [10]: parser.parse('1 Jan') 
Out[10]: datetime.datetime(2011, 1, 1, 0, 0) 

In [11]: parser.parse('1-Jan') 
Out[11]: datetime.datetime(2011, 1, 1, 0, 0) 

In [12]: parser.parse('Jan-1') 
Out[12]: datetime.datetime(2011, 1, 1, 0, 0) 

In [13]: parser.parse('Jan 2,1999') 
Out[13]: datetime.datetime(1999, 1, 2, 0, 0) 

In [14]: parser.parse('2 Jan 1999') 
Out[14]: datetime.datetime(1999, 1, 2, 0, 0) 

In [15]: parser.parse('1999-1-2') 
Out[15]: datetime.datetime(1999, 1, 2, 0, 0) 

In [16]: parser.parse('1999/1/2') 
Out[16]: datetime.datetime(1999, 1, 2, 0, 0) 

In [17]: parser.parse('2/1/1999') 
Out[17]: datetime.datetime(1999, 2, 1, 0, 0) 

In [18]: parser.parse("10-09-2003", dayfirst=True) 
Out[18]: datetime.datetime(2003, 9, 10, 0, 0) 

In [19]: parser.parse("10-09-03", yearfirst=True) 
Out[19]: datetime.datetime(2010, 9, 3, 0, 0) 

一旦你收集的日期和值到列表中,您可以用plt.plot来绘制它们。例如:

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

n=20 
now=dt.datetime.now() 
dates=[now+dt.timedelta(days=i) for i in range(n)] 
values=[np.sin(np.pi*i/n) for i in range(n)] 
plt.plot(dates,values) 
plt.show() 

enter image description here

每乔金顿的评论,类似于使用matplotlib.dates.datestr2num而不是使用dateutil.parser明确一个以上还可以由一个图:

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

n=20 
dates=['2011-Feb-{i}'.format(i=i) for i in range(1,n)] 
dates=md.datestr2num(dates) 
values=[np.sin(np.pi*i/n) for i in range(1,n)] 
plt.plot_date(dates,values,linestyle='solid',marker='None') 
plt.show() 
+2

对于它的价值, matplotlib有一个(有些没有记录的)便利功能,可以使用dateutil来做到这一点。 `matplotlib.dates.datestr2num`将采用表示日期时间的字符串序列,推断格式并返回日期(在matplotlib的内部浮点表示中,而不是日期时间对象)。当然,因为返回的数组是浮点数组,所以您需要使用`plot_date`来让matplotlib正确地推断浮点数表示日期...... – 2011-02-14 16:01:03

相关问题