【发布时间】:2022-01-17 00:07:10
【问题描述】:
我只是想加深对使用布尔值绘制熊猫系列数据的理解,以掩盖我不想要的值。我不确定我所拥有的是正确或有效的方法。
不要误会我的意思,我确实得到了我想要的图表,但我对语法的假设是否正确?
我想要做的就是在我的图表上绘制非零值。我没有像往常一样格式化图表,因为这只是对布尔值和屏蔽数据的测试,而不是用于创建报告等级图表。
如果我将其屏蔽为 Pandas DataFrame,如果 df1 是我的 DataFrame,我会执行以下操作。 我理解这一点,df1[mask] 根据需要返回我的值是有道理的
# Plot our graph with only items that are non-zero
fig = px.bar(df1[mask], x = 'Animals', y = 'Count')
fig.show()
以熊猫系列的形式进行 这是创建我需要的图形的 sn-p
# Plot our graph with only items that are non-zero
fig = px.bar(sf, x = sf.index[sf_mask], y = sf[sf_mask])
fig.show()
在我将我的掩码添加到 sf 并得到错误的初始测试之后。我推断我需要针对 x 和 y 参数添加掩码。我认为这是因为系列只是一列,并且索引设置为我的“动物”。因此,通过映射 sf.index[sf_mask] 我在索引中获得了返回的动物,并且 sf[sf_mask] 返回了值。未能添加任何一个都会给出“ValueError”,指出参数应该具有相同的长度。
这是我为测试我的工作所做的工作
我的初始导入并将 Plotly 设置为我的绘图后端
import pandas as pd
import plotly.express as px
# Set our plotting backend to Plotly
pd.options.plotting.backend = "plotly"
我刚刚从字典中创建了一个测试数据集
animals = {'rabbits' : 1,
'dogs' : 3,
'cats' : 0,
'ferrets' : 3,
'horses' : 8,
'goldfish' : 0,
'guinea_pigs' : 2,
'hamsters' : 6,
'mice' : 3,
'rats' : 0
}
然后将其转换为熊猫系列
sf = pd.Series(animals)
然后我创建我的布尔掩码来屏蔽我们在 Pandas 系列中的所有非零条目
sf_mask = sf != 0
如果我然后查看掩码,我可以看到我只会得到非零值,这正是我正在寻找的。p>
sf[sf_mask]
在我的系列中输出我的非零项目。
rabbits 1
dogs 3
ferrets 3
horses 8
guinea_pigs 2
hamsters 6
mice 3
dtype: int64
如果我使用以下语法在没有布尔掩码“sf_mask”的情况下进行绘图,我将获得完整的 Pandas 系列图表
# Plot our Series showing all items
fig = px.bar(sf, x = sf.index, y = sf)
fig.show()
如果我使用以下语法使用我的布尔掩码“sf_mask”进行绘图,我会得到我想要的图表,它排除了零值项目的间隙。
# Plot our graph with only items that are non-zero
fig = px.bar(sf, x = sf.index[sf_mask], y = sf[sf_mask])
fig.show()
【问题讨论】:
标签: python-3.x pandas boolean plotly series