我想知道使用Scipy来适应Pandas数据框列的最佳方法。如果我有一个包含列(A
、B
、C
、D
和Z_real
)的数据表(Pandas DataFrame),其中Z依赖于a、B、C和D,那么我想为每个数据帧行(序列)拟合一个函数,该函数对Z(Z_pred
)进行预测。
要匹配的每个函数的签名是
func(series, param_1, param_2...)
其中series是与数据帧的每一行相对应的Pandas系列。我使用Pandas系列,以便不同的函数可以使用不同的列组合。
我尝试使用
curve_fit(func, table, table.loc[:, 'Z_real'])
但由于某些原因,每个func实例都将整个数据表作为其第一个参数传递,而不是作为每行的序列传递。我也尝试过将数据帧转换为序列对象列表,但这会导致函数被传递一个Numpy数组(我想是因为Scipy执行从序列列表到Numpy数组的转换,而Numpy数组不会保留Pandas序列对象)。
您对
curve_fit
的调用不正确。来自the documentation:在这种情况下,您的自变量
xdata
是列A到D,即table[['A', 'B', 'C', 'D']]
,而您的自变量ydata
是table['Z_real']
。还要注意(k,M)数组,其中k是预测变量(即列)的数目,M是观测值(即行)的数目。因此,您应该对输入数据帧进行转置,使其成为(4,M),而不是(M,4),即
xdata
应该是一个table[['A', 'B', 'C', 'D']].T
。对
curve_fit
的整个调用可能如下所示:下面是一个显示多元线性回归的完整示例:
相关问题 更多 >
编程相关推荐