ValueError:传递的项目数量错误500,放置意味着1,Python和Pandas

时间:2015-11-12 17:38:30

标签: python python-2.7 pandas matplotlib

我只从.xlsx文件导入两列,我想计算一些东西(平均值,偏差,百分比变化),然后我想绘制所有这些。第一部分没有给我任何问题,但是绘图确实存在。

我的代码如下所示:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib.mlab as mlab
import math

df = pd.read_excel('KDPrviIzbor.xlsx', sheetname='List1', index_col = 0)
ch = df.pct_change(periods=252)

ma = np.mean(ch)*100
std = np.std(ch)*100

x = np.linspace(-100,100,500)
plt.plot(x,mlab.normpdf(x,ma,std))

plt.show()

但是当我运行我的代码时,我收到了这个错误:

Traceback (most recent call last):
File "C:/Users/David/PythonStuff/normal_distribution.py", line 21, in <module> plt.plot(x,mlab.normpdf(x,ma,std))
File "C:\Python27\lib\site-packages\matplotlib\mlab.py", line 1579, in normpdf return 1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)
File "C:\Python27\lib\site-packages\pandas\core\ops.py", line 534, in wrapper dtype=dtype)
File "C:\Python27\lib\site-packages\pandas\core\series.py", line 220, in __init__ data = SingleBlockManager(data, index, fastpath=True)
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 3383, in __init__ ndim=1, fastpath=True)
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 2101, in make_block placement=placement)
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 77, in __init__ len(self.values), len(self.mgr_locs)))
ValueError: Wrong number of items passed 500, placement implies 1`

我认为问题在于:

plt.plot(x,mlab.normpdf(x,ma,std))

但我无法解决它。有什么建议?

1 个答案:

答案 0 :(得分:5)

您的示例中的

mastdpandas.Series个对象。原因是,应用于np.mean的{​​{1}}会返回pandas.DataFrame。 但是,mlab.normpdf(x,ma,std)需要浮点值或numpy数组作为输入。 您只需将pandas.Seriesma转换为std的浮点数即可。 我建议不要像你在评论中指出的那样使用ma = float(ma),因为这会减少小数。