【问题标题】:Pandas Series boolean maps and plottingPandas 系列布尔地图和绘图
【发布时间】: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


    【解决方案1】:

    您对布尔值和掩码的理解是正确的。

    您可以稍微简化一下语法:如果您查看 plotly.express.bar documentation,您会发现参数 'x''y' 是可选的。您不需要传递'x''y',因为默认情况下,plotly.express 将使用系列的索引作为 x 和系列的值作为 y 创建条形图。您还可以通过掩码系列代替整个系列。

    例如,这将产生相同的条形图:

    fig = px.bar(sf[sf>0])
    fig.update_layout(showlegend=False)
    

    【讨论】:

    • 谢谢@Derek 最后的提示真的很有帮助
    • @twelsh37 不客气——很高兴为您提供帮助!
    猜你喜欢
    • 2019-01-14
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2017-01-28
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多