使用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`.
问题分析
- 列名错误:
task_counts.reset_index()生成的DataFrame列名为Task Title和count,而非代码中写的index,导致Plotly找不到对应列。 - 逻辑遗漏:原代码未筛选“当日起止”的任务,直接统计了所有任务标题的数量,不符合初始需求。
修正代码
方案一:规范列名(推荐)
先筛选目标数据,再通过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
相关产品推荐
相关产品推荐

