我有一些想要分解,拟合然后再拍回的数据。熊猫中的数据帧还很陌生,因此我可以使代码按预期工作,但是很难看。我想知道你们是否对如何美化它有建议。下面是代表我在做什么的简单示例代码。
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
def Quadratic(x, a, b, c):
return a*x*x + b*x + c
data = pd.read_fwf('data.txt', header=None)
data.columns = ['x', 'f']
splits = [data['x'].iloc[ 0],
1, 3, 9, 10, 12
data['x'].iloc[-1]]
data_s1 = data[( splits[0] <= data['x']) & (data['x'] < splits[1])]
# Do this^ numerous times
data_s6 = data[( splits[5] <= data['x']) & (data['x'] <= splits[6])]
popt_s1, _ = curve_fit(Quadratic, data_s1['x'], data_s1['f'])
# Do this^ numerous times
popt_s6, _ = curve_fit(Quadratic, data_s6['x'], data_s6['f'])
dfit_s1 = pd.DataFrame({'x' : data_s1['Z (mm)'],
'f' : Quadratic(data_s1['Z (mm)'], *popt_s1)})
# Do this^ numerous times
dfit_s6 = pd.DataFrame({'x' : data_s6['Z (mm)'],
'f' : Quadratic(data_s6['Z (mm)'], *popt_s6)})
dfit = pd.concat([dfit_s1, # ... etc.
dfit_s6])
简而言之,我已完成以下操作:
我对优雅的要求实际上仅适用于3-5部分。它在代码中令人不愉快,并且不易于扩展(例如,我需要12个部分,而不是6个部分)。如果我可以简单地向拆分数组中添加元素,那将是很好的选择。
我试图弄清楚如何将它们包装在for
循环中,但是无法解决问题。我可以接受所有形式的信息,而不仅仅是for
,这只是一个例子。我也想沿途创建框架/数组(拟合参数,协方差,拟合)。谢谢!