使用来自同一数据帧的变量(但列对长度不同)执行多个分段回归



我正在尝试分析和绘制每日温度和气体使用的分段回归。我在csv中有六列(每年两列对应(,我使用熊猫将其拉入,然后将每列定义为单独的变量。

我找到了关于如何在 Python 中应用分段线性拟合的答案之一?非常有用,并且能够使用以下代码运行断点分析并绘制图形:

import matplotlib.pyplot as plt
import pwlf
# Importing the csv and defining columns as variables
df = pd.read_csv(PATH)
Y_A = df.Column1 
X_A = df.Column2 
Y_B = df.Column3
X_B = df.Column4
# Analysing breakpoints
my_pwlf_a = pwlf.PiecewiseLinFit(X_A, Y_A)
breaks_a = my_pwlf_a.fit(2)
print(breaks_a)
# Graphing
x_hat = np.linspace(X_A.min(), X_A.max(), 100)
y_hat = my_pwlf.predict(x_hat)
plt.figure()
plt.plot(X_A, Y_A, 'o')
plt.plot(x_hat, y_hat, '-')
plt.xlabel('X'); plt.ylabel('Y');
plt.show()

这运行没有问题,并给出所需的结果。

当我尝试使用下一对变量(Y_B 和 X_B(重新调整代码的用途时,我遇到了问题:

my_pwlf_b = pwlf.PiecewiseLinFit(X_B, Y_B)
breaks_b = my_pwlf_b.fit(2)
print(breaks_b) 

返回的错误是:

ValueError: bounds should be a sequence containing real valued (min, max) pairs for each value in x

所有变量均为 float64,每列包含 366 行。感谢您在发现我错过的内容方面的任何帮助!

感谢 Zionsof 推动数据回归!

进一步的测试表明,列对的长度不相等是问题所在(例如,列 1 和 2 包含 366,而第 3 列和第 4 列包含 365(。我愚蠢地认为将列分成单独的变量可能会解决这个问题,但我不正确。这是我用来修复它的方法(numpy.isfinite(:

# Remove any blanks by ensuring the values are finite
Y_A = df.Column1[np.isfinite(df['Column1'])]
X_A = df.Column2[np.isfinite(df['Column2'])]
Y_B = df.Column3[np.isfinite(df['Column3'])]
X_B = df.Column4[np.isfinite(df['Column4'])]