在Python / Matplotlib中将Pandas DataFrames绘制为x轴上的单日

时间:2014-06-09 20:10:49

标签: python numpy matplotlib plot pandas

我有这样的数据:

    col1  ;col2
2001-01-01;1
2001-01-01;2
2001-01-02;3
2001-01-03;4
2001-01-03;2
2001-01-04;2

我正在使用pd.read_csv(...)在Python / Pandas中将其读入DataFrame。 现在我想在y轴上绘制col2,在x轴上绘制col1。我搜索了很多,但没有太多非常有用的页面详细描述。我发现matplotlib当前不支持日期存储在(datetime64)中的数据格式。

我尝试像这样转换它:

fig, ax = plt.subplots()
X = np.asarray(df['col1']).astype(DT.datetime)
xfmt = mdates.DateFormatter('%b %d')
ax.xaxis.set_major_formatter(xfmt)
ax.plot(X, df['col2'])
plt.show()

但这不起作用。 什么是最好的方法? 我只能在那里找到位和位,但没有真正完整的工作,更重要的是,最新版本的pandas / numpy / matplotlib与此功能相关的最新资源。

我也有兴趣将这个绝对日期转换成连续的日期指数,即: 2001-01-01 的开始日是Day 1 ,因此数据如下所示:

    col1  ;col2 ; col3
2001-01-01;1;1
2001-01-01;2;1
2001-01-02;3;2
2001-01-03;4;3
2001-01-03;2;3
2001-01-04;2;4
.....
2001-02-01;2;32

非常感谢你。

2 个答案:

答案 0 :(得分:1)

Pandas.read_csv支持parse_dates = True(默认当然为False)这样可以节省您单独转换日期的时间。

对于像这样的简单数据帧,pandas plot()函数也能很好地工作。 例如:

dates = pd.date_range('20160601',periods=4)
dt = pd.DataFrame(np.random.randn(4,1),index=dates,columns=['col1'])
dt.plot()
plt.show() 

答案 1 :(得分:0)

好的,据我所知,不再需要直接使用matplotlib,而是pandas本身已经提供了可用作数据框对象方法的绘图函数,请参阅{{ 3}}。这些函数本身使用matplotlib,但更容易使用,因为它们自己正确处理数据类型: - )