Как прочитать поле даты / времени из файла CSV и построить график соответственно в Python - PullRequest
4 голосов
/ 14 февраля 2011

Я импортирую записи из файла CSV с помощью модуля Python CSV.

Поле даты / времени предполагает, что дата будет в определенном формате, но разные программы работы с электронными таблицами по умолчанию для разных типов форматов и я не хочу, чтобы пользователь должен был изменить свой формат вниз. Я хочу найти способ определить формат строки или разрешить только несколько указанных форматов.

Как прочитать поле даты / времени из CSV-файла и построить график соответственно.

1 Ответ

8 голосов
/ 14 февраля 2011

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...