Python/Numpy属性错误:';浮动';对象没有属性';罪恶';
我要把这篇文章贴在这里,因为这是一篇很难理解的文章,让我有些头疼。它可以说是四年前发布的一个副本,但我会再次发布它,以防有人有我在这里遇到的特定的熊猫numpy不兼容。或许有人会想出更好的答案 代码段:Python/Numpy属性错误:';浮动';对象没有属性';罪恶';,python,pandas,numpy,floating-point,attributeerror,Python,Pandas,Numpy,Floating Point,Attributeerror,我要把这篇文章贴在这里,因为这是一篇很难理解的文章,让我有些头疼。它可以说是四年前发布的一个副本,但我会再次发布它,以防有人有我在这里遇到的特定的熊猫numpy不兼容。或许有人会想出更好的答案 代码段: #import pdb; pdb.set_trace() # TODO: This raises AttributeError: 'float' object has no attribute 'sin' xr = xw + L*np.sin(θr) 输出: Traceback (most
#import pdb; pdb.set_trace()
# TODO: This raises AttributeError: 'float' object has no attribute 'sin'
xr = xw + L*np.sin(θr)
输出:
Traceback (most recent call last):
File "MIP_MPC_demo.py", line 561, in <module>
main()
File "MIP_MPC_demo.py", line 557, in main
animation = create_animation(model, data_recorder)
File "MIP_MPC_demo.py", line 358, in create_animation
xr = xw + L*np.sin(θr)
AttributeError: 'float' object has no attribute 'sin'
回溯(最近一次呼叫最后一次):
文件“MIP_MPC_demo.py”,第561行,在
main()
文件“MIP_MPC_demo.py”,第557行,主
动画=创建动画(模型、数据记录器)
创建动画中第358行的文件“MIP_MPC_demo.py”
xr=xw+L*np.sin(θr)
AttributeError:“float”对象没有属性“sin”
到目前为止,我所尝试的:
(Pdb) type(np)
<class 'module'>
(Pdb) np.sin
<ufunc 'sin'>
(Pdb) type(θr)
<class 'pandas.core.series.Series'>
(Pdb) np.sin(θr.values)
*** AttributeError: 'float' object has no attribute 'sin'
(Pdb) θr.dtype
dtype('O')
(Pdb) np.sin(θr)
*** AttributeError: 'float' object has no attribute 'sin'
(Pdb) θr.sin()
*** AttributeError: 'Series' object has no attribute 'sin'
(Pdb) θr.values.sin()
*** AttributeError: 'numpy.ndarray' object has no attribute 'sin'
(Pdb) θr.values.max()
nan
(Pdb) np.max(θr)
0.02343020407511865
(Pdb) np.sin(θr)
*** AttributeError: 'float' object has no attribute 'sin'
(Pdb) np.sin(θr[0])
0.0
(Pdb)类型(np)
(Pdb)np.sin
(Pdb)型(θr)
(Pdb)np.sin(θr.值)
***AttributeError:“float”对象没有属性“sin”
(Pdb)θr.dtype
数据类型('O')
(Pdb)np.sin(θr)
***AttributeError:“float”对象没有属性“sin”
(Pdb)θr.sin()
***AttributeError:“Series”对象没有属性“sin”
(Pdb)θr.values.sin()
***AttributeError:'numpy.ndarray'对象没有属性'sin'
(Pdb)θr.values.max()
楠
(Pdb)np.max(θr)
0.02343020407511865
(Pdb)np.sin(θr)
***AttributeError:“float”对象没有属性“sin”
(Pdb)np.sin(θr[0])
0
另一方面,这个例外至少可以说是误导性的。已经四年没有另一个人发布这个问题了。是否有其他人同意这一点,以及如何修改的建议?对例外情况的解释是什么?numpy是否正在执行某种映射操作并试图调用θr
的每个元素的sin
方法
我将很快发布答案…这失败的原因与:
import numpy as np
arr = np.array([1.0, 2.0, 3.0], dtype=object)
np.sin(arr)
# AttributeError: 'float' object has no attribute 'sin'
在对象数组上调用np.sin
时,它尝试调用每个元素的sin
方法
如果您知道θr.values
的数据类型,可以使用以下方法解决此问题:
arr = np.array(θr.values).astype(np.float64) # assuming the type is float64
np.sin(arr) # ok!
如果您知道θr的可能数据类型,则快速修复:
xr = xw + L*np.sin(θr.astype(float))
更好的解决方案。在创建数据帧时,从一开始就正确获取数据类型
而不是:
self.data = pd.DataFrame(index=range(n), columns=columns)
...
data.iloc[i, :] = new_data_dict
(我正在使用)
使用:
或:
或:
θr.值的类型是什么?您是正确的。然而,在我的例子中,我并不是从numpy数组开始的。如果我有它就会有正确的数据类型。我创建了一个空的数据帧,然后用浮点值填充它。DataFrame的默认类型是object,如果用float填充它,则它不会更改。。。。谢谢
data = pd.DataFrame(index=range(n), columns=columns, dtype=float)
data = pd.DataFrame(data=np.empty((n, len(columns)), columns=columns)
data = pd.DataFrame(np.full((n, len(columns), np.nan), columns=columns)