迭代数据帧的创建和操作

时间:2019-01-14 23:32:02

标签: python-3.x pandas loops numpy dataframe

我有一些想要分解,拟合然后再拍回的数据。熊猫中的数据帧还很陌生,因此我可以使代码按预期工作,但是很难看。我想知道你们是否对如何美化它有建议。下面是代表我在做什么的简单示例代码。

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])

简而言之,我已完成以下操作:

  1. 加载数据
  2. 从数据域的开头到结尾以任意切片位置创建一个数组
  3. 创建与所述拆分数组相对应的新数据帧
  4. 将这些部分调整为函数
  5. 使用拟合参数创建新的数据框
  6. 将它们放在一起形成一个大数据框

我对优雅的要求实际上仅适用于3-5部分。它在代码中令人不愉快,并且不易于扩展(例如,我需要12个部分,而不是6个部分)。如果我可以简单地向拆分数组中添加元素,那将是很好的选择。

我试图弄清楚如何将它们包装在for循环中,但是无法解决问题。我可以接受所有形式的信息,而不仅仅是for,这只是一个例子。我也想沿途创建框架/数组(​​拟合参数,协方差,拟合)。谢谢!

0 个答案:

没有答案