0

本周开始使用 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)

行 closes = [c.......] 给了我一个错误。

关于如何解决这个问题的任何建议?我正在开始我的旅程,实际上是在尝试导入标准普尔 500 指数过去一年的收盘价,然后将它们保存到 Excel。如果已经有一个片段可以做到这一点并且我可以从中学习,请告诉我。

谢谢你们。

4

2 回答 2

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

当您在列表 comp 中复制此代码时,c会依次为每个列指定名称,并且str[str]是无效操作。

总之,只需closes = df['Closes']对返回的结果进行操作即可获得该Closes列。

于 2017-12-21T19:45:48.360 回答
0

我认为您只是想将数据框转储到 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')
于 2017-12-22T14:06:59.530 回答