简单的加载时间序列和python中的绘图

时间:2013-12-20 16:17:03

标签: python matplotlib plot dataset time-series

作为python的初学者,我非常沮丧,因为经过数小时的研究后,我无法找到一个解决方案,可以在1分钟内在matlab,R或gnuplot中读取+绘制时间系列。

数据文件:

# id  date                value1  quality anothervalue value2
   1  2011-05-19_16:30:19  974.3  3_1x    NODATA        10E-4
...

我试过了:

import pandas as pd
import numpy as np
from pandas import Series, DataFrame, Panel
import matplotlib as mp
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
a,b,c,d,e,f = np.loadtxt("dataset.dat", unpack=True,
    converters={ 1: mdates.strpdate2num('%Y-%m-%d_%H:%M:%S') })
plt.plot_date(x=b, y=c)
plt.show()

Python一直在失败,因为它试图自动将数据转换为float。所以我尝试使用转换器,但其他列失败了。根本没有情节。

  • 如何告诉python忽略以#?
  • 开头的行
  • 我是否必须手动转换所有内容,或者我只是在没有转换的情况下读取数据集?
  • 如何最终在datetime上绘制value1?
  • 我可以告诉python将NODATA解释为没有数据的值吗?所以它没有绘制它?

python是如此严重的记录,以至于一个人不能在数小时后谷歌解决方案,或者我只是错过了那里真正有用的东西吗?

1 个答案:

答案 0 :(得分:0)

不确定是否可以通过numpy获得所需的结果,因为它不适合不同类型的数组。但是当您导入pandas时,可以使用pd.read_csv

>>> from StringIO import StringIO
>>> s = """# id  date                value1  quality anothervalue value2
... 1  2011-05-19_16:30:19  974.3  3_1x    NODATA        10E-4"""
>>> pd.read_csv(StringIO(s[2:]), sep='\s+', 
...      date_parser=mdates.strpdate2num('%Y-%m-%d_%H:%M:%S'), 
...      parse_dates=['date'])
   id          date  value1 quality anothervalue  value2
0   1  734276.68772   974.3    3_1x       NODATA       0