首页 > 解决方案 > Plotly.express、熊猫和 NaN

问题描述

根据下面的代码,我想以绘图方式可视化我的数据。但是,我创建的饼图也显示了 Null,我想省略它。

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']
)

df = df.pivot(columns='Month', values='Instrument')

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):
    fig = px.pie(df, names=my_dropdown)
    return fig

app.run_server(debug=True)

在这种情况下,我应该将某些内容更改为代码的情节部分,还是应该以不同的方式转换我的初始 DataFrame(而不是使用 df.pivot() 选项)?

null 不应该是可见的

标签: pandasplotlypie-chart

解决方案


看起来您想要的是对每个仪器的实例数进行计数,因此我认为您不需要旋转 DataFrame。您可以保持原样:

df
      Month Instrument
0   January     Violin
1  February      Piano
2     March     Violin
3  February     Violin
4   January      Piano
5   January     Violin

如果您将参数传递names='Instrument'px.pie,它将通过计算列中唯一值的出现次数来创建饼图Instrument,您不必担心出现空值。然后,您可以按用户在函数中以破折号选择的月份对 DataFrame 进行子集generate_chart化。

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']
)

# df = df.pivot(columns='Month', values='Instrument')

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):
    fig = px.pie(
        df[df['Month'] == my_dropdown], 
        names='Instrument'
    )
    # fig = px.pie(df, names=my_dropdown)
    return fig

app.run_server(debug=True)

在此处输入图像描述


推荐阅读