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

使用Plotly Express创建交互式柱状图时遇报错求助

Plotly Express柱状图报错修正方案

问题场景

想要用Plotly Express创建交互式柱状图,统计**当日起止(开始日期=结束日期)**的任务按标题分类的数量,但运行代码时触发报错。

原代码

import plotly.express as px
import pandas as pd

# Sample task data
task_data = {
    'Task Title': ['Task 1', 'Task 2', 'Task 3', 'Task 4'],
    'Start Date': ['2023-09-16', '2023-09-16', '2023-09-17', '2023-09-18'],
    'End Date': ['2023-09-16', '2023-09-17', '2023-09-17', '2023-09-18'],
}

# Create a DataFrame
task_df = pd.DataFrame(task_data)

# Count the occurrences of each task title
task_counts = task_df['Task Title'].value_counts()

# Create an interactive bar chart
fig_task = px.bar(
    task_counts.reset_index(),
    x='index',  # Error occurs here
    y='Task Title',
    labels={'index': 'Task Title', 'Task Title': 'Count'},
    title='Tasks Starting and Ending on the Same Day by Title'
)

# Show the interactive bar chart
fig_task.show()

报错信息

ValueError: Value of 'x' is not the name of a column in 'data_frame'. Expected one of ['Task Title', 'count'] but received: index
To use the index, pass it in directly as `df.index`.

问题分析

  1. 列名错误:task_counts.reset_index()生成的DataFrame列名为Task Title和count,而非代码中写的index,导致Plotly找不到对应列。
  2. 逻辑遗漏:原代码未筛选“当日起止”的任务,直接统计了所有任务标题的数量,不符合初始需求。

修正代码

方案一:规范列名(推荐)

先筛选目标数据,再通过reset_index(name='Count')指定统计结果的列名,避免索引混乱:

import plotly.express as px
import pandas as pd

# 示例任务数据
task_data = {
    'Task Title': ['Task 1', 'Task 2', 'Task 3', 'Task 4'],
    'Start Date': ['2023-09-16', '2023-09-16', '2023-09-17', '2023-09-18'],
    'End Date': ['2023-09-16', '2023-09-17', '2023-09-17', '2023-09-18'],
}

task_df = pd.DataFrame(task_data)

# 筛选当日起止的任务
same_day_tasks = task_df[task_df['Start Date'] == task_df['End Date']]

# 统计各标题的任务数量,指定列名
task_counts = same_day_tasks['Task Title'].value_counts().reset_index(name='Count')

# 创建柱状图,直接使用真实列名
fig_task = px.bar(
    task_counts,
    x='Task Title',
    y='Count',
    title='当日起止任务按标题统计'
)

fig_task.show()

方案二:直接使用索引

按照报错提示,直接将DataFrame的索引作为x轴传入:

import plotly.express as px
import pandas as pd

task_data = {
    'Task Title': ['Task 1', 'Task 2', 'Task 3', 'Task 4'],
    'Start Date': ['2023-09-16', '2023-09-16', '2023-09-17', '2023-09-18'],
    'End Date': ['2023-09-16', '2023-09-17', '2023-09-17', '2023-09-18'],
}

task_df = pd.DataFrame(task_data)
same_day_tasks = task_df[task_df['Start Date'] == task_df['End Date']]
task_counts = same_day_tasks['Task Title'].value_counts()

fig_task = px.bar(
    task_counts,
    x=task_counts.index,
    y=task_counts.values,
    labels={'x': 'Task Title', 'y': 'Count'},
    title='当日起止任务按标题统计'
)

fig_task.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:39