我试图绘制股票百分比变化的直方图 我的代码看起来像:
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)
但是可以得到它......
不知道如何通过这个......
答案 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()
使用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