在pandas plotting.py代码中缺少全局conv对象?

2 投票
1 回答
661 浏览
提问于 2025-04-18 02:32

我正在尝试用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 中添加一些内容。

撰写回答