• 请问为什麽我无法用DataReader 抓到数据?


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Nicktang33 2024-04-18 12:38 采纳率: 0% 浏览 2 首页/ 编程语言 / 请问为什麽我无法用DataReader 抓到数据? python 请问为什麽我无法用DataReader 抓到数据? 谢谢 import numpy as npimport pandas as pdfrom pandas_datareader import data as webimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesimport datetime as dt start = dt.datetime (2023,1,1)end = dt.datetime (2024,1,1) df = web.DataReader ("NVDA", 'yahoo', start, end) *** AttributeError: 'NoneType' object has no attribute 'group' 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-18 12:38
      关注

      引自免费微信小程序:皆我百晓生

      看起来你在尝试使用pandas_datareader库从Yahoo Finance抓取NVIDIA(NVDA)的股票数据时遇到了一个问题。错误信息表明在尝试调用一个对象的方法时,这个对象是None类型,这意味着它没有被正确初始化或返回了空值。

      这个问题可能是由于几个原因导致的,包括网络连接问题、Yahoo Finance API 变化或者是pandas_datareader版本的问题。首先,我们可以尝试更新pandas_datareader库,确保你使用的是最新版。然后,检查网络连接是否正常,以及是否有防火墙或代理服务器阻止了数据获取。

      下面是按照这些步骤进行操作的代码示例:

      # 更新pandas_datareader库(如果有必要)
      !pip install --upgrade pandas-datareader
      
      import numpy as np
      import pandas as pd
      from pandas_datareader import data as web
      import matplotlib.pyplot as plt
      import matplotlib.dates as mdates
      import datetime as dt
      
      # 确保日期格式正确
      start = dt.datetime(2023, 1, 1)
      end = dt.datetime(2024, 1, 1)
      
      try:
          # 尝试获取数据
          df = web.DataReader("NVDA", "yahoo", start, end)
      except Exception as e:
          print(f"Error occurred while fetching data: {str(e)}")
      
      # 检查df是否为空
      if df is None or len(df) == 0:
          print("No data was retrieved. Please check your internet connection and try again.")
      else:
          # 如果数据成功获取,可以进一步处理数据
          df["Date"] = pd.to_datetime(df.index)
          df.set_index("Date", inplace=True)
          df.plot(kind="line", y="Close")
          plt.xlabel('Date')
          plt.ylabel('Closing Price')
          plt.title('NVDA Stock Price from 2023-01-01 to 2024-01-01')
          plt.show()
      

      这段代码首先会尝试更新pandas_datareader库,然后尝试读取数据,并捕获可能的异常。如果数据获取成功,它将绘制收盘价随时间变化的折线图。如果数据为空,则会提示用户检查网络连接并重试。如果你仍然遇到问题,可能需要检查你的Python环境设置或者联系Yahoo Finance支持以了解API的变化。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-18 12:38
      关注

      中午好🌞🌞🌞
      本答案参考ChatGPT-3.5

      根据你提供的代码和错误信息,可以看出你遇到了一个AttributeError错误,错误提示是" 'NoneType' object has no attribute 'group' "。

      该错误通常发生在使用pandas_datareader库的DataReader方法时,该方法无法从Yahoo Finance获取所需的数据,返回了一个空值(NoneType)。原因可能是以下几种情况之一:

      1. 数据源不可用:可能是Yahoo Finance数据源暂时不可用或者受限制,导致无法获取数据。在这种情况下,你可以尝试使用其他数据源,例如Alpha Vantage或Quandl。

      2. 日期范围错误:可能指定的开始日期和结束日期不在有效范围内,导致无法获取数据。确保指定的日期范围合理且在有效的日期范围内。

      解决方案:

      1. 更换数据源:尝试使用其他可用的数据源,比如Alpha Vantage或Quandl。修改代码中的数据源参数即可。

      2. 检查日期范围:确认指定的开始日期和结束日期在有效范围内。可以使用较早的日期作为开始日期,或者使用当前日期作为结束日期,以确保获取数据。

      修改之后的代码示例:

      import numpy as np
      import pandas as pd
      from pandas_datareader import data as web
      import matplotlib.pyplot as plt
      import matplotlib.dates as mdates
      import datetime as dt
      
      start = dt.datetime(2023, 1, 1)
      end = dt.datetime(2024, 1, 1)
      
      # 更换数据源为Alpha Vantage
      df = web.DataReader("NVDA", "av-daily", start, end, api_key='YOUR_API_KEY_HERE')
      
      # 输出DataFrame的前几行数据
      print(df.head())
      

      注意:需要替换 "YOUR_API_KEY_HERE" 为你在Alpha Vantage上注册的API密钥。此外,确保已安装Alpha Vantage包(使用 pip install alpha_vantage 命令进行安装)。

      通过更换数据源和调整日期范围,你应该能够成功获取到数据并解决你的问题。

      展开全部

      评论
    • GISer Liu 2024-04-18 12:39
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      问题分析:
      根据提供的代码和错误信息,问题出现在尝试使用 pandas_datareader 库中的 DataReader
      函数时出现了一个属性错误。具体错误信息是 'NoneType' object has no attribute 'group',这表明在调用
      web.DataReader 函数时返回了一个 NoneType 对象,而不是期望的数据对象。
      解决方案:

      1. 检查数据源是否可用 :首先,需要确认 pandas_datareader 库能够访问和获取数据。有时候数据源可能会出现问题,导致无法获取数据。
      2. 确认数据源的正确性 :确保你正在使用的数据源和代码中指定的数据源相匹配。在这里,你使用了 yahoo 作为数据源,确保该数据源能够提供所需的数据。
      3. 检查变量命名和参数 :确保变量 startend 的命名正确,并且确保它们被正确传递给 web.DataReader 函数。
      4. 检查数据源是否支持所需的数据 :有时候数据源可能不支持某些特定的数据,或者是因为时间范围太长或太短而无法获取数据。
      5. 检查网络连接 :确保你的网络连接正常,有时候网络问题也会导致无法获取数据。
        代码修改建议:
        pythonCopy code
        import numpy as np
        import pandas as pd
        from pandas_datareader import data as web
        import matplotlib.pyplot as plt
        import matplotlib.dates as mdates
        import datetime as dt
        start = dt.datetime(2023, 1, 1)
        end = dt.datetime(2024, 1, 1)
        # 尝试使用不同的数据源,如 'yahoo'、'google' 等
        data_source = 'yahoo'
        try:
        # 尝试获取数据
        df = web.DataReader("NVDA", data_source, start, end)
        # 如果成功获取数据,进行后续操作
        # 可以添加打印语句确认是否成功获取数据
        print("成功获取数据:", df.head())
        # 在这里可以添加对数据的处理和分析
        except Exception as e:
        # 如果出现异常,打印异常信息
        print("获取数据时出现异常:", e)
        
        在这个修改后的代码中,我们添加了一个 try-except 块来捕获可能出现的异常。如果 web.DataReader
        函数返回了一个异常,它会被捕获并打印出来,以便于我们更好地理解问题所在。
        此外,我还建议尝试使用不同的数据源,如 'yahoo'、'google' 等,看是否能够成功获取数据。有时候,切换数据源也可以解决获取数据的问题。
        希望这些建议能够帮助你解决问题,如果还有其他疑问或问题,请随时提出。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    冰蝎加密 WebShell 过杀软
    c语言:矩阵交换
    【OS】新国立nus操作系统知识点(中文版)
    ThreadLocal底层源码分析
    自动化安装Nginx脚本:简化您的服务器配置
    【小5聊】使用div+css布局绘制32支球队比赛对阵图,拭目以待冠军花落谁家
    【案例分享】配置设备作为PPPoE Client,实现接入Internet
    Paraverse平行云LarkXR:支持SR/VR/AR/MR多种客户端接入的全栈实时云渲染解决方案
    线程的同步与互斥
    数字ID和字符串ID互相转化
  • 原文地址:https://ask.csdn.net/questions/8090542