我有一个看起来像这样的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架中的不同,则可以用适当的列名替换为“日期”。