我已经通过API(来自Alphavantage)下载了一些股价数据:
response = requests.get("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=XXX")
data = response.json()
df = pd.DataFrame.from_dict(data["Time Series (Daily)"], orient='index')
,然后将列转换为数字(df.apply(pd.to_numeric))
This is output in Jupyter-日期和股价的非常标准的矩阵。
我不知道如何操作数据(例如乘以df.loc[df['1. open'] > 93, '1. open'] *= 2
),这通常很容易。我认为索引数据有问题。我尝试过df.index = pd.to_datetime(df.index)
使其变为timedate格式,还尝试了重命名索引。另外,如果我尝试将数据框移到csv文件中,则不会下载索引列。
我认为问题在于索引数据仍然是字符串,但是不理解为什么上面的代码没有将它变成日期时间。
我收到的错误消息是('>'在'str'和'int'的实例之间不支持),但是其他问题的解决方案也不起作用。
抱歉,我的问题很漫长,非常感谢您的帮助!
答案 0 :(得分:1)
该列的名称不是'open'
,而是'1. open'
。 (编辑:好的,已对此问题进行了编辑以解决此问题,但是仍然有一个'open'
。)
更改此示例,您的示例将因错误而失败
TypeError:“ str”和“ int”的实例之间不支持“>”
表示列中不包含数字,而是字符串(也可以通过df.info()
找到)。您可以使用df.astype(float)
来解决此问题,或者在创建DataFrame
时指定所需的类型,而有效地使用pd.DataFrame.from_dict(data['Time Series (Daily)'], orient='index', dtype=float)
。
在第一种情况下,
df = df.astype(float)
df.loc[df['1. open'] > 93, '1. open'] *= 2
将实现您想要的。