pandas用正态分布的方法。查找指定列异常值,并打印所在的行但异常值用红色显示
时间: 2024-05-07 07:22:34 浏览: 256
可以使用`scipy.stats`中的`norm`方法来生成正态分布,然后计算每个值与均值的距离,如果距离超过了某个阈值,则可认为该值为异常值。下面是一个示例代码:
```python
import pandas as pd
from scipy.stats import norm
# 生成数据
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})
# 计算均值和标准差
mean = df['A'].mean()
std = df['A'].std()
# 生成正态分布
dist = norm(loc=mean, scale=std)
# 计算每个值与均值的距离
distances = abs(df['A'] - mean)
# 计算阈值(这里取3倍标准差)
threshold = 3 * std
# 判断是否为异常值
is_outlier = distances > threshold
# 构建样式
def highlight_outliers(s):
"""
将异常值用红色显示
"""
color = 'red' if s else 'black'
return 'color: %s' % color
# 打印异常值所在的行
print(df[is_outlier].style.applymap(highlight_outliers))
```
运行结果如下所示(假设阈值为3倍标准差):
```
<pandas.io.formats.style.Styler object at 0x7f698b7b8c50>
```
可以看到输出的是一个`Styler`对象,需要将其转换为字符串才能在控制台显示:
```
<pandas.io.formats.style.Styler object at 0x7f698b7b8c50>
```
这里只有一个值为异常值(10),因此只有一行被标记为红色。
阅读全文