【发布时间】:2016-11-19 06:24:20
【问题描述】:
我正在尝试找到一种方法来迭代代码以在 Z3 以上的许多列上进行线性回归。这是名为 df1
的数据帧的 sn-p Time A1 A2 A3 B1 B2 B3
1 1.00 6.64 6.82 6.79 6.70 6.95 7.02
2 2.00 6.70 6.86 6.92 NaN NaN NaN
3 3.00 NaN NaN NaN 7.07 7.27 7.40
4 4.00 7.15 7.26 7.26 7.19 NaN NaN
5 5.00 NaN NaN NaN NaN 7.40 7.51
6 5.50 7.44 7.63 7.58 7.54 NaN NaN
7 6.00 7.62 7.86 7.71 NaN NaN NaN
此代码仅返回非常 ONE 列的线性回归的斜率系数,并将该值连接到称为 series 的 numpy 系列,这是提取第一列的斜率的样子:
from sklearn.linear_model import LinearRegression
series = np.array([]) #blank list to append result
df2 = df1[~np.isnan(df1['A1'])] #removes NaN values for each column to apply sklearn function
df3 = df2[['Time','A1']]
npMatrix = np.matrix(df3)
X, Y = npMatrix[:,0], npMatrix[:,1]
slope = LinearRegression().fit(X,Y) # either this or the next line
m = slope.coef_[0]
series= np.concatenate((SGR_trips, m), axis = 0)
就目前而言,我正在使用这段代码,将“A1”替换为一个新的列名,一直到“Z3”,这是非常低效的。我知道有很多简单的方法可以用一些模块来做到这一点,但我的缺点是在时间序列中有所有这些中间 NaN 值,所以我似乎仅限于这种方法或类似的方法。
我尝试使用 for 循环,例如:
for col in df1.columns:
并替换“A1”,例如在代码中用 col 替换,但这似乎不起作用。
有什么方法可以更有效地做到这一点?
谢谢!
【问题讨论】:
标签: python numpy pandas scipy scikit-learn