从pandas datetime绘制日期时间数据

时间:2015-06-30 06:59:42

标签: python-3.x pandas matplotlib

我用熊猫阅读了csv文件。在源文件中,我有一个包含日期和时间的列以及一些其他列(财务OHLC)。当我正在阅读csv文件时,我正在使用一些解析选项(在这个http://pandas.pydata.org/pandas-docs/stable/io.html?highlight=read%20csv#specifying-date-columns上组合解析时的列)。 最后,我尝试从新的组合日期时间列和其他日期绘制简单图形。所有工作,但绘图功能仅在datetime列的时间日期创建行。为什么绘制函数不理解我的datetime列上的日期组件?如何从所有日期时间点创建图形?

               Time_Open        Data   Time     Open   Hight     Low   Close
0    2015-06-01 01:35:00  2005.02.15  01:35  1.29710  1.2972  1.2969  1.2969   
1    2015-06-01 01:36:00  2005.02.15  01:36  1.29700  1.2971  1.2969  1.2970   
2    2015-06-01 01:37:00  2005.02.15  01:37  1.29700  1.2972  1.2969  1.2970  

来自我的csv文件的示例:

date_time[0]<date_time[1]
Out[11]: True
date_time[0]-date_time[1]
Out[13]: Timedelta('-1 days +23:59:00')

我的错误情节

enter image description here

我认为我的数据还可以。我可以使用它们和python了解数据类型。我可以这样做:

{{1}}

但matplotlib不了解我的数据。我希望获得y轴上的图形,我看到日期时间(如2015-06-01 23:59:00),而不仅仅是时间(23:59:00)。现在matplotlib在24小时内绘制图表并且不明白我的数据有不同的日期。我在一天内得到一行,但是我的所有数据都没有一行。

2 个答案:

答案 0 :(得分:1)

我没有您的所有数据,但基本上您需要使用DateFormatter格式化您的x-ticks:

import matplotlib.pyplot as plt
import matplotlib.dates as dates
fig, ax = plt.subplots()
date_time=df.icol(0)
date_close=df.icol(6)
plt.plot_date(x=date_time,y=date_close,fmt="r-")
plt.xlabel("Close")
plt.ylabel("Date")
ax.xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d'))
plt.show()

enter image description here

我的照片并不好,但你应该能够在这里得到一般的要点

答案 1 :(得分:0)

我无法解决datetime64的问题,但我找到了其他方法。 你应该看看张畲的行为https://vimeo.com/53065093。这个python 2.x的功能,但在这种情况下它并不重要。

python 3的这些部分的一些工作代码。

from datetime import datetime, date, time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
with open('sample-2dayslineEURUSDM1.csv', 'r') as fh:
    print(fh.readline())
    print(fh.readline())
    data = pd.read_csv('sample-2dayslineEURUSDM1.csv',
               parse_dates={'Timestamp':['Date','Time']}, 
               index_col='Timestamp')
data.index
ticks = data.ix[:,['Close']]
ticks.head()
ticks.ix['2005-02-15 01:35:00':'2005-02-16 23:59:00'].plot()

enter image description here