gpt4 book ai didi

python - 如何从 Pandas 数据框中提取 x 和 y 对,然后在 symfit 中使用?

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:14 26 4
gpt4 key购买 nike

我正在使用 pandas 读取 .csv 文件。然后,我从数据框中取出 x 和 y 对,并使用 symfit 对数据执行全局拟合。我是 pandas 数据框和 symfit 的新手。我目前的概念验证代码适用于两个数据集,但我想以一种适用于许多数据集的方式编写它,但是许多数据集是从原始 .csv 文件导入的采用相同的格式——列始终是 xy 值对,格式为 x1、y1、x2、y2、 等.

我可以遍历数据框并为 x1, y1, x2, y2, 等提取单独的数组吗?这是否违背了使用数据框的目的?

    # creating the dataframe

from pandas import read_csv, Series, DataFrame, isnull

data_file = read_csv(filename, header=None, skiprows=2) # no data in first two rows--these contain information I use later on for plotting

# important note: data sets contain different numbers of points, so pandas reads in nan for any missing values.

X1 = Series(data_file[0]).values
X1 = x_1[~isnull(x_1)] # removes any nan values (up for any suggestions on a better way to do this. Other methods I have tried remove entire rows or columns that contain nan)

Y1 = Series(data_file[1]).values
Y1 = y_1[~isnull(y_1)]

X2 = Series(data_file[2]).values
X2 = x_2[~isnull(x_2)]

Y2 = Series(data_file[3]).values
Y2 = y_2[~isnull(y_2)]

# sample data
# X1 = [12.5, 6.7, 5, 3.1, 128, 47, 5, 3.1, 6.7, 12.5]
# Y1 = [280, 150, 127, 85, 400, 401, 110, 96, 131, 241]
# X2 = [75, 39, 10, 7.7, 19, 39, 75]
# Y2 = [296, 257, 141, 100, 181, 254, 324]

从这里我将 X 和 Y 传递给包含 symfit 模型和拟合函数的类。我不认为我可以连接 X 和 Y;我需要它们保持分开,这样 symfit 将为每个数据集拟合单独的曲线(具有四个共享参数)。

下面是我使用的模型。我可能在扼杀 symfit 的语法。我仍在学习 symfit,但到目前为止它一直很棒。此拟合适用于两个数据集,我能够提取拟合参数并稍后绘制结果。

    # This model assumes two data sets. I need to figure out how to fit as many as 10 data sets.

from symfit import parameters, variables, Fit, Model

fi_1 = 0 # These parameters change with each x,y pair. These will also be read from the original data file. I have them hard-coded here for ease.
fi_2 = 1

x_1, x_2, y_1, y_2 = variables('x_1, x_2, y_1, y_2')

vmax, km, evk, ev = parameters('vmax, km, evk, ev') # these are all shared

model = Model({
y_1: vmax * x_1 / (km * (1 + (fi_1 * evk)) + x_1 * (1 + (fi_1 * ev))),
y_2: vmax * x_2 / (km * (1 + (fi_2 * evk)) + x_2 * (1 + (fi_2 * ev)))})

fit = Fit(model, x_1=X1, x_2=X2, y_1=Y1, y_2=Y2)
fit_result = fit.execute()

问题总结:我可以同时安装多达 10 个 x、y 对。是否有一种干净的方法来遍历数据帧,从而避免对传递给 symfit 的 x 和 y 数组进行硬编码?

最佳答案

事实证明,这比我想象的要容易得多。我能够重组输入 .csv 文件,以便有一列用于 x 值,一列用于 y 值,一列用于 fi,即在数据集之间变化的参数。所以所有属于一起的 x,y 对都有一个对应的 fi 值。例如,对于第一个数据集中的所有 x,y 对,fi = 0,一旦第二个数据集开始,fi = 1。我可以将它很好地扩展为具有不同值的任意数量的 x,y 对对于 fi。现在我可以有效地使用数据框了:

data_file = read_csv(filename, header=None, skiprows=1) #first row contains column labels now

这是简化的模型:

x, y, fi = variables('x, y, fi') # set variables
vmax, km, evk, ev = parameters('vmax, km, evk, ev') # set shared parameters

model = Model({y: vmax * x / (km * (1 + (fi * evk)) + x *(1 + (fi * ev)))})

fit = Fit(model, x=data_file[0], y=data_file[1], fi=data_file[2])

fit_result = fit.execute()

这很有效,而且比我想象的要干净得多。重组输入文件以简化数据导入有很大帮助!

关于python - 如何从 Pandas 数据框中提取 x 和 y 对,然后在 symfit 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com