Beater_Kirito_A 2023-03-22 21:16 采纳率: 100%
浏览 23
已结题

关于#python#的问题,如何解决?

按着写了代码,没啥语法错误,为啥运行报错?新求问



```python
# 导入所需的库
import pandas as pd
import pandas_datareader.data as web
import statsmodels.api as sm
import matplotlib.pyplot as plt

# 获取宁德时代的股票数据,代码为 300750.SZ
start = '2022-01-01' # 起始日期
end = '2023-12-31' # 结束日期
data = web.DataReader('300750.SZ', 'yahoo', start, end) # 从 Yahoo 财经获取数据

# 查看数据的前五行
data.head()

# 提取收盘价作为预测目标
close = data['Close']

# 绘制收盘价的时间序列图
plt.plot(close)
plt.title('Ningde Times Stock Price')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.show()

# 使用 AIC 准则进行 ARMA 模型的阶数选择
aic = pd.DataFrame() # 创建一个空的数据框用于存储 AIC 值
for p in range(5): # 遍历自回归阶数 p 的可能取值
    for q in range(5): # 遍历移动平均阶数 q 的可能取值
        try: # 尝试建立和拟合 ARMA(p,q) 模型
            model = sm.tsa.ARMA(close, order=(p,q)) # 建立模型
            result = model.fit() # 拟合模型
            aic.loc[p,q] = result.aic # 记录 AIC 值
        except: # 如果出现错误,跳过该组合
            continue

# 找到最小的 AIC 值对应的 p 和 q 值
min_aic = aic.min().min() # 最小的 AIC 值
p_min, q_min = aic.stack().idxmin() # 最小 AIC 值对应的 p 和 q 值

# 输出最优的模型阶数
print(f'The optimal order of the ARMA model is ({p_min},{q_min})')

# 使用最优的模型阶数重新建立和拟合 ARMA 模型,并查看模型摘要
model_opt = sm.tsa.ARMA(close, order=(p_min,q_min)) # 建立最优模型
result_opt = model_opt.fit() # 拟合最优模型
print(result_opt.summary()) # 输出模型摘要

# 对未来 10 天进行预测,并绘制预测结果和真实数据的对比图
forecast = result_opt.forecast(steps=10) # 预测未来 10 天的收盘价,返回预测值,标准误差和置信区间三个数组
pred = forecast[0] # 预测值数组

# 创建一个新的数据框用于存储真实数据和预测数据,并计算百分比变化率
df = pd.DataFrame()
df['real'] = close[-10:] # 真实数据为最近 10 天的收盘价
df['pred'] = pred # 预测数据为预测的未来 10 天的收盘价
df['real_pct_change'] = df['real'].pct_change

报错
D:\0\python.exe D:\pythonProject\demo\demo01.py 
Traceback (most recent call last):
  File "D:\pythonProject\demo\demo01.py", line 10, in <module>
    data = web.DataReader('300750.SZ', 'yahoo', start, end) # 从 Yahoo 财经获取数据
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\0\Lib\site-packages\pandas\util\_decorators.py", line 211, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "D:\0\Lib\site-packages\pandas_datareader\data.py", line 379, in DataReader
    ).read()
      ^^^^^^
  File "D:\0\Lib\site-packages\pandas_datareader\base.py", line 253, in read
    df = self._read_one_data(self.url, params=self._get_params(self.symbols))
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\0\Lib\site-packages\pandas_datareader\yahoo\daily.py", line 153, in _read_one_data
    data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: string indices must be integers, not 'str'

进程已结束,退出代码1


  • 写回答

2条回答 默认 最新

  • 海洋 之心 2022年度博客之星人工智能领域TOP 1 2023-03-22 21:28
    关注

    这是你使用字符串作为pandas DataFrame的列索引或行索引,导致出现了类型错误,他需要使用整形作为索引

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器