【问题标题】:import pandas_datareader gives ImportError: cannot import name 'is_list_like'import pandas_datareader 给出 ImportError: cannot import name 'is_list_like'
【发布时间】:2018-10-27 22:11:00
【问题描述】:

我在虚拟环境中工作。我可以在没有任何错误的情况下在 pandas 中导入和工作,但是当我尝试 import pandas_datareader

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
from matplotlib import style
import pandas_datareader as web

它给出了以下错误-

Traceback (most recent call last):
  File "stock.py", line 6, in <module>
    import pandas_datareader as web
  File "/home/xxxxx/django-apps/env/lib/python3.5/site-packages/pandas_datareader/__init__.py", line 2, in <module>
    from .data import (DataReader, Options, get_components_yahoo,
  File "/home/xxxxx/django-apps/env/lib/python3.5/site-packages/pandas_datareader/data.py", line 14, in <module>
    from pandas_datareader.fred import FredReader
  File "/home/xxxxx/django-apps/env/lib/python3.5/site-packages/pandas_datareader/fred.py", line 1, in <module>
    from pandas.core.common import is_list_like
ImportError: cannot import name 'is_list_like'
(env) xxxxx@xxxxx-yyyyy ~/pyt $ python stock.py
Traceback (most recent call last):
  File "stock.py", line 6, in <module>
    import pandas_datareader
  File "/home/xxxxx/django-apps/env/lib/python3.5/site-packages/pandas_datareader/__init__.py", line 2, in <module>
    from .data import (DataReader, Options, get_components_yahoo,
  File "/home/xxxxx/django-apps/env/lib/python3.5/site-packages/pandas_datareader/data.py", line 14, in <module>
    from pandas_datareader.fred import FredReader
  File "/home/xxxxx/django-apps/env/lib/python3.5/site-packages/pandas_datareader/fred.py", line 1, in <module>
    from pandas.core.common import is_list_like
ImportError: cannot import name 'is_list_like'

【问题讨论】:

  • 你的熊猫版本是多少?
  • 熊猫版本是0.23.0
  • 您的 pandas_datareader 版本似乎与全新的 Pandas 0.23 不兼容
  • 很有可能。让我清除它并安装旧版本。那我再看看谢谢。
  • @MaxU 在 0.21.0 上运行良好。谢谢

标签: python pandas pandas-datareader


【解决方案1】:

我遇到了这个错误,我找到了解决它的方法。我的 pandas 和 pandas_datareader 版本是 0.23 和 0.6。

Python 3.6.5 (default, Apr  1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas_datareader
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/pandas_datareader/__init__.py", line 2, in <module>
    from .data import (DataReader, Options, get_components_yahoo,
  File "/usr/local/lib/python3.6/dist-packages/pandas_datareader/data.py", line 14, in <module>
    from pandas_datareader.fred import FredReader
  File "/usr/local/lib/python3.6/dist-packages/pandas_datareader/fred.py", line 1, in <module>
    from pandas.core.common import is_list_like
ImportError: cannot import name 'is_list_like'

因为is_list_like被移动到pandas.api.types,所以我更改了图中突出显示的fred.py文件。我将from pandas.core.common import is_list_like 替换为from pandas.api.types import is_list_like,就可以了。

【讨论】:

  • 您可以在导入pandas_datareader之前放置pd.core.common.is_list_like = pd.api.types.is_list_like,这样您就不需要编辑fred.py
  • 我安装了早期版本的 Pandas,它运行良好。因此,如果有人想使用 pandas 0.23,那么这似乎是正确的方法。
  • 这项工作也是如此,我所做的只是打开文件并将第 1 行更改为:from pandas.api.types import is_list_like 我不明白的是,这似乎是一段时间的补丁以前,最新的库有这个,这是我的,不包括这个补丁。无论如何,谢谢你的提示。
  • @DataGirl 我在写import pandas_datareader之前把它放在了我的python脚本中。
  • 修改库源绝对是一种应该避免的解决方法。如果您修改突出显示的路径,您将打破系统范围的 python3.6 的 pandas... 这是您真正想要避免的事情。附言。使用 pandas_reader 0.6 将 pandas 降级到 0.23.0 对我不起作用。
【解决方案2】:

这是因为 is_list_like 在 Pandas 0.23.0 中已从 pandas.core.common 移动到 pandas.api.types。此问题已修复here,并将成为 Pandas Datareader 0.7.0 版本的一部分。目前,我建议使用开发版的 Datareader。安装说明见documentation

【讨论】:

    【解决方案3】:

    编辑 /your_installation_path/python2.7/site-packages/pandas_datareader 中的 fred.py 文件并替换如下:

    from pandas.core.common import is_list_like #COMMENT IT

    从 pandas.api.types 导入 is_list_like #ADD

    【讨论】:

      【解决方案4】:

      在 Ubuntu 18.04 中,使用 Python 3.6 我通过以下方式解决了错误。

      cd /home/username/.local/lib/python3.6/site-packages/pandas_datareader

      subl fred.py
      

      我修改了第一行代码

      from pandas.core.common import is_list_like
      

      from pandas.api.types import is_list_like
      

      【讨论】:

        【解决方案5】:

        在本地更改任何文件并绕过包管理器 (pip) 的版本控制的解决方案是像这样定义 is_list_like

        import pandas as pd
        pd.core.common.is_list_like = pd.api.types.is_list_like
        

        就在之前

        import pandas_datareader as web
        

        此外,此问题将在 pandas_datareader 0.7.0 版本中修复。

        【讨论】:

        • 这应该是公认的答案,因为它不需要更改任何文件即可工作。
        • 同意,在 datareader 0.7 准备好之前,1 行代码即可解决问题
        【解决方案6】:

        如果您不使用 pandas_datareader。如果没有安装,您需要检查您的 conda 环境数据阅读器是否安装,然后您可以通过这种方式导入。

        import pandas as pd
        pd.core.common.is_list_like = pd.api.types.is_list_like
        import pandas_datareader as web
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-17
          • 2019-07-04
          • 2019-07-20
          • 2016-05-16
          • 2020-07-16
          • 2019-06-10
          相关资源
          最近更新 更多