如何解决单值字典转换为Pandas DataFrame时的ValueError错误?
解决字典转DataFrame时的ValueError问题
问题场景
我们运行以下代码训练多个回归模型并记录测试集R²分数:
import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression,Ridge,Lasso,ElasticNet from sklearn.neighbors import KNeighborsRegressor from sklearn.tree import DecisionTreeRegressor from sklearn.svm import SVR from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split X,y =make_regression(n_samples=2000,n_features=20,n_informative =7,noise=3.1,random_state=1) X_train,X_test,y_train,y_test =train_test_split(X,y,test_size=0.3,random_state=1) algo_list =[('linear_Regression',LinearRegression()),('Ridge',Ridge()),('Lasso',ElasticNet()),('KNN',KNeighborsRegressor()),('CART',DecisionTreeRegressor()),('SVR',SVR())] algo_results ={} for name,model in algo_list: model.fit(X_train,y_train) algo_results[name] =model.score(X_test,y_test) print(algo_results)
运行后得到的字典结果:
{'linear_Regression': 0.999615308811996, 'Ridge': 0.9996150421204321, 'Lasso': 0.8758019197852375, 'KNN': 0.6274472685707742, 'CART': 0.46164502153497877, 'SVR': 0.17305435111869027}
尝试用以下代码将字典转为DataFrame时触发错误:
algo_dataframe =pd.DataFrame.from_dict(algo_results) print(algo_dataframe.head())
错误信息:
ValueError: If using all scalar values, you must pass an index
错误原因
你的推测正确:字典中所有值都是单个标量(每个模型对应一个R²分数),pandas无法自动推断DataFrame的结构,因此要求显式传入索引参数。
修正方案
方案1:显式传入index参数
通过指定单元素索引,让pandas生成一行多列的DataFrame,每列对应一个模型的分数:
algo_dataframe = pd.DataFrame.from_dict(algo_results, index=[0])
方案2:转换为键值对列表构造DataFrame
将字典转为(模型名, 分数)的列表,生成两列多行的结构,更适合对比不同模型的性能:
algo_dataframe = pd.DataFrame(list(algo_results.items()), columns=['模型名称', '测试集R²分数'])
方案3:先转Series再转DataFrame
先将字典转为Series(索引为模型名,值为分数),再转为DataFrame,得到一列多行的结构:
algo_dataframe = pd.Series(algo_results, name='测试集R²分数').to_frame()
内容的提问来源于stack exchange,提问作者dato datuashvili
相关产品推荐
相关产品推荐

