136、pandas操作——异常值和排列

检测和过滤异常值

异常值(outlier)的过滤或变换运算在很大程度上其实就是数组运算。

下面是一组检测4个焊脚高度的数据:
136、pandas操作——异常值和排列_第1张图片
0.png

读取数据,并找出P12这一列中绝对值大小超过0.3的值:
136、pandas操作——异常值和排列_第2张图片
1.png

使用any方法,选出全部“超过0.1或-0.1的值”的行,其中any(1)是把一行中只要有一个数据满足超过-0.1或0.1的值,即把这一行的数据提取出来:
136、pandas操作——异常值和排列_第3张图片
2.png

将数据的范围限制在-0.1到0.1以内,其中np.sign()返回一个由1和-1组成的数组,表示原始值的符号:
136、pandas操作——异常值和排列_第4张图片
3.png

排列和随机采样

利用numpy.random.permutation函数实现对Series或DataFrame的列的随机重排序。 通过需要排列的轴的长度调用permutation,可产生一个表示新顺序的整数列表:
136、pandas操作——异常值和排列_第5张图片
21.png

使用take函数按照列表进行排序:
136、pandas操作——异常值和排列_第6张图片
22.png

从permutation返回的数组中切下前k个元素,其中k为期望的子集大小:
136、pandas操作——异常值和排列_第7张图片
23.png

通过np.random.randint得到一组随机整数,使用替换的方式产生样品:
136、pandas操作——异常值和排列_第8张图片
24.png

源码:

# coding: utf-8

# ### 检测和过滤异常值

# In[1]:

import numpy as np
from pandas import Series,DataFrame
import pandas as pd


# In[2]:

# 读取数据
exl_file = 'D:\\Python\\notebook\\B403 USB.xlsx'
data = pd.read_excel(exl_file)
data.describe()


# In[3]:

# 找出某列中绝对值大小超过0.3的值
col = data['P12']
col[np.abs(col) > 0.1]


# In[4]:

# 使用any方法,选出全部“超过0.1或-0.1的值”的行
data[(np.abs(data) > 0.1).any(1)]


# In[5]:

'''
将数据的范围限制在-0.1到0.1以内,
其中np.sign()返回一个由1和-1组成的数组,表示原始值的符号
'''
data[np.abs(data) > 0.1] = np.sign(data) * 0.1
data.describe()


# ### 排列和随机采样

# In[6]:

df = DataFrame(np.arange(5 * 4).reshape(5,4))
print(df)


# In[7]:

# 调用permutation产生一个表示新顺序的整数列表
sampler = np.random.permutation(5)
print(sampler)


# In[8]:

# 使用take函数按照列表进行排序
df.take(sampler)


# In[9]:

df.take(np.random.permutation(len(df))[:3])


# In[10]:

bag = np.array([5,7,-1,6,4])
sampler = np.random.randint(0,len(bag),size=10)
print(sampler)


# In[11]:

draws = bag.take(sampler)
print(draws)

你可能感兴趣的:(136、pandas操作——异常值和排列)