【问题标题】:plotting a Date from an csv. file in pylab从 csv 绘制日期。 pylab 中的文件
【发布时间】:2016-07-25 10:57:20
【问题描述】:

我正在尝试从 csv 中绘制日期。文件列与其他三列数字相对。我是 python 新手,到目前为止已设法将列导入 python 并尝试读取它们有一个数组,但我似乎无法将它们附加到 datetime 模块并沿 x 轴绘制日期以及我的数据。

有人可以帮忙吗?

此刻我不断收到错误消息:

Traceback (most recent call last):
File "H:\AppliedGIS\Python\woops.py", line 24, in <module>
     date = datetime.datetime.strptime['x', '%d/%m/%Y']
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

但我确定我在不止一个地方出错了......

数据本身格式化为四列,打印时如下所示:('04/03/2013', 7.0, 12.0, 17.0) ('11/03/2013', 23.0, 15.0, 23.0)。

这是完整的代码

import csv
import numpy as np
import pylab as pl
import datetime
from datetime import datetime
data = np.genfromtxt('H:/AppliedGIS/Python/AssignmentData/GrowthDistribution/full.csv', names=True, usecols=(0, 1, 2, 3), delimiter= ',', dtype =[('Date', 'S10'),('HIGH', '<f8'), ('Medium', '<f8'), ('Low', '<f8')])
print data

x =  [foo['Date'] for foo in data]
y = [foo['HIGH'] for foo in data]
y2 = [foo['Medium'] for foo in data]
y3 = [foo['Low'] for foo in data] 
print x, y, y2, y3

dates = []
for x in data:
    date = datetime.datetime.strptime['x', '%d/%m/%Y']
    dates.append(date)

pl.plot(data[:, x], data[:, y], '-r', label= 'High Stocking Rate')
pl.plot(data[:, x], data[:, y2], '-g', label= 'Medium Stocking Rate')
pl.plot(data[:, x], data[:, y3], '-b', label= 'Low Stocking Rate')
pl.title('Amount of Livestock Grazing per hectare', fontsize=18)
pl.ylabel('Livestock per ha')
pl.xlabel('Date')
pl.grid(True)
pl.ylim(0,100)

pl.show()

【问题讨论】:

  • 您是否在交互式 Python 会话中尝试过 datetime

标签: csv datetime numpy matplotlib genfromtxt


【解决方案1】:

问题在于您导入datetime 的方式。

datetime 模块包含一个类,也称为datetime。目前,您只是将类导入为datetime,您可以从中使用strptime 方法,如下所示:

from datetime import datetime
...
x =  [foo['Date'] for foo in data]
...
dates=[]
for i in x:
    date = datetime.strptime(i,'%d/%m/%Y')
    dates.append(date)

或者,您可以导入完整的datetime 模块,然后使用datetime.datetime 访问datetime 类:

import datetime
...
x =  [foo['Date'] for foo in data]
...
dates=[]
for i in x:
    date = datetime.datetime.strptime(i,'%d/%m/%Y')
    dates.append(date)

【讨论】:

  • 非常感谢@tom 我似乎遇到了时间数据格式的另一个问题:'ValueError: time data 'x' does not match format '%d/%m/% Y''....有什么想法吗??
  • 您正在重用变量x。您首先将其定义为来自data 的日期,然后在循环中重用它(for x in data)。尝试在循环中使用不同的变量名(请参阅上面我编辑的答案,我使用了i)。在对 strptime 的调用中,您也不需要在 i 周围加上引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多