Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 避免在创建数据帧时重复列标题_Python_Pandas - Fatal编程技术网

Python 避免在创建数据帧时重复列标题

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

我是一个初学者,正在尝试创建存储一些模型性能(R²、RMSE、训练时间、预测时间等)的数据帧,下面是一个示例。但结果是一个重复列标题的数据帧。你能帮我避免这种情况吗?目标是使所有df只具有一个标题。。。 这个问题必须来自“for循环”,但我不确定如何解决它。 谢谢

以下是输出:

>    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)