调用DataFrame/Series的plot()方法报错:NameError: name '_converter' is not defined
Fixing
NameError: name '_converter' is not defined in Pandas 1.x + Python 3.6 我之前在Python 3.6环境下用Pandas的plot()方法时,也碰到过一模一样的NameError,折腾了一阵终于找到根源和解决办法,分享给你:
核心原因
这个错误本质是Python 3.6的兼容性限制:Pandas从1.2.0版本开始就不再支持Python 3.6了,如果你装的是Pandas 1.2+版本,在Python 3.6里运行时,内部的_converter模块(负责处理日期轴的转换)会因为版本不兼容无法被正确导入。另外,matplotlib版本过高也会和旧版Pandas/3.6环境冲突。
解决方案(按优先级排序)
1. 降级Pandas到兼容Python 3.6的版本
这是最彻底的解决办法,Python 3.6最高支持Pandas 1.1.x系列,推荐安装1.1.5版本:
# 先卸载当前版本 pip uninstall pandas -y # 安装兼容版本 pip install pandas==1.1.5
2. 手动导入Pandas的转换器模块
如果不想降级Pandas,可以在代码开头手动导入_converter模块,强制加载它:
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 手动导入并初始化转换器 from pandas.plotting import _converter _converter._WARN = False ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) ts = ts.cumsum() ts.plot() plt.show() # 记得加上这个显示图像
3. 同步降级matplotlib到兼容版本
如果上面两步还不行,检查matplotlib版本——matplotlib从3.4.0开始也不再支持Python 3.6了,建议安装3.3.4版本:
pip install matplotlib==3.3.4
验证方法
运行修改后的代码后,如果能正常弹出折线图,就说明问题解决了。如果还是报错,可以检查一下当前的版本:
import sys import pandas as pd import matplotlib print(pd.__version__) print(matplotlib.__version__) print(sys.version)
确保Pandas是1.1.x,matplotlib是3.3.x,Python是3.6.x。
内容的提问来源于stack exchange,提问作者wilson_smyth
相关产品推荐
相关产品推荐

