有没有办法跳过在python中绘制NaN和Inf值?
假设我有这样的东西:
m1 m2 m3
4 5 2
3 2 3
4 3 4
2 5 0
4 3 8
3 4 0
2 3 4
我想画出m1
与m2/m3
的关系,所以有些情况下我会除以0,所以当我画出时,它会抛出ValueError: Axis limits cannot be NaN or Inf
有什么办法?谢谢
(我在panda中使用 Dataframe ,我转到m4 = df['m2'] / df['m3']
,然后转到m1
与m4
的绘图)
请注意, Dataframe 本身中没有inf或Nan值,但它们在操作后出现。
2条答案
按热度按时间snz8szmq1#
你能做的就是生成所有元素都是有限的行。
比如
m4 = m2/m3
:df['m4']= df.m2/df.m3
...并且可能包含无限元素。要解决此问题,请在数据框
df
上使用NumPy
的isfinite
,然后使用.all(1),如果行中的所有单元格都是有限的,则返回TRUE:df[np.isfinite(df).all(1)]
为便于查看,请参见随附的屏幕截图。
第一节第一节第一节第一节第一次
在此之后,您现在可以绘制
m1
与m4
的关系图,而无需担心无穷大值:希望这有帮助!
2g32fytz2#
根据我们提供的工具 * Pandas *,最简单的解决方案是:
因此,您的 * 系列 * 既不包含 * Inf *,也不包含 * NaN *。
因此,在生成
m4
时,将指令扩展为:获得(在您的情况下):
(no键 * 3 * 和 * 5 * 的值),可根据需要绘制。
编辑
我注意到(至少在 * Pandas * v. * 0.25 * 中)即使在 * y * 列中有 * Inf * 或 * NaN * 值,也可以生成DataFrame散点图。
我做了以下实验:
1.创建了 * m4***,没有**删除 * Inf / Nan * 值,但设置了其名称(稍后在 * join * 中需要):
1.将第二次出现的 * Inf * 替换为 * NaN *:
所以现在它同时包含 * Inf * 和 * NaN *。
1.生成绘图:
实际上,我得到了图片,没有任何错误。
显然,在这种情况下,任何 * Inf / NaN * 值都被悄悄地丢弃,并且只有在此之后才生成图片。