熊猫布尔系列不会绘图
Posted
技术标签:
【中文标题】熊猫布尔系列不会绘图【英文标题】:Pandas boolean Series won't plot 【发布时间】:2019-01-14 22:49:21 【问题描述】:我是 Python 新手,我正在尝试绘制一个布尔数组。但是,我遇到了一个错误,尽管其他人似乎对绘制布尔数组没有任何问题。
对于数值数组,它按预期工作。所以,下面的代码可以正常工作。
import pandas as pd
series_numeric = pd.Series([0,1,0])
series_numeric.plot()
但是,对于布尔数组,会发生错误。这是代码:
import pandas as pd
series_bool = pd.Series([False,True,False])
series_bool.plot()
它会抛出以下错误:
TypeError: Empty 'DataFrame': no numeric data to plot
但是,这很奇怪,因为this video(1:45:48)的演讲者在绘制布尔数组时似乎没有任何问题。
希望任何人都可以提供帮助!
【问题讨论】:
您使用的是什么pandas
版本?
可以用pandas复制0.22.0
,这看起来像个bug
这是我预期的错误。我可能在视频中错过了它,尽管我没有看到他在哪里绘制布尔值。您希望series_bool.plot()
生成的图形是什么样的?
我使用的是 Pandas 0.23.4 版。
我也有同样的问题。如果您想查看零和一,那么 boolean 不是您想要的类型。只需将astype
与float
或int
一起使用。正如@Peyman 所示。为简洁起见,您也可以series_bool.mul(1).plot()
。
【参考方案1】:
这绝对是由于pandas/plotting/_core.py
处理数据的方式发生了变化。如果你去source of the current release 0.23.4,被认为是数字的data_types是np.number, "datetime", "datetimetz", "timedelta"
:
numeric_data = data.select_dtypes(include=[np.number,
"datetime",
"datetimetz",
"timedelta"])
try:
is_empty = numeric_data.empty
except AttributeError:
is_empty = not len(numeric_data)
# no empty frames or series allowed
if is_empty:
raise TypeError('Empty 0!r: no numeric data to '
'plot'.format(numeric_data.__class__.__name__))
如果我们将几个版本返回到source of release 0.20.0,则此行如下所示:
numeric_data = data._convert(datetime=True)._get_numeric_data()
随着0.21.0
的发布而改变
【讨论】:
【参考方案2】:先转换类型,然后绘制如下:
series_bool.astype(float).plot()
P.S.,在您所指的视频中,讲师也在绘制 True/False,所以这看起来像是 Pandas 对布尔值处理的改变
【讨论】:
numerical_status = machine_status=='OK'
返回一个布尔系列。您可以通过运行以下等效功能来检查这一点:(pd.Series(['apple', 'apple', 'banana'])=='apple').plot()
。我的猜测是,处理布尔值的方式已经从它们被隐式转换为 0 和 1,就像 pythonic 一样,它们被视为非数字类型。尝试在你的 python 控制台中输入True+1
。
@tobsecret 对于布尔系列是正确的。然而,Peyman 提出的建议有效。非常感谢!
@tobsecret 你是对的!这似乎与 Pandas 处理布尔值的变化有关!编辑答案以反映这一点!以上是关于熊猫布尔系列不会绘图的主要内容,如果未能解决你的问题,请参考以下文章