Python .py代码中缺少全局conv对象?
我试着用熊猫做例子。我从Yahoo加载一个数据帧,将其导出到一个文件,将其读入一个数据帧,然后创建我想要绘制的系列。当我使用绘图代码时,它会抛出一个错误。错误为NameError:未定义全局名称“conv”。代码和完整错误如下所示Python .py代码中缺少全局conv对象?,python,plot,pandas,Python,Plot,Pandas,我试着用熊猫做例子。我从Yahoo加载一个数据帧,将其导出到一个文件,将其读入一个数据帧,然后创建我想要绘制的系列。当我使用绘图代码时,它会抛出一个错误。错误为NameError:未定义全局名称“conv”。代码和完整错误如下所示 import datetime import pandas as pd import pandas.io.data from pandas import Series, DataFrame import matplotlib.pyplot as plt import
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
输出
['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']
启动一个新的IPython笔记本会话可以清除它。我真的不确定我对自己做了什么,但我从中学到了教训 值得注意的是,我必须补充一点
from imp import reload
对于文件lib\site packages\pandas\tools\plotting.py,如果查看
plotting.py
中的代码,可以看到conv
是导入后为pandas.tseries.converter
指定的名称。输入import pandas.tseries.converter
时会发生什么?我看起来对python很陌生。我仍然会遇到相同的错误。不,我的意思是,如果在控制台输入import pandas.tseries.converter
,然后输入print(dir(pandas.tseries.converter))
?暂时将代码放在一边。由于输出太长,无法发表评论,所以添加到问题的底部。
from imp import reload