我有一个看起来像这样的dataframe。

date    symbol  2023-03-01  2023-03-02  2023-03-03  2023-03-04  2023-03-05  2023-03-06  2023-03-07  2023-03-08  2023-03-09  2023-03-10  2023-03-11  2023-03-12
0   AAPL    3   4   1   4   0   0   0   1   2   3   1   1
1   AMGN    0   2   2   4   0   4   3   1   2   0   0   2
2   AXP     2   0   0   0   1   1   1   3   1   1   0   2
3   BA  2   2   0   4   2   4   4   0   0   4   0   2
4   CAT     2   3   4   3   1   1   1   3   1   1   4   0

我正在尝试使用绘图来执行数据列的散点图。我测试了下面的代码样本。

import plotly.express as px
for i, column in enumerate(df.columns,i):
    print(column)
    for index, row in df.iterrows():
      #print(index)
      print(row[column])
      fig = px.scatter(df, x=row[column], y=row[column], color=row[column], hover_data='symbol')
      fig.show()

我有这个错误。

值:“ x”的值不是'data_frame'中的列的名称。预期['符号',dateTime.date(2023,3,1),dateTime.date(2023,3,2),dateTime.date.date(2023,3,3),datetime.date.date.date(2023,3,4 4) ),dateTime.date(2023,3,5),dateTime.date(2023,3,6),dateTime.date(2023,3,7),dateTime.date.date(2023,3,8),dateTime.date.date.date(dateTime.date)( 2023,3,9),dateTime.date(2023,3,10),dateTime.date(2023,3,11),dateTime.date.date(2023,3,12)]但收到:AAPL

不知何故,我的方法是错误的,但我不确定问题是什么。

分析解答

代码中的问题在于,您将列的值作为"px.scatter()"中的"x"和"y"参数传递,这应该是列的名称,而不是值本身的名称。

要解决问题,您需要修改"px.scatter()"函数调用,以将列名作为"x"和"y"参数。

另外,您可以直接使用"df.iterrows()"方法来简化循环。这是您的代码的更新版本: 导入plotly.extress为px

for index, row in df.iterrows():
    fig = px.scatter(df, x='date', 
    y=row['symbol'], color=row['symbol'], 
    hover_data='symbol')
    fig.show()

如您所见,“日期”被用作"x"参数,因为它似乎是所有行的常见列。如果您的实际dataframe架中的不同,则可以用适当的列名替换为“日期”。