【问题标题】:print outliers from scatterplot pandas打印散点图熊猫的异常值
【发布时间】:2021-03-10 10:50:39
【问题描述】:

在对数据帧的两列进行散点图后,数据帧的最后一行显然存在异常值,我尝试打印它,但此代码始终打印“无异常值”。 看起来很简单,但不知何故我不明白为什么这段代码 没有检测到这个异常值。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data=[[ 10,10],
    [ 15,15],
    [ 14,14]
    ,[16,16],
    [19,19],
    [17,17]
    ,[6,6],
    [5,5],
    [20,20]
    ,[22,22],
    [21,21],
    [18,45 ]]
df = pd.DataFrame(data, columns=['x','y'])

plt.scatter(df['x'],df['y'])
plt.show()

if 17<df['x'].any()<19 and 42<df['y'].any()<48:
    print(df['x'], df['y'])
else:
    print('no outliers')

【问题讨论】:

  • 问题是df['x'].any()返回True。如果您要求17&lt;df['x'].any()17&lt;True,您会得到False。因此,您永远不会输入 if 子句。

标签: python pandas scatter-plot outliers


【解决方案1】:

Series.between&amp; 一起用于按位AND 并过滤boolean indexing

m = df['x'].between(17, 19, inclusive=False) & df['y'].between(42, 48, inclusive=False)

if m.any():
    df1 = df[m]
    print (df1)
         x   y
    11  18  45
else:
    print('no outliers')

【讨论】:

  • 谢谢。我还有一个问题:是否可以在下面的代码中包含更多参数,以防我发现更多要打印的异常值?或者我必须为每个异常值编写以下代码?
  • @d8a988 - 不是 100% 确定是否理解,但 here 是检测异常值的另一种方法,希望对它有所帮助。
  • 我的意思是如何在第一行 m=df['x'] 等中添加更多异常值...例如,如果我在散点图中检测到其他异常值,我希望能够在您的代码的第一行,但我不确定哪个是正确的方法。
  • @d8a988 - 如果需要删除数字,那么是的,它应该可以正常工作。
  • 不幸的是,我遇到了另一个异常值问题。您可能知道问题是什么吗?这是链接:stackoverflow.com/questions/66598118/…
猜你喜欢
  • 2020-09-23
  • 1970-01-01
  • 2017-05-07
  • 2021-11-25
  • 2019-10-21
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多