Python 避免在创建数据帧时重复列标题
我是一个初学者,正在尝试创建存储一些模型性能(R²、RMSE、训练时间、预测时间等)的数据帧,下面是一个示例。但结果是一个重复列标题的数据帧。你能帮我避免这种情况吗?目标是使所有df只具有一个标题。。。 这个问题必须来自“for循环”,但我不确定如何解决它。 谢谢 以下是输出:Python 避免在创建数据帧时重复列标题,python,pandas,Python,Pandas,我是一个初学者,正在尝试创建存储一些模型性能(R²、RMSE、训练时间、预测时间等)的数据帧,下面是一个示例。但结果是一个重复列标题的数据帧。你能帮我避免这种情况吗?目标是使所有df只具有一个标题。。。 这个问题必须来自“for循环”,但我不确定如何解决它。 谢谢 以下是输出: > Model R²_score RMSE AB_Av_ERR Training_time Pred_time 0 > LinearRegression 0.01 1736.2
> Model R²_score RMSE AB_Av_ERR Training_time Pred_time 0
> LinearRegression 0.01 1736.28 21.28 0.86
> 0.07 Model R²_score RMSE AB_Av_ERR Training_time Pred_time 0 Ridge 0.01 1736.28 21.28 0.32 0.08 Model
> R²_score RMSE AB_Av_ERR Training_time Pred_time 0 Lasso
> 0.01 1740.02 21.26 0.99 0.08
> Model R²_score RMSE AB_Av_ERR Training_time Pred_time 0 ElasticNet 0.01 1740.14 21.28 0.89 0.08
可以首先在循环外部创建空数据帧:
df = pd.DataFrame(columns=['Model', 'R²_score', 'RMSE', 'AB_Av_ERR', 'Training_time', 'Pred_time']
然后在循环中附加值,如下所示:
df = df.append(results, ignore_index=True)
试试这个:
models = [LinearRegression(), Ridge(), Lasso(),ElasticNet()]
df_res = pd.DataFrame(columns=['Model', 'R²_score', 'RMSE', 'AB_Av_ERR', 'Training_time', 'Pred_time']
for model in models:
start = time.time()
model.fit(X_train, y_train)
stop = time.time()
start1 = time.time()
predictions = model.predict(X_train)
stop1 = time.time()
results={'Model':type(model).__name__, 'R²_score':r2_score(y_train, predictions),'RMSE':
mean_squared_error(y_train, predictions),'AB_Av_ERR':mean_absolute_error(y_train, predictions),'Training_time':stop-start,'Pred_time':stop1-
start1}
df_res = df_res.append(results, ignore_index=True)
print(df_res)
谢谢RajeshM,我尝试了你的建议,但仍然不起作用……我仍然有重复的标题:-(您的print语句在循环中。因此它每次都打印完整的数据帧,这包括标题。您还可以在每次迭代中创建一个新的数据帧。因此,您得到的只是一行数据帧。@AnnaP请参阅我添加的代码。非常感谢RajeshM,明白了,现在它工作得很好!
models = [LinearRegression(), Ridge(), Lasso(),ElasticNet()]
df_res = pd.DataFrame(columns=['Model', 'R²_score', 'RMSE', 'AB_Av_ERR', 'Training_time', 'Pred_time']
for model in models:
start = time.time()
model.fit(X_train, y_train)
stop = time.time()
start1 = time.time()
predictions = model.predict(X_train)
stop1 = time.time()
results={'Model':type(model).__name__, 'R²_score':r2_score(y_train, predictions),'RMSE':
mean_squared_error(y_train, predictions),'AB_Av_ERR':mean_absolute_error(y_train, predictions),'Training_time':stop-start,'Pred_time':stop1-
start1}
df_res = df_res.append(results, ignore_index=True)
print(df_res)