ValueError:错误的项目数通过 500,位置暗示 1,Python 和 Pandas
Posted
技术标签:
【中文标题】ValueError:错误的项目数通过 500,位置暗示 1,Python 和 Pandas【英文标题】:ValueError: Wrong number of items passed 500, placement implies 1, Python and Pandas 【发布时间】:2016-02-14 03:38:06 【问题描述】:我只从 .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))
但我无法解决。有什么建议?
【问题讨论】:
你能展示一下df
的样子吗?例如df.head()
的输出。你能在不绘图的情况下尝试计算y = mlab.normpdf(x,ma,std)
吗?我想你也会得到一个错误。你能显示print ma
和print std
的输出吗?我敢打赌,它们不是花车,而是熊猫系列。
@F***Rost,df.head() 的输出是:VEP 日期 2005-05-16 4.1729 2005-05-17 4.1700 2005-05-18 4.3400 2005-05-19 4.3600 2005-05- 20 4.3700
打印输出(ma):VEP 7.14688 dtype:float64 和打印输出(std):VEP 19.335596 dtype:float64
您好!我想到了。正确的行代码是: plt.plot(x,mlab.normpdf(x,int(ma),int(std))) 唯一的问题是我不知道为什么会这样。无论如何,感谢@F***Rost 的帮助:)
【参考方案1】:
ma
和 std
在您的示例中是 pandas.Series
对象。原因是,np.mean
应用于 pandas.DataFrame
会返回 pandas.Series
。
但是, mlab.normpdf(x,ma,std) 需要浮点值或 numpy 数组作为输入。
您可以简单地将ma
和std
转换为ma = float(ma)
的浮点数。
正如您在评论中指出的那样,我不建议使用int(ma)
,因为那样会去掉小数点。
【讨论】:
法比安,再次感谢。我使用了 float(ma) 和 float(std),现在可以正常工作了。以上是关于ValueError:错误的项目数通过 500,位置暗示 1,Python 和 Pandas的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:错误的项目数通过 47,位置意味着 1 和 KeyError:'size'
ValueError:错误的项目数通过 5,位置意味着 1,在连续找到第二个最大值时出错
错误 **ValueError: 传递的项目数错误 2,位置暗示 1**
通过 sonata_type_collection 字段将 sonata_media_type 用作 1:N 时出现 500 错误