如何解决如何将曲线拟合到包含 NaN 值的 Excel 文件的数据
我是 Python 的初学者。我有一个excel文件。此 excel 文件显示参数的每日值。这个excel文件包含四年的数据。某些值为 NaN
。这是我的 excel 文件示例。
Date f11
0 0.002
1 0.004
2 -
.
.
.
1625 -
1626 -0.001
1627 -0.0013
我想通过模型找到 f11
数据的拟合曲线。这是我的代码。
df =pd.read_excel ('final-all-filters.xlsx')
x = df['Date']
y = df['f11'].dropna(how='all',axis=0)
def model(x,b,m,c,d,f,g,h,i):
return b+m*x+ c*np.sin(x/180)+d*np.cos(x/180)+h*np.sin(x/180)+i*np.cos(x/180)+ f/g * np.exp (681-x)* np.heaviside(x-681,681)
popt,pcov = curve_fit (model,x,y,p0=[0.05,0.05,0.05 ],maxfev = 10000)
print (popt)
当我运行这段代码时,我遇到了
的错误ValueError: operands could not be broadcast together with shapes (1639,) (1632,)
我应该提到,当我用随机值填充 NaN
单元格时,模型可以正常工作。
解决方法
您只是从 y 值中删除了 NaN
。
您应该先从 Dataframe 中删除受影响的行,然后为 x
和 y
值创建系列。
试试:
fixed = df.dropna()
x = fixed['Date']
y = fixed['f11']
def model(x,b,m,c,d,f,g,h,i):
return b+m*x+ c*np.sin(x/180)+d*np.cos(x/180)+h*np.sin(x/180)+i*np.cos(x/180)+ f/g * np.exp (681-x)* np.heaviside(x-681,681)
popt,pcov = curve_fit (model,x,y,p0=[0.05,0.05,0.05 ],maxfev = 10000)
print (popt)
编辑:
根据没有 NaN
的数据创建模型后,您可以使用它来填充缺失的数据。
您已经从 Y 中删除了 NaN,但没有从 X 中删除相应的索引。您必须这样做才能使模型运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。