在pandas plotting.py代码中缺少全局conv对象?
我正在尝试用pandas库做一些例子。我从Yahoo加载一个数据表(DataFrame),然后把它导出到一个文件,再把这个文件读入到一个数据表中,接着创建一些我想要绘图的序列(Series)。但是,当我使用绘图的代码时,出现了一个错误。这个错误是NameError: global name 'conv' is not defined。下面是代码和完整的错误信息。
import datetime
import pandas as pd
import pandas.io.data
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rc('figure', figsize=(8, 7))
aapl = pd.io.data.get_data_yahoo('AAPL',
start=datetime.datetime(2006, 10, 1),
end=datetime.datetime(2014, 4, 10))
aapl.to_csv('data/aapl_ohlc.csv')
df = pd.read_csv('data/aapl_ohlc.csv', index_col='Date', parse_dates=True)
close_px = df['Adj Close']
mavg = pd.rolling_mean(close_px, 40)
close_px.plot(label='AAPL')
mavg.plot(label='mavg')
plt.legend()
它抛出了以下错误
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-58-34eecf8ee548> in <module>()
1 from pylab import *
----> 2 close_px.plot(label='AAPL')
3 mavg.plot(label='mavg')
4 plt.legend()
C:\Python33\lib\site-packages\pandas\tools\plotting.py in plot_series(series, label, kind, use_index, rot, xticks, yticks, xlim, ylim, ax, style, grid, legend, logx, logy, secondary_y, **kwds)
1827 secondary_y=secondary_y, **kwds)
1828
-> 1829 plot_obj.generate()
1830 plot_obj.draw()
1831
C:\Python33\lib\site-packages\pandas\tools\plotting.py in generate(self)
903 self._compute_plot_data()
904 self._setup_subplots()
--> 905 self._make_plot()
906 self._post_plot_logic()
907 self._adorn_subplots()
C:\Python33\lib\site-packages\pandas\tools\plotting.py in _make_plot(self)
1354
1355 if self._is_datetype():
-> 1356 left, right = _get_xlim(lines)
1357 ax.set_xlim(left, right)
1358
C:\Python33\lib\site-packages\pandas\tools\plotting.py in _get_xlim(lines)
2507 for l in lines:
2508 x = l.get_xdata()
-> 2509 left = min(_maybe_convert_date(x[0]), left)
2510 right = max(_maybe_convert_date(x[-1]), right)
2511 return left, right
C:\Python33\lib\site-packages\pandas\tools\plotting.py in _maybe_convert_date(x)
2514 def _maybe_convert_date(x):
2515 if not com.is_integer(x):
-> 2516 conv_func = conv._dt_to_float_ordinal
2517 if isinstance(x, datetime.time):
2518 conv_func = conv._to_ordinalf
NameError: global name 'conv' is not defined
根据评论更新
代码
import pandas.tseries.converter
print(dir(pandas.tseries.converter))
输出
['AutoLocator', 'DatetimeConverter', 'Formatter', 'FreqGroup', 'HOURS_PER_DAY', 'Index', 'Locator', 'MINUTES_PER_DAY', 'MUSECONDS_PER_DAY', 'MilliSecondLocator', 'PandasAutoDateFormatter', 'PandasAutoDateLocator', 'Period', 'PeriodConverter', 'PeriodIndex', 'SECONDS_PER_DAY', 'TimeConverter', 'TimeFormatter', 'TimeSeries_DateFormatter', 'TimeSeries_DateLocator', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '_annual_finder', '_daily_finder', '_dt_to_float_ordinal', '_from_ordinal', '_get_default_annual_spacing', '_monthly_finder', '_quarterly_finder', '_to_ordinalf', 'com', 'compat', 'date_range', 'dates', 'datetime', 'frequencies', 'get_datevalue', 'get_finder', 'has_level_label', 'lib', 'lrange', 'nonsingular', 'np', 'period_break', 'pydt', 'register', 'relativedelta', 'time2num', 'timedelta', 'tools', 'units']
1 个回答
1
开始一个新的IPython Notebook会话解决了我的问题。我也不太确定自己到底做了什么,但这次教训我记住了。
有一点需要注意的是,我确实需要在
from imp import reload
这个文件 lib\site-packages\pandas\tools\plotting.py 中添加一些内容。