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

基因时间线性回归绘图遇TypeError错误求助

解决线性回归预测散点图绘制的TypeError问题

错误原因分析

你遇到的TypeError: string indices must be integers是因为**df5.iterrows()返回的是(行索引, 行数据)元组**,代码里的i是行的索引值(从你的df5结构看是字符串类型的时间点,比如'0'、'12'),而不是行数据对象。你试图用i["prediction"]去取值,相当于用字符串索引字符串,自然会报错。

此外原代码还有其他逻辑问题:

  • 双重循环iterrows()+列循环完全冗余,会重复绘制大量无效图表
  • px.scatter传入df5[col]会丢失split、prediction等关键列,导致color='split'失效
  • 代码中y.min()、y.max()的y变量未定义,会触发新的NameError

修正后的代码

假设你的df5结构是:行索引为时间点,列包含各个基因的表达值、prediction(预测值列)、split(训练/测试集标记列),要为每个基因绘制真实表达值vs预测值的散点图(带边际直方图和参考线),代码如下:

import plotly.express as px

# 遍历每个基因列(排除prediction和split列)
for gene_col in [col for col in df5.columns if col not in ['prediction', 'split']]:
    # 使用完整的df5作为数据源,确保能访问split和prediction列
    fig = px.scatter(
        df5,
        x=gene_col,  # X轴:基因的真实表达值
        y='prediction',  # Y轴:模型预测值
        marginal_x='histogram',
        marginal_y='histogram',
        color='split',  # 按训练/测试集标记上色
        trendline='ols',
        title=f'基因 {gene_col} 的真实值vs预测值'  # 添加图表标题区分不同基因
    )
    # 设置直方图为概率分布
    fig.update_traces(histnorm='probability', selector={'type':'histogram'})
    # 添加y=x参考线(真实值=预测值的理想线)
    x_min, x_max = df5[gene_col].min(), df5[gene_col].max()
    fig.add_shape(
        type="line",
        line=dict(dash='dash'),
        x0=x_min, y0=x_min,
        x1=x_max, y1=x_max
    )
    fig.show()

关键说明

  • 循环逻辑优化:直接遍历基因列,跳过prediction和split这类非基因列,避免无效循环
  • 数据源正确传递:用完整的df5作为px.scatter的输入,确保所有需要的列(split、prediction)都能被访问
  • 参考线修复:用基因列的极值定义参考线的起止点,避免未定义变量的错误
  • 索引问题解决:彻底避开了iterrows()的误用,直接通过列名访问数据,更高效且不易出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:09:21