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

Plotly.express绘制饼图时如何剔除pandas数据中的NaN空值?

饼图空值问题解决方法

两种修改方式都可以实现剔除Null空值的需求,更建议调整初始DataFrame的转换逻辑,你当前使用pivot的方式本身不符合后续统计的需求。


问题根源

你当前执行df.pivot(columns='Month', values='Instrument')之后,得到的宽表结构中,每一行仅对应一个月份的乐器值,其余月份的单元格全部为NaN。所以Plotly统计对应月份的数值时,会把这些NaN也纳入统计,就出现了饼图中的Null占比。

你遇到的异常效果如下图:
null值不应被展示


推荐方案:调整DataFrame转换逻辑

删掉冗余的pivot转换步骤,直接基于原始长表数据按选中月份过滤统计,从根源避免空值产生。
修改后的完整代码如下:

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd

df = pd.DataFrame([
        ['January', 'Violin'],
        ['February', 'Piano'], 
        ['March', 'Violin'],
        ['February', 'Violin'],
        ['January', 'Piano'],
        ['January', 'Violin']], 
    columns=['Month', 'Instrument']
)

# 删掉原本的pivot转换代码,不需要转宽表

app = dash.Dash(__name__)

app.layout = html.Div([
    html.P("Select a month:"),
    dcc.Dropdown(
        id='my_dropdown',
        value = 'January',
        options=[
                  {'label': 'January', 'value': 'January'},
                  {'label': 'February', 'value': 'February'},
                  {'label': 'March', 'value': 'March'}
        ],
        clearable=False,
        style={"width": "50%"}
    ),
    dcc.Graph(id="pie-chart"),
])

@app.callback(
    Output("pie-chart", "figure"),
    [Input("my_dropdown", "value")])
def generate_chart(my_dropdown):
    # 先过滤对应月份的数据,自动排除其他月份的无关内容,无空值
    filtered_df = df[df['Month'] == my_dropdown]
    fig = px.pie(filtered_df, names='Instrument')
    return fig

app.run_server(debug=True)

可选方案:仅修改Plotly绘图代码

如果你要保留当前的pivot宽表结构,只需要在绘图时对选中列做空值剔除即可,将回调函数的代码修改为:

def generate_chart(my_dropdown):
    # 用dropna()删除选中列的空值后再绘图
    fig = px.pie(df[my_dropdown].dropna(), names=my_dropdown)
    return fig

该方案仅做临时修复,宽表中大量冗余空值的问题依然存在,更推荐用第一种方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:27:01