如何将datetime.date对象解析为float

时间:2015-08-31 22:35:56

标签: python postgresql datetime matplotlib

我有一个程序可以绘制存储在postgresql表中的点。 x坐标是查询的日期,属于datetime.date类型。当我尝试将日期转换为浮点数以使其能够被绘制时,我得到的错误是datetime.date object is not iterable。下面是我用来解析查询返回的数据的代码片段:

for row in rows:
    pair = (row[0], row[1])
    coordinateList.append(pair)
xs = [dateToNum.datestr2num(x[0]) for x in coordinateList]
ys = [x[1] for x in coordinateList]

在解析x坐标的第四行中,我使用matplotlib.dates库中的datestr2num函数,该函数出现问题。在这种情况下,解析日期的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

如何从postgres表中获取数据?如果您正在使用例如psycopg2,那么您将在行数据中获得datetime.date,并且您已经准备好使用它了。

我认为您可以使用matplotlib直接绘制数据:

# Import pyplot and dates from matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# Set date format and major locator of x-axis
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y%m%d'))
plt.gca().yaxis.set_major_locator(mdates.DayLocator())
# Actually plot the data
plt.plot([x[0] for x in rows],[y[1] for y in rows])
# Fix ticklabels so they don't overlap in the figure
plt.gcf().autofmt_xdate()

答案 1 :(得分:1)

以下是一个例子:

In [56]: from datetime import datetime
In [57]: now = datetime.now().strftime('%Y%d%m%H%M%S')
In [58]: now
Out[58]: '20153108192131'
In [59]: f = float(now)
In [60]: f
Out[60]: 20153108192131.0
In [61]: type(f)
Out[61]: float

使用datetime.date对象可以完成同样的事情:

In [62]: type(datetime.now().date())
Out[62]: datetime.date
In [63]: f2 = float(datetime.now().date().strftime('%Y%d%m'))
In [64]: f2
Out[64]: 20153108.0
In [65]: type(f2)
Out[65]: float

要使用matplotlib绘制日期,请参阅date_demofixing-common-date-annoyances上的示例,datesticker模块将非常有用。