1. 程式人生 > 程式設計 >使用Numpy對特徵中的異常值進行替換及條件替換方式

使用Numpy對特徵中的異常值進行替換及條件替換方式

原始資料為Excel檔案,由感測器獲得,通過Pyhton xlrd模組讀入,讀入後為陣列形式,由於其存在部分異常值和缺失值,所以便利用Numpy對其中的異常值進行替換或條件替換。

1. 將'nan'替換為給定值

import numpy as np
 
data = np.array([['nan',1,2,3,4],# 資料型別為字串型
        [10,15,20,25,'nan'],['nan',5,8,10,20]])
print(data)
# [['nan' '1' '2' '3' '4']
# ['10' '15' '20' '25' 'nan']
# ['nan' '5' '8' '10' '20']]
 
data[data == 'nan'] = 100 # 將numpy中為'nan'的項替換為 100
print(data)
# [['100' '1' '2' '3' '4']
# ['10' '15' '20' '25' '100']
# ['100' '5' '8' '10' '20']]
 
data = data.astype(float) # 將資料由字元型轉換為浮點型
print(data)
# [[100.  1.  2.  3.  4.]
# [ 10. 15. 20. 25. 100.]
# [100.  5.  8. 10. 20.]]

2. 按列進行條件替換

當利用'3σ準則'或者箱型圖進行異常值判斷時,通常需要對 > upper 或 < lower的值進行處理,這時就需要按列進行條件替換了。

print(data)
# [[100.  1.  2.  3.  4.]
# [ 10. 15. 20. 25. 100.]
# [100.  5.  8. 10. 20.]]
 
data[:,1][data[:,1] < 5] = 5 # 對第2列小於 5 的替換為5
print(data)
# [[100.  5.  2.  3.  4.]
# [ 10. 15. 20. 25. 100.]
# [100.  5.  8. 10. 20.]]
 
data[:,2][data[:,2] > 15] = 10 # 對第3列大於 15 的替換為10
print(data)
# [[100.  5.  2.  3.  4.]
# [ 10. 15. 10. 25. 100.]
# [100.  5.  8. 10. 20.]]

補充知識:Python之dataframe修改異常值—按行判斷值是否大於平均值的指定倍數,如果是則用均值替換

如下所示:

使用Numpy對特徵中的異常值進行替換及條件替換方式

import pandas as pd

data = {'hah':[1,9],'數量':[3,5],'價格':[10,9,8]}
df = pd.DataFrame(data)
df

import numpy as np
def panduan(x):
  x_mean = np.mean(x)
  print(x_mean)
  for i in x.index:
    if x[i] > x_mean*2:
      x[i] = x_mean
#     print(i)   
  return x

df = df.apply(lambda x:panduan(x),axis=1) 

以上這篇使用Numpy對特徵中的異常值進行替換及條件替換方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。