Python-3, Pandas datareader and Yahoo Error RemoteDataError: Unable to read URL

Python-3, Pandas datareader and Yahoo Error RemoteDataError: Unable to read URL

我正在尝试使用 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

请帮我解决这个问题。

非常感谢^_^

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() 方法 returns 一个 pandas 数据帧。因此,根据你想做什么,你可以生成数据帧列表并将列表连接在一起。

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