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

遍历DataFrame行列用Plotly绘散点图遇ValueError,求解决方案

问题分析与解决

错误原因

你的代码存在两个核心问题:

  1. 参数传递错误:px.scatter的x/y参数需要传入DataFrame的列名,或者与DataFrame长度匹配的数组。但你传入的row[column]是单个单元格的值(比如第一个循环里的AAPL),Plotly会误以为这是列名,但你的DataFrame里没有名为AAPL的列,因此抛出错误。
  2. 循环逻辑混乱:嵌套的iterrows()循环会遍历每个单元格,每次创建仅包含单个点的图表,完全不符合“绘制各列数据散点图”的需求。

解决方案

首先需要将当前的宽格式DataFrame转换为Plotly更易处理的长格式(tidy data),再根据需求绘制散点图。

步骤1:预处理DataFrame

先移除无用的date列(从你的数据来看,该列无有效数据):

import pandas as pd
import plotly.express as px

# 假设你的DataFrame是df,先清理数据
df = df.drop('date', axis=1)

步骤2:转换为长格式

用pd.melt将日期列转为行数据,保留symbol作为标识:

melted_df = df.melt(id_vars='symbol', var_name='date', value_name='value')

转换后的数据结构示例:

symboldatevalue
AAPL2023-03-013
AMGN2023-03-010
.........

方案1:所有日期数据汇总到一个散点图

如果需要展示所有日期的数值分布,用日期做横轴,数值做纵轴,颜色区分股票:

fig = px.scatter(melted_df, 
                 x='date', 
                 y='value', 
                 color='symbol', 
                 hover_data=['symbol', 'date'],
                 title='各股票每日数值散点图')
fig.show()

方案2:按日期单独绘制散点图

如果需要为每个日期列单独生成散点图(展示当天各股票的数值),可以循环日期列:

# 获取所有日期列(排除symbol列)
date_columns = df.columns[1:]

for col in date_columns:
    fig = px.scatter(df, 
                     x='symbol', 
                     y=col, 
                     color='symbol', 
                     hover_data=['symbol'],
                     title=f'{col} 各股票数值散点图')
    fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:55:35