You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OLS回归结果存储排序报错:float()参数不能为Cell类型

问题:OLS回归结果转DataFrame时Cell类型转换错误

我尝试将OLS回归输出中的R-squared值和P-values存入DataFrame rankedvariableslist,并按P-values升序、R-squared值降序排序,但运行时出现错误:

float() argument must be a string or a number, not 'Cell'

推测原因是获取到的R-squared值和P-values为Cell类型,无法直接转换为float/int类型。

原代码示例

correspondantsleepvariable = []
correspondantpvalue = []
correspondantpvalue = [] 

newerresults = resultmodeldistancevariation2sleepsummary.tables[0]
newerdata = pd.DataFrame(newerresults)
rsquaredvalue = newerdata.iloc[0,3]
rsquaredvalues.append(rsquaredvalue)
modelpvalues = resultmodeldistancevariation2sleepsummary.tables[1]
newerdatavalues = pd.DataFrame(modelpvalues)
pvalue = newerdatavalues.iloc[12,4]
correspondantpvalue.append(pvalue)
correspondantsleepvariable.append(sleepvariable[i])
rankedvariableslist = pd.DataFrame({'Sleepvariables':correspondantsleepvariable, 'R-squared value':rsquaredvalues,'P-value':correspondantpvalue})
listed = list(range(0, 21))
listed = pd.DataFrame(listed)
rankedvariableslist = pd.concat((rankedvariableslist,listed),axis=1)
rankedvariableslist = rankedvariableslist.rename(columns={0: "Value"})
rankedvariableslist['R-squared value'] = rankedvariableslist['R-squared value'].astype('category').cat.as_ordered()
rankedvariableslist['P-value'] = rankedvariableslist['P-value'].astype('category').cat.as_ordered()
rankedvariableslist['Sleepvariables'] = rankedvariableslist['Sleepvariables'].astype('category').cat.as_ordered()
rankedvariableslist.sort_values(['P-value','R-squared value'],ascending = [True, False])
print(rankedvariableslist.head(3))

回归摘要示例(newerresults)

OLS Regression Results                            
==============================================================================
Dep. Variable:               distance   R-squared:                       0.028
Model:                            OLS   Adj. R-squared:                  0.016
Method:                 Least Squares   F-statistic:                     2.338
Date:                Fri, 18 Nov 2022   Prob (F-statistic):            0.00773
Time:                        12:39:29   Log-Likelihood:                -1274.1
No. Observations:                 907   AIC:                             2572.
Df Residuals:                     895   BIC:                             2630.
Df Model:                          11                                          
Covariance Type:            nonrobust                                          
==============================================================================

问题原因

statsmodels的回归摘要表格(summary().tables)中的每个单元格是Cell对象,不是直接的数值或字符串。直接将表格转DataFrame后提取的元素是Cell实例,无法直接转换为数值类型,因此报错。

解决方案

有两种可靠的处理方式:

方式1:直接从回归结果对象提取属性(推荐)

statsmodels的OLS结果对象本身提供了直接获取统计量的属性,不需要从摘要表格中提取,避免Cell类型问题:

  • R-squared值:resultmodeldistancevariation2sleep.rsquared(直接返回float)
  • 整体模型P值(Prob(F-statistic)):resultmodeldistancevariation2sleep.f_pvalue(直接返回float)
  • 单个变量的P值:resultmodeldistancevariation2sleep.pvalues[变量名](返回对应变量的float类型P值)

方式2:从Cell对象中提取原始值

如果必须从摘要表格中提取,需要访问Cell对象的data属性获取原始字符串,再转换为float:

# 提取R-squared
rsquaredvalue = float(newerdata.iloc[0,3].data)
# 提取P值
pvalue = float(newerdatavalues.iloc[12,4].data)

修改后的代码示例(方式1)

correspondantsleepvariable = []
rsquaredvalues = []  # 修正原代码重复定义correspondantpvalue的问题
correspondantpvalue = [] 

# 假设resultmodeldistancevariation2sleep是你的OLS回归结果对象
for i in range(len(sleepvariable)):
    # 替换为你实际训练模型的代码,比如针对每个sleepvariable训练模型
    # model = sm.OLS(y, X)
    # resultmodeldistancevariation2sleep = model.fit()
    
    # 直接从结果对象提取R-squared和P值
    rsquared_val = resultmodeldistancevariation2sleep.rsquared
    # 若需单个变量P值,替换为:resultmodeldistancevariation2sleep.pvalues[sleepvariable[i]]
    p_val = resultmodeldistancevariation2sleep.f_pvalue 
    
    rsquaredvalues.append(rsquared_val)
    correspondantpvalue.append(p_val)
    correspondantsleepvariable.append(sleepvariable[i])

# 构建DataFrame
rankedvariableslist = pd.DataFrame({
    'Sleepvariables': correspondantsleepvariable,
    'R-squared value': rsquaredvalues,
    'P-value': correspondantpvalue
})

# 添加Value列(保留原代码逻辑)
rankedvariableslist['Value'] = range(0, len(rankedvariableslist))

# 直接排序(数值类型无需转category)
rankedvariableslist = rankedvariableslist.sort_values(
    ['P-value', 'R-squared value'],
    ascending=[True, False]
)

print(rankedvariableslist.head(3))

内容的提问来源于stack exchange,提问作者Caledonian26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:01:22