【问题标题】:Python-3, Pandas datareader and Yahoo Error RemoteDataError: Unable to read URLPython-3、Pandas datareader 和 Yahoo 错误 RemoteDataError:无法读取 URL
【发布时间】:2021-07-08 14:19:40
【问题描述】:

我正在尝试使用 yahoo Finance 导入股票数据 我正在使用代码:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
plt.style.use("fivethirtyeight")
%matplotlib inline

# For reading stock data from yahoo
from pandas_datareader.data import DataReader

# For time stamps
from datetime import datetime

运行良好。

    from pandas_datareader import data as pdr

import yfinance as yf
yf.pdr_override() # <== that's all it takes :-)

# download dataframe
# The tech stocks we'll use for this analysis
tech_list = ['WIPRO.BO', 'INFY.BO', 'TCS.BO', 'HAPPSTMNDS.BO']

# Set up End and Start times for data grab
end = datetime.now()
start = datetime(end.year - 1, end.month, end.day)


#For loop for grabing yahoo finance data and setting as a dataframe

for stock in tech_list:   
# Set DataFrame as the Stock Ticker

      globals()[stock] = pdr.get_data_yahoo(stock, start, end)

运行下面提到的代码时出现错误:

company_list = ['WIPRO.BO', 'INFY.BO', 'TCS.BO', 'HAPPSTMNDS.BO']
company_name = ["Wipro", "Infosys", "Tata_Consultancy_Services", "Happiest_Minds_Technologies"]

for company, com_name in zip(company_list, company_name):
    company["company_name"] = com_name
    
df = pd.concat(company_list, axis=0)
df.tail(10)

错误信息:

TypeError                                 Traceback (most recent call last)

<ipython-input-6-4753fcd8a7a3> in <module>
      3 
      4 for company, com_name in zip(company_list, company_name):
----> 5     company["company_name"] = com_name
      6 
      7 df = pd.concat(company_list, axis=0)

TypeError: 'str' object does not support item assignment

请帮我解决这个问题。

非常感谢^_^

【问题讨论】:

  • 您编写的 for 循环中的“公司”是您在上面定义的 company_list 中的字符串。您正在尝试为字符串分配一个新值(假设它是一个字典),这就是您收到错误的原因。
  • 那么,我应该怎么做才能让它没有错误?
  • 嗯,这取决于你想要什么输出。最终目标是什么?
  • 最终目标是在获取代码后的数据。我将制作一个 ARIMA 模型来预测它。

标签: python stock yahoo-finance


【解决方案1】:

ARIMA 用于预测单变量时间序列数据。不确定您要预测哪个功能。在下面想出了这个:(如果它适合你,请点赞!)

#For loop for grabing yahoo finance data and setting as a dataframe
lt=[]
for stock in tech_list:   
# Set DataFrame as the Stock Ticker

  temp_df = pdr.get_data_yahoo(stock, start, end)
  temp_df = temp_df.reset_index()
  lt.append(temp_df)
# Each element in the list is a DataFrame
df = pd.concat([lt[0],lt[1],lt[2],lt[3]], axis=0)
df = df.reset_index(drop=True)
print(df.head())


Output:

        Date        Open        High        Low         Close       Adj Close   Volume
    0   2020-07-09  224.850006  224.850006  219.800003  221.600006  221.103027  198245
    1   2020-07-10  221.600006  223.449997  219.449997  222.000000  221.502121  109461
    2   2020-07-13  224.000000  229.000000  222.750000  227.550003  227.039673  385205
    3   2020-07-14  229.000000  231.600006  224.199997  225.050003  224.545288  449975
    4   2020-07-15  237.000000  265.500000  233.800003  262.950012  262.360291  6313161

【讨论】:

    【解决方案2】:

    fix_yahoo_finance 软件包的名称已更改为 yfinance。所以请试试这个代码。

    from pandas_datareader import data as pdr
    
    import yfinance as yf
    yf.pdr_override() # <== that's all it takes :-)
    
    # download dataframe
    # The tech stocks we'll use for this analysis
    tech_list = ['WIPRO.BO', 'INFY.BO', 'TCS.BO', 'HAPPSTMNDS.BO']
    
    # Set up End and Start times for data grab
    end = datetime.now()
    start = datetime(end.year - 1, end.month, end.day)
    
    
    #For loop for grabing yahoo finance data and setting as a dataframe
    
    for stock in tech_list:   
    # Set DataFrame as the Stock Ticker
    
          globals()[stock] = pdr.get_data_yahoo(stock, start, end)
    

    get_data_yahoo() 方法返回一个 pandas 数据帧。因此,根据您想要做什么,您可以生成数据框列表并将列表连接在一起。

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2017-10-18
      • 2017-10-22
      • 2021-09-15
      相关资源
      最近更新 更多