缺失数据的处理

做数据分析挖掘特征之前,都要先处理好数据,数据处理里第一步我们要先处理有缺失值的情况。

查看导入的数据缺失情况:

 1 import pandas as pd
 2 from io import StringIO
 3 
 4 csv_data = """A,B,C,D
 5 1.0,2.0,3.0,4.0
 6 5.0,6.0,,8.0
 7 0.0,11.0,12.0,
 8 """
 9 df = pd.read_csv(StringIO(csv_data))
10 print(df)
11 # 输出缺失值的个数
12 missing = df.isnull().sum()
13 print(missing)
14 print(missing.values, type(missing.values))
15 print(missing.values[1:])  # 可以索引取值,但是不是列表,方法属性不一样
16 print(dir(missing.values))

  通过打印的输出我们可以发现使用 isnull方法可以判断值是否为空,isnull().sum()方法按列输出缺失值的个数。

  我们可以利用数据框(DataFrame)的values属性来获取对应的NumPy数组。

删除有缺失值的行或列:

1 print(df.dropna())  # 按行删除有缺失值
2 print(df.dropna(axis=1))  # 删除列中有缺失值的列
3 print(df.dropna(how="all"))  # 删除那些行全是缺失值的
4 print(df.dropna(thresh=4))  # 删除那些没有4个值的行
5 print(df.dropna(subset=["C"]))  # 删除缺失值出现在列标为"C"的行

缺失数据填充:

1 from sklearn.preprocessing import Imputer
2 
3 imr = Imputer(missing_values='NaN', strategy='mean', axis=0)
4 imr = imr.fit(df)
5 imputed_data = imr.transform(df.values)
6 print(imputed_data)

  修改之后的结果:

  

  注意这里是按列求和再除值的个数,你也可以设置 axis=1 按行插补。

清澈的爱,只为中国
原文地址:https://www.cnblogs.com/dan-baishucaizi/p/9102100.html