直方图中绘制的百分比变化

时间:2016-12-12 16:15:10

标签: python pandas matplotlib error-handling

我试图绘制股票百分比变化的直方图 我的代码看起来像:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv("M:/Trading/1.JOZO/ALXN.csv")
dataframe = (data['Adj Close'])
zmena1 = (dataframe.pct_change(periods = 1)*100)
data["Zmena"] = zmena1
plt.hist(zmena1, bins = "auto", range = "auto" )
plt.show

但是我收到了错误:

 mn, mx = [mi + 0.0 for mi in range]

TypeError: Can't convert 'float' object to str implicitly

我试过str(zmena1)但是可以得到它...... 不知道如何通过这个......

1 个答案:

答案 0 :(得分:2)

从csv文件的名称,我可以猜测您的数据可以从雅虎财务中检索,因此使用Remote Access datareader我正在下载所有2016年数据:

import datetime
data = web.DataReader('ALXN', data_source='yahoo', 
                      start=datetime.datetime(2016, 1, 1))

现在我可以计算[0,100]范围内的百分比变化

data['Zmena'] = data['Adj Close'].pct_change(periods=1)*100

从那里,我肯定会使用内置的DataFrame.hist函数:

data['Zmena'].hist()

Histogram

使用plt.hist

如果您确实想要使用plt.hist,则需要过滤掉NaN(不是数字),特别是您将始终有一个作为第一个条目:

print(data[['Adj Close','Zmena']].head())

             Adj Close     Zmena
Date                            
2016-01-04  184.679993       NaN
2016-01-05  184.899994  0.119126
2016-01-06  184.070007 -0.448884
2016-01-07  174.369995 -5.269741
2016-01-08  168.130005 -3.578592

所以,为了使用plt.hist:

plt.hist(data.Zmena.dropna())

另一个问题是你指定bins = "auto", range = "auto",如果你想要默认,你真的应该不传递它们。请参阅pyplot.hist

上两个参数的文档