熊猫数据框索引值作为对象而不是日期时间

时间:2018-09-02 07:48:06

标签: python pandas dataframe

我已经通过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'的实例之间不支持),但是其他问题的解决方案也不起作用。

抱歉,我的问题很漫长,非常感谢您的帮助!

1 个答案:

答案 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

将实现您想要的。