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

标签 python csv matplotlib

我正在使用 python csv 模块从 CSV 文件导入记录。

日期/时间字段要求日期采用特定格式,但是 不同的电子表格程序默认使用不同类型的格式 而且我不希望用户必须更改他们的向下格式。我想 找到一种方法来检测字符串的格式,或者只允许 几种指定格式。

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

最佳答案

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

根据 Joe Kington 的评论,也可以使用 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()

关于python - 如何从 csv 文件中读取日期/时间字段并在 python 中相应地绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992697/

相关文章:

python - Matplotlib 不适用于 Linux Mint Debian Edition 上的 Canopy 1.3

python - 使用 psycopg2 从 python 中的元组中提取字符串

python - Numpy 使用值列表

python - 从列表中获取键和值

java - 如何让 CSVPrinter 引用带空格的字段?

Java - 如何在 Map 数据结构中加载 CSV,键和值作为 POJO - Map<ClassA, ClassB>

python - 堆叠条形图的边缘被切断

python - 删除或更改列表中的特定重复元素(并非所有重复元素)

javascript - 403(禁止)

python - 将多个 DBF (csv) 文件合并为一个,沿列附加