AttributeError: 'dict' object has no attribute 'plot'

AttributeError: 'dict' object has no attribute 'plot'

from iexfinance import Stock
import matplotlib.pyplot as plt
tsla = Stock('TSLA')
tsla.get_close()
tsla.get_price()

from iexfinance import get_historical_data
from datetime import datetime
import pandas as pd
pd.set_option('display.max_rows', 1000)

start = datetime(2017, 2, 9)
end = datetime(2017, 5, 24)

df = get_historical_data("TSLA", start=start, end=end, output_format='json')
df.plot()
plt.show()


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call 
last)
<ipython-input-16-77b5455be846> in <module>()
      8 
      9 df = get_historical_data("TSLA", start=start, end=end, 
output_format='json')
---> 10 df.plot()
     11 plt.show()
     12 df

AttributeError: 'dict' object has no attribute 'plot'

我正在尝试获取从开始日期到结束日期使用不同价格创建的数据框的绘图。我尝试阅读不同的博客,但 none 似乎可以解决问题。我确信我犯了一个非常基本的错误。虽然,我无法弄清楚我在这里做错了什么,有什么修复建议吗?

您不能直接在 matplotlib 中绘制字典。它需要 x 值和 y 值。

您可以看到 type(df) 将是一个 <class 'dict'>,其中包含如下值:

{'TSLA': {'2017-02-09': {'open': 266.25, 'high': 271.18, 'low': 266.15, 'close': 269.2, 'volume': 7820222}}}

所以,如果你想把它画出来,你需要把它转换成pandas dataFrame

您的代码必须像这样更改:

from iexfinance import Stock
import matplotlib.pyplot as plt

tsla = Stock('TSLA')
tsla.get_close()
tsla.get_price()

from iexfinance import get_historical_data
from datetime import datetime
import pandas as pd

pd.set_option('display.max_rows', 1000)

start = datetime(2017, 2, 9)
end = datetime(2017, 5, 24)

df = get_historical_data("TSLA", start=start, end=end, output_format='json')
df = pd.DataFrame(df["TSLA"]).transpose() #transpose to get dates as x
df = df.drop(columns = "volume")  #deleted volume column, else it make other graphs smaller
df.index = pd.to_datetime(df.index) #change string to date format
df.plot()
plt.show();

你会得到这样的图表:

Graph