【发布时间】:2016-05-29 20:40:14
【问题描述】:
我根本无法弄清楚,如何从 csv 读取日期,但我无法将日期表示为 x 轴上的标签。我已经尝试了人们建议的所有方法,但我无法让它发挥作用。所以有人可以看看我的代码的精简版本并告诉我我缺少什么吗?
从 csv 文件中读取的数据样本
2015-08-04 02:14:05.249392,AA,0.0193103612,0.0193515212,0.0249713335,30.6542480634,30.7195875454,39.640763021,0.2131498442,29.0406746589,13524.5347810182,89,57,99
2015-08-05 02:14:05.325113,AAPL,0.0170506271,0.0137941891,0.0105915637,27.0670313481,21.8975963326,16.8135861893,-19.0986405157,-23.2172064279,21.5647072302,33,26,75
2015-08-06 02:14:05.415193,AIG,0.0080808151,0.0073296055,0.0076213535,12.8278962785,11.635388035,12.0985236788,-9.2962105215,3.980405659,-142.8175077335,71,42,33
2015-08-07 02:14:05.486185,AMZN,0.0235649449,0.0305828226,0.0092703502,37.4081902773,48.5487257749,14.7162247572,29.7810062852,-69.6877219282,-334.0005615016,2,92,10
精简代码
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm
ax = plt.subplots(1, 1, figsize=(16, 20), dpi=50) #width height inches
data=np.genfromtxt('/home/dave/Desktop/development/hvanal2015s.csv',
dtype='M8[us],S5,float,float,float',delimiter=',',usecols= [0,1,11,12,13])
my_dates = np.array([d[0] for d in data]).astype('datetime64[D]')
dates = np.unique(my_dates)
print(dates)
x_list = []
y_list = [10,11,12,13]
x_list = dates
plt.plot(x_list,y_list)
plt.title('hv 20 to 10 ranks',fontsize=20)
plt.xlabel('dates')
plt.ylabel('symbol ranks',fontsize=30)
plt.show()
输出为 png 文件
【问题讨论】:
-
简短的回答是
import pandas或将您的np.datetime64对象转换为datetime.datetime对象。 -
@tcaswell 你是一个绅士和一个学者,我是如此接近但没有雪茄!非常感谢您帮助真正愚蠢的人。过去的某个时候,我有类似你的答案,但我搞砸了。感谢您抽出宝贵时间。
-
这对于 mpl 来说是一个严重的痛点,但要修复它并非易事。 pandas 通过一个基于 cython 的盒子支持 datetime64 对象,该盒子深深嵌入在它们的 Series 类中,所以我们不能只是将它移植过来。这可能是几天 - 一周的扎实努力,但没有人找到时间。
-
我明白了,问题已向我深入解释。我远离 Pandas,因为我有点担心有一天它可能会成为专有的,我没有证据表明这只是一种预感。我真的很喜欢 Matplotlib,并且使用它很开心。我也是 python 新手,这是我的第三个程序,因为我没有很多编码时间。你和 Stanley R 帮助了我非常感谢你
-
pandas 是 BSD 许可的,它不能成为专有的。有人可以分叉源并开始出售它,但他们不太可能取代当前围绕 pandas 的社区。实际上有几个专有的数据框,比如库,它们正朝着相反的方向开放(参见 dato 的 SFrame)。
标签: python python-3.x csv datetime matplotlib