pandas - 从以有序字典为行的系列创建熊猫数据框
问题描述
我正在尝试将lmfit
参数结果提取为数据框。我通过 a和参数传递 1 列x
、1 列,并将函数的输出作为 OrderedDict 传递给输出。data
fit_func
pars
minimize
lmfit
out = minimize(fit_func, pars, method = 'leastsq', args=(x, data))
res = out.params.valuesdict()
res
输出:
OrderedDict([('a1', 12.850309404600393),
('c1', 1346.833513206811),
('s1', 44.22337472274829),
('f1', 1.1275639898142586),
('a2', 77.15732669480884),
('c2', 1580.5712512351947),
('s2', 16.239969775527275),
('f2', 0.8684363668111492)])
我在 DataFrames 中想要的输出是这样实现的pd.DataFrame(res,index=[0])
:
我有 3 个数据列,我想快速适应:
x = d.iloc[:,0]
fit_odict = pd.DataFrame(d.iloc[:,1:4].\
apply(lambda y: minimize(fit_func, pars, method = 'leastsq', args=(x, y))\
.params.valuesdict()),index=[1])
但是我得到了一系列有序字典作为数据框中的行:
如何将三个参数结果作为行获得我想要的输出?有没有更好的方法来应用该功能?
更新:
在我的解决方案中附加了@M Newville。对于那些想要lmfit
从多个数据列中快速提取参数结果的人可能会有所帮助d1.iloc[:,1:]
:
def fff(cols):
out = minimize(fit_func, pars, method = 'leastsq', args=(x, cols))
return {key: par.value for key, par in out.params.items()}
results = d1.iloc[:,1:].apply(fff,result_type='expand').transpose()
输出:
解决方案
对于单一合身,这可能是您正在寻找的:
out = minimize(fit_func, pars, method = 'leastsq', args=(x, data))
fit_odict = pd.DataFrame({key: [par.value] for key, par in out.params.items()})
我想你可能正在寻找这样的东西:
results = {key: [] for key in pars}
for data in datasets:
out = minimize(fit_func, pars, method='leastsq', args=(x, data))
for par_name, val_list in results.items():
val_list.append(out.params[par_name].value)
results = pd.DataFrame(results)
您可能可以将所有内容都放入一条长线中,但我不推荐它——有人可能想阅读该代码;)。
推荐阅读
- python - 导入数据集时如何随机复制一些文档?
- mysql - 想从mysql db中的电话号码获取国家区号
- python - Jupyter Notebook 和 JupyterLab 有什么区别?
- javascript - 如何在angularjs中获取url参数?
- javascript - 如何使用javascript查找数组中的所有值是否相等
- php - Cake PHP 2.X 设置邮件发送时的异常处理
- python - Python,pip:安装过程中避免使用 gcc
- ios - 当用户想要在从一个选项卡导航到另一个选项卡时不自动刷新 webViewController 时如何刷新它
- java - 应用程序跳帧
- json - 节点函数不返回 JSON 对象