pandas - 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() 选项)?
解决方案
看起来您想要的是对每个仪器的实例数进行计数,因此我认为您不需要旋转 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)
推荐阅读
- javascript - 使用 MediaRecorder 录制的视频无法上传到任何平台
- java - 如何获得一个字段的不同计数并对列表中的一个字段求和,该列表必须按 Java 8 中的某些字段分组?
- html - 需要帮助设置文本的边距
- javascript - 只有按下的按钮才能改变颜色
- react-native - ReactNative ScrollView onScroll 适用于 IOS 但不适用于 Android
- javascript - 当 contentEditable 设置为 true 时反应如何聚焦 div?
- html - 刷新页面后视频上的“自动播放”不起作用
- python - 如何根据条件从一个 pandas 数据框中提取数据并将其添加到另一个 pandas 数据框中?
- javascript - ANTD Form.Item 内的输入值未更新
- snowflake-cloud-data-platform - 如何将数据从一个表附加到雪花中的另一个表