【问题标题】:Stock price Import issue for a newbie新手的股票价格导入问题
【发布时间】:2017-12-23 00:15:22
【问题描述】:

本周开始使用 python 的新手。我一直在毫无畏惧地阅读 Datacamp 和其他一些在线资源以及 Python。

我想测试一下是否可以从互联网上导入一些数据价格和复制代码。由于错误,我无法使其工作:TypeError: string indices must be integers on line 10

import pandas_datareader as pdr #needed to read data from yahoo

#df = pdr.get_data_yahoo('AAPL')
#print (df.Close)

stock =('AAPL')
start_date = '2017-01-01'
end_date = '2017-12-10'

closes = [c['Close'] for c in pdr.get_data_yahoo(stock, start_date, 
end_date)]

for c in closes:
    print (c)

The line closes = [c.......] 给我一个错误。

关于如何解决这个问题的任何建议?我正在开始我的旅程,实际上是在尝试导入 S&P500 过去一年的收盘价,然后将它们保存到 Excel。如果有一个 sn-p 已经这样做并且我可以学习,请告诉我。

谢谢大家。

【问题讨论】:

  • 请发布您看到的错误消息

标签: python pandas pandas-datareader


【解决方案1】:

get_data_yahoo 的调用返回单个数据帧。

df = pdr.get_data_yahoo(stock, start_date, end_date)
df.head()

                  Open        High         Low       Close   Adj Close  \
Date                                                                     
2017-01-03  115.800003  116.330002  114.760002  116.150002  114.311760   
2017-01-04  115.849998  116.510002  115.750000  116.019997  114.183815   
2017-01-05  115.919998  116.860001  115.809998  116.610001  114.764473   
2017-01-06  116.779999  118.160004  116.470001  117.910004  116.043915   
2017-01-09  117.949997  119.430000  117.940002  118.989998  117.106812   

              Volume  
Date                  
2017-01-03  28781900  
2017-01-04  21118100  
2017-01-05  22193600  
2017-01-06  31751900  
2017-01-09  33561900  

type(df)
pandas.core.frame.DataFrame

同时,您正在尝试迭代此返回的数据帧。默认情况下,for 循环将遍历列。例如:

for c in df:
    print(c)

Open
High
Low
Close
Adj Close
Volume

当您在列表组合中复制此代码时,c 会依次赋予每个列名,str[str] 是无效操作。

综上所述,只要对返回的结果做closes = df['Closes']就足以获得Closes列。

【讨论】:

  • 谢谢!因此,如果我想下载 S&P 500 过去 3 年的每日收盘价,我需要运行一个循环并附加到 DataFrame 中吗?除了 get_data_yahoo 之外,还有没有调用 Yahoo 来返回 500 只股票列表的最后 x 天收盘价?
  • @Confusedxx 我对这个 API 的了解到此结束……您可能想问一个新问题。祝你好运!
【解决方案2】:

我认为您只是想将数据框转储到 Excel 电子表格中。这会让你到达那里。

import pandas as pd
import pandas_datareader as pdr

df = pdr.get_data_yahoo('AAPL')
df.head(2)

Out[12]:
                 Open       High    Low      Close  Adj Close     Volume
Date
2009-12-31  30.447144  30.478571  30.08  30.104286  26.986492   88102700
2010-01-04  30.490000  30.642857  30.34  30.572857  27.406532  123432400

df.to_excel('dump_aapl.xlsx')

如果您只想要 关闭 列:

df['Close'].to_excel('dump_aapl.xlsx')

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2014-10-16
    相关资源
    最近更新 更多