У меня есть некоторые данные, которые я хотел бы разделить, подогнать, а затем соединить. Довольно плохо знаком с фреймами данных в пандах, так что я могу заставить код работать так, как задумано, но это ужасно. Мне было интересно, если бы у вас, ребята, была рекомендация, как бы вы ее украсили. Ниже приведен простой пример кода, представляющий то, что я делаю.
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
, это был просто пример. Я хотел бы также иметь возможность создавать кадры / массивы (параметры подгонки, ковариации, подгонки). Спасибо!