pandas_datareader, ImportError: cannot import name 'urlencode'
pandas_datareader, ImportError: cannot import name 'urlencode'
我在 pandas_datareader 上工作正常,然后今天我从下面 link 安装了两个 yahoo finance 试图解决另一个问题。
No data fetched Web.DataReader Panda
pip install yfinance
pip install fix_yahoo_finance
以上安装后,pandas_datareader不能再使用了。我用谷歌搜索了一下,确实添加了以下导入,但 pandas_datareader 仍然无法正常工作。
from urllib.parse import urlencode
这是错误:非常感谢您的帮助。
from pandas_datareader import data
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\__init__.py", line 2, in <module>
from .data import (
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\data.py", line 11, in <module>
from pandas_datareader.av.forex import AVForexReader
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\av\__init__.py", line 6, in <module>
from pandas_datareader.base import _BaseReader
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\base.py", line 7, in <module>
from pandas.io.common import urlencode
ImportError: cannot import name 'urlencode'
'''
好的,我通过升级 pandas datareader
解决了这个问题
pip install pandas-datareader --upgrade
``
Thanks
原因是 pandas 从他们的库中删除了 urlencode。因此,对于 pandas 的较新版本,这将永远行不通。安装其他库或升级不会解决问题。
解决方法是使用 Python3 的 urlencode 版本。幸运的是,Python3似乎有一个替代品下降:
替换为:
from pandas.io.common import urlencode
与:
from urllib.parse import urlencode
并照常使用 urlencode
我遇到了完全相同的错误。我正在使用 python anaconda 2020_07 版本。
解决方案是使用来自 anaconda 软件包的最新 pandas-datareader v0.9。如果您使用来自 conda-forge 的 pandas-datareader 包,它使用旧版本 v0.81,您将遇到错误。这是截至 2020 年 12 月 20 日的状态。
https://anaconda.org/anaconda/pandas-datareader
我运行下面的命令安装最新的pandas-datareader
包。
conda install -c anaconda pandas-datareader
错误消息消失,问题已解决。
编辑:如果 conda 稍后将 pandas-datareader
降级回 conda-forge 旧版本,则有一个修复。参见
以上回答正确。我刚刚写了一些实现它的代码:
import os
basePath = os.path.join(os.path.dirname(os.__file__),'site-packages','pandas_datareader','base.py')
# read base.py
with open(basePath, 'r') as f:
lines = f.read()
find = 'from pandas.io.common import urlencode'
replace = """from urllib.parse import urlencode"""
# add new text
lines = lines.replace(find,replace)
# overwrite old 'basedatatypes.py'
with open(basePath, 'w') as f:
f.write(lines)
initPath = os.path.join(os.path.dirname(os.__file__),'site-packages','pandas_datareader','iex','__init__.py')
# read iex/__init__.py
with open(initPath, 'r') as f:
lines = f.read()
# add new text
lines = lines.replace(find,replace)
# overwrite old 'basedatatypes.py'
with open(initPath, 'w') as f:
f.write(lines)
</pre>
我在 pandas_datareader 上工作正常,然后今天我从下面 link 安装了两个 yahoo finance 试图解决另一个问题。
No data fetched Web.DataReader Panda
pip install yfinance
pip install fix_yahoo_finance
以上安装后,pandas_datareader不能再使用了。我用谷歌搜索了一下,确实添加了以下导入,但 pandas_datareader 仍然无法正常工作。
from urllib.parse import urlencode
这是错误:非常感谢您的帮助。
from pandas_datareader import data
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\__init__.py", line 2, in <module>
from .data import (
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\data.py", line 11, in <module>
from pandas_datareader.av.forex import AVForexReader
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\av\__init__.py", line 6, in <module>
from pandas_datareader.base import _BaseReader
File "C:\Users\yongn\Anaconda3\lib\site-packages\pandas_datareader\base.py", line 7, in <module>
from pandas.io.common import urlencode
ImportError: cannot import name 'urlencode'
'''
好的,我通过升级 pandas datareader
解决了这个问题pip install pandas-datareader --upgrade
``
Thanks
原因是 pandas 从他们的库中删除了 urlencode。因此,对于 pandas 的较新版本,这将永远行不通。安装其他库或升级不会解决问题。
解决方法是使用 Python3 的 urlencode 版本。幸运的是,Python3似乎有一个替代品下降:
替换为:
from pandas.io.common import urlencode
与:
from urllib.parse import urlencode
并照常使用 urlencode
我遇到了完全相同的错误。我正在使用 python anaconda 2020_07 版本。
解决方案是使用来自 anaconda 软件包的最新 pandas-datareader v0.9。如果您使用来自 conda-forge 的 pandas-datareader 包,它使用旧版本 v0.81,您将遇到错误。这是截至 2020 年 12 月 20 日的状态。
https://anaconda.org/anaconda/pandas-datareader
我运行下面的命令安装最新的pandas-datareader
包。
conda install -c anaconda pandas-datareader
错误消息消失,问题已解决。
编辑:如果 conda 稍后将 pandas-datareader
降级回 conda-forge 旧版本,则有一个修复。参见
以上回答正确。我刚刚写了一些实现它的代码:
import os
basePath = os.path.join(os.path.dirname(os.__file__),'site-packages','pandas_datareader','base.py')
# read base.py
with open(basePath, 'r') as f:
lines = f.read()
find = 'from pandas.io.common import urlencode'
replace = """from urllib.parse import urlencode"""
# add new text
lines = lines.replace(find,replace)
# overwrite old 'basedatatypes.py'
with open(basePath, 'w') as f:
f.write(lines)
initPath = os.path.join(os.path.dirname(os.__file__),'site-packages','pandas_datareader','iex','__init__.py')
# read iex/__init__.py
with open(initPath, 'r') as f:
lines = f.read()
# add new text
lines = lines.replace(find,replace)
# overwrite old 'basedatatypes.py'
with open(initPath, 'w') as f:
f.write(lines)
</pre>