首先,如果我使用DataReader读取数据,然后绘图,一切都很好
In [55]: t = DataReader('SPY','yahoo', start=datetime.datetime(1990,1,1))
In [56]: t
Out[56]:
<class 'pandas.core.frame.DataFrame'>
Index: 5033 entries, 1993-01-29 00:00:00 to 2013-01-23 00:00:00
Data columns:
Open 5033 non-null values
High 5033 non-null values
Low 5033 non-null values
Close 5033 non-null values
Volume 5033 non-null values
Adj Close 5033 non-null values
dtypes: float64(5), int64(1)
In [58]: t.plot()
Out[58]: <matplotlib.axes.AxesSubplot at 0x8cca790>
但是,如果我将其保存为csv文件并重新加载,我收到错误消息并且情节也不正确,
In [62]: t.to_csv('spy.csv')
In [63]: s = pd.read_csv('spy.csv', na_values=[" "])
In [64]: s.set_index('Date')
Out[64]:
<class 'pandas.core.frame.DataFrame'>
Index: 5033 entries, 1993-01-29 00:00:00 to 2013-01-23 00:00:00
Data columns:
Open 5033 non-null values
High 5033 non-null values
Low 5033 non-null values
Close 5033 non-null values
Volume 5033 non-null values
Adj Close 5033 non-null values
dtypes: float64(5), int64(1)
In [66]: s.plot()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/dli/pythonTest/pandas/<ipython-input-66-d3eb09d34df4> in <module>()
----> 1 s.plot()
/usr/lib/pymodules/python2.7/pandas/core/frame.pyc in plot(self, subplots, sharex, sharey, use_index, figsize, grid, legend, rot, ax, kind, **kwds)
3748 ax.legend(loc='best')
3749 else:
-> 3750 ax.plot(x, y, label=str(col), **kwds)
3751
3752 ax.grid(grid)
/usr/lib/pymodules/python2.7/matplotlib/axes.pyc in plot(self, *args, **kwargs)
3891 lines = []
3892
-> 3893 for line in self._get_lines(*args, **kwargs):
3894 self.add_line(line)
3895 lines.append(line)
/usr/lib/pymodules/python2.7/matplotlib/axes.pyc in _grab_next_args(self, *args, **kwargs)
320 return
321 if len(remaining) <= 3:
--> 322 for seg in self._plot_args(remaining, kwargs):
323 yield seg
324 return
/usr/lib/pymodules/python2.7/matplotlib/axes.pyc in _plot_args(self, tup, kwargs)
279 ret = []
280 if len(tup) > 1 and is_string_like(tup[-1]):
--> 281 linestyle, marker, color = _process_plot_format(tup[-1])
282 tup = tup[:-1]
283 elif len(tup) == 3:
/usr/lib/pymodules/python2.7/matplotlib/axes.pyc in _process_plot_format(fmt)
93 # handle the multi char special cases and strip them from the
94 # string
---> 95 if fmt.find('--')>=0:
96 linestyle = '--'
97 fmt = fmt.replace('--', '')
AttributeError: 'numpy.ndarray' object has no attribute 'find'
知道怎么解决吗?
感谢。 丹
答案 0 :(得分:1)
set_index
方法默认返回一个新的DataFrame,而不是将其应用于inplace(实际上,大多数pandas函数都是类似的)。它有一个inplace
参数:
s.set_index('Date', inplace=True)
s.plot()
按预期工作!
注意:要将索引转换为DatetimeIndex,您可以使用to_datetime
:
s.index = s.index.to_datetime()
也就是说,s
.set_index('Date')
保持不变:
In [63]: s = pd.read_csv('spy.csv', na_values=[" "])
In [64]: s.set_index('Date')
Out[64]:
<class 'pandas.core.frame.DataFrame'>
Index: 5033 entries, 1993-01-29 00:00:00 to 2013-01-23 00:00:00
Data columns:
Open 5033 non-null values
High 5033 non-null values
Low 5033 non-null values
Close 5033 non-null values
Volume 5033 non-null values
Adj Close 5033 non-null values
dtypes: float64(5), int64(1)
In [65]: s
Out[65]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5033 entries, 0 to 5032
Data columns:
Date 5033 non-null values
Open 5033 non-null values
High 5033 non-null values
Low 5033 non-null values
Close 5033 non-null values
Volume 5033 non-null values
Adj Close 5033 non-null values
dtypes: float64(5), int64(1), object(1)