数据挖掘与建模之数据预处理

“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个极限而已。”

异常值(空值)处理

Pandas:isnull()和duplicated()

1.直接丢弃(包括重复数据)

Pandas:drop()/dropna()/drop_duplicated()

2.插值替代

Pandas:interpolate()----Series

df = pd.DataFrame({"A": ["a0","a1","a1","a2","a3","a4"],"B": ["b0","b1","b2","b2","b3", None],

"C": [1,2, None,3,4,5],"D": [0.1,10.2,11.4,8.9,9.1,12],"E": [10,19,32,25,8, None],

"F": ["f0","f1","g2","f3","f4","f5"]})

print(df)

A B C D E F

0 a0 b0 1.0 0.1 10.0 f0

1 a1 b1 2.0 10.2 19.0 f1

2 a1 b2 NaN 11.4 32.0 g2

3 a2 b2 3.0 8.9 25.0 f3

4 a3 b3 4.0 9.1 8.0 f4

5 a4 None 5.0 12.0 NaN f5

如上数据中字符为空的用None,数值为空的用NaN表示,现在删除列属性B,C中为空的所在行数据:

print(df.dropna(subset=["B","C"]))

A B C D E F

0 a0 b0 1.0 0.1 10.0 f0

1 a1 b1 2.0 10.2 19.0 f1

3 a2 b2 3.0 8.9 25.0 f3

4 a3 b3 4.0 9.1 8.0 f4

如果要删除所有的列属性中有空值的行可用

print(df.dropna())

如果只想删除列属性A中具有重复值的行可用如下命令

print(df.drop_duplicates(["A"],keep="last")) #keep="last" 表示保留A属性重复值中的最后一行

A B C D E F

0 a0 b0 1.0 0.1 10.0 f0

2 a1 b2 NaN 11.4 32.0 g2

3 a2 b2 3.0 8.9 25.0 f3

4 a3 b3 4.0 9.1 8.0 f4

5 a4 None 5.0 12.0 NaN f5

现在对空值进行插值:

如果我们用均值进行填值,例如对列属性E的空值填入其均值

df["E"]=df["E"].fillna(df["E"].mean())

print(df)

A B C D E F

0 a0 b0 1.0 0.1 10.0 f0

2 a1 b2 NaN 11.4 32.0 g2

3 a2 b2 3.0 8.9 25.0 f3

4 a3 b3 4.0 9.1 8.0 f4

5 a4 None 5.0 12.0 18.8 f5

也可以用三次样条函数进行插值:

df["E"]=df["E"].interpolate(method="spline",order=3)

print(df)

A B C D E F

0 a0 b0 1.0 0.1 10.000000 f0

1 a1 b1 2.0 10.2 19.000000 f1

2 a1 b2 NaN 11.4 32.000000 g2

3 a2 b2 3.0 8.9 25.000000 f3

4 a3 b3 4.0 9.1 8.000000 f4

5 a4 None 5.0 12.0 -20.143603 f5

观察D属性列,发现第一行为0.1,与其余五行貌似不在一个数量级上,也有可能是异常值,现在我们用四分位数确定上下界的方法进行过滤:

upper_q=df["D"].quantile(0.75)

lower_q = df["D"].quantile(0.25)

q_int=upper_q-lower_q

k=1.5

df1=df[df["D"]>lower_q-k*q_int][df["D"]

print(df1)

A B C D E F

1 a1 b1 2.0 10.2 19.0 f1

2 a1 b2 NaN 11.4 32.0 g2

3 a2 b2 3.0 8.9 25.0 f3

4 a3 b3 4.0 9.1 8.0 f4

5 a4 None 5.0 12.0 NaN f5

则第一行就被删除了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181128G1K0BY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券